mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-04 05:29:28 -05:00
Compare commits
217 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
623cac6220 | ||
|
|
ad558b4984 | ||
|
|
ae0ba59f67 | ||
|
|
fd28a8b427 | ||
|
|
b390e5de98 | ||
|
|
82402abe43 | ||
|
|
78da7ddb55 | ||
|
|
1dd48743c2 | ||
|
|
015417d640 | ||
|
|
94de00b14c | ||
|
|
4d237c4328 | ||
|
|
b7f721e869 | ||
|
|
49ba555fc0 | ||
|
|
cd1b25ec2b | ||
|
|
109725fafe | ||
|
|
9c7b61070b | ||
|
|
8b5a1fef51 | ||
|
|
72f8dd5b3a | ||
|
|
1d3a922a7b | ||
|
|
ab2b145556 | ||
|
|
8960ff5a4d | ||
|
|
06b41b1b5a | ||
|
|
4277ac65a4 | ||
|
|
6ed815f1ac | ||
|
|
4ebfa6a3d0 | ||
|
|
529f75467b | ||
|
|
062895c7ca | ||
|
|
7b174ac498 | ||
|
|
beb8f627ee | ||
|
|
1badbaa182 | ||
|
|
75f2930f53 | ||
|
|
60b746e4dd | ||
|
|
dbef9af0df | ||
|
|
2a5cdf49ad | ||
|
|
0bb5432223 | ||
|
|
f565a50e90 | ||
|
|
0a840228b2 | ||
|
|
37c1964991 | ||
|
|
f3cd5b06fa | ||
|
|
c735ad5110 | ||
|
|
51b27cb002 | ||
|
|
0406f1df01 | ||
|
|
a72401a529 | ||
|
|
406c4d20cf | ||
|
|
49ef9ae85d | ||
|
|
d65eacea41 | ||
|
|
347904297e | ||
|
|
404aeb026d | ||
|
|
29df51a4b0 | ||
|
|
397cde2be2 | ||
|
|
a848283d59 | ||
|
|
80b4582e81 | ||
|
|
9d5c7d3317 | ||
|
|
b860741ab8 | ||
|
|
792825bdaa | ||
|
|
ad2371dc9a | ||
|
|
dfb771a51e | ||
|
|
14a0dbbd5c | ||
|
|
bb1c63cc92 | ||
|
|
38ca26e6f3 | ||
|
|
285d5688f5 | ||
|
|
26cdfc2279 | ||
|
|
d915dfc941 | ||
|
|
d29bd65f97 | ||
|
|
81d378498e | ||
|
|
d32630c759 | ||
|
|
b8d7ec0723 | ||
|
|
207c5430c1 | ||
|
|
b922274b61 | ||
|
|
863c0e5eb7 | ||
|
|
46f9956791 | ||
|
|
879a6f2552 | ||
|
|
5e3d237c99 | ||
|
|
1eb83e4eb0 | ||
|
|
194c0e6708 | ||
|
|
a87d38c61f | ||
|
|
ed0e5bbf9b | ||
|
|
2249b623e6 | ||
|
|
854ca5f5d4 | ||
|
|
a0a8029c36 | ||
|
|
e7eec8e4f1 | ||
|
|
a354c1984b | ||
|
|
34799c397c | ||
|
|
2c88dddc1e | ||
|
|
64b0216ba9 | ||
|
|
f950520475 | ||
|
|
60f3de2a91 | ||
|
|
06e13483bd | ||
|
|
f00cbe89bc | ||
|
|
e450f5744b | ||
|
|
255242eca5 | ||
|
|
cbeab4dd55 | ||
|
|
6b8506c986 | ||
|
|
d5d5647b7c | ||
|
|
1a76de1ca3 | ||
|
|
1913109623 | ||
|
|
e76b4395a7 | ||
|
|
6670156397 | ||
|
|
37b7a77b70 | ||
|
|
ddb5a007a5 | ||
|
|
8568df4552 | ||
|
|
493a5f715c | ||
|
|
a61b27992e | ||
|
|
798eec7aa8 | ||
|
|
0d29603e2b | ||
|
|
48882220d6 | ||
|
|
b4ad292ec5 | ||
|
|
b59a14f6b7 | ||
|
|
80ed385a41 | ||
|
|
04cd67b98b | ||
|
|
68eded2c0c | ||
|
|
cc831e16d8 | ||
|
|
b8dc46ad01 | ||
|
|
d8ab19087d | ||
|
|
389a0d3afa | ||
|
|
ec8a79eedd | ||
|
|
5a3e4a28fe | ||
|
|
66b5629a31 | ||
|
|
eae77eb236 | ||
|
|
f1e2a8e9d8 | ||
|
|
4042a5fe5d | ||
|
|
5f44ec8a0d | ||
|
|
9d8c62de6b | ||
|
|
3229fd8d28 | ||
|
|
fdee789637 | ||
|
|
a4752751ed | ||
|
|
c762dda1b1 | ||
|
|
e23ecf46d1 | ||
|
|
70a8c597a6 | ||
|
|
fa639bdb53 | ||
|
|
233bdd5b1d | ||
|
|
a0ab6d35c7 | ||
|
|
bd29680ce7 | ||
|
|
c5c8b902c4 | ||
|
|
ee255a5042 | ||
|
|
3952965632 | ||
|
|
85db706bbe | ||
|
|
ea570442c6 | ||
|
|
9c109b803d | ||
|
|
86f77f8064 | ||
|
|
7139e92554 | ||
|
|
81c33d65e4 | ||
|
|
897df53466 | ||
|
|
58281711f6 | ||
|
|
a1cf822141 | ||
|
|
ce48a9697a | ||
|
|
9b22c4b23c | ||
|
|
6283b0460a | ||
|
|
b524383aa3 | ||
|
|
75a16e3588 | ||
|
|
1453032ad6 | ||
|
|
824ab4afad | ||
|
|
73dd41c67f | ||
|
|
59ee77355d | ||
|
|
5c758773ad | ||
|
|
4fe977fa47 | ||
|
|
f188e55692 | ||
|
|
f5487ed932 | ||
|
|
c69b25ff0d | ||
|
|
b608af640f | ||
|
|
315f1ff3bc | ||
|
|
b6c2ac194b | ||
|
|
00570d2089 | ||
|
|
56375b16fe |
14
.github/dependabot.yml
vendored
Normal file
14
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/builder"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/builder/osx"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
2
.github/workflows/black.yml
vendored
2
.github/workflows/black.yml
vendored
@@ -17,6 +17,6 @@ jobs:
|
||||
builder
|
||||
tests
|
||||
--line-length=120
|
||||
--target-version=py36
|
||||
--target-version=py37
|
||||
--check
|
||||
--diff
|
||||
|
||||
68
.github/workflows/build_release.yml
vendored
68
.github/workflows/build_release.yml
vendored
@@ -2,19 +2,21 @@ name: Build binaries and source distribution
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
|
||||
jobs:
|
||||
build_windows:
|
||||
name: Build Windows binary
|
||||
runs-on: windows-latest
|
||||
env:
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python 3.9 (64bit)
|
||||
- name: Set up Python 3.10 (64bit)
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.9
|
||||
architecture: x64
|
||||
python-version: "3.10"
|
||||
architecture: "x64"
|
||||
- name: Install Python dependencies (64bit)
|
||||
run: |
|
||||
python --version
|
||||
@@ -43,8 +45,8 @@ jobs:
|
||||
- name: Set up Python 3.8 (32bit and legacy)
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8
|
||||
architecture: x86
|
||||
python-version: "3.8"
|
||||
architecture: "x86"
|
||||
- name: Install Python dependencies (32bit and legacy)
|
||||
run: |
|
||||
python --version
|
||||
@@ -64,17 +66,19 @@ jobs:
|
||||
|
||||
build_macos:
|
||||
name: Build macOS binary
|
||||
runs-on: macos-latest
|
||||
runs-on: macos-11
|
||||
timeout-minutes: 15
|
||||
env:
|
||||
SIGNING_AUTH: ${{ secrets.SIGNING_AUTH }}
|
||||
NOTARIZATION_USER: ${{ secrets.NOTARIZATION_USER }}
|
||||
NOTARIZATION_PASS: ${{ secrets.NOTARIZATION_PASS }}
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
# 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.9.7
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.9
|
||||
PYTHON_VERSION: "3.10.2"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.9"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch arm64 -arch x86_64
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Cache Python download
|
||||
@@ -85,15 +89,31 @@ jobs:
|
||||
key: macOS-Python-${{ env.PYTHON_VERSION }}
|
||||
- name: Get Python
|
||||
if: steps.cache-python-download.outputs.cache-hit != 'true'
|
||||
run: curl https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macosx10.9.pkg -o ~/python.pkg
|
||||
run: curl https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macos11.pkg -o ~/python.pkg
|
||||
- name: Install Python
|
||||
run: sudo installer -pkg ~/python.pkg -target /
|
||||
- name: Install Python dependencies
|
||||
# We have to manually install a few packages:
|
||||
# 1. cffi will pick up the single-arch libffi from Homebrew, while Apple provides universal2-version
|
||||
# of libffi with XCode. So we forcefully have to remove the Homebrew one.
|
||||
# 2. 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
|
||||
# 3. We need to build the PyInstaller bootloader from sources:
|
||||
# https://github.com/pyinstaller/pyinstaller/issues/6235
|
||||
run: |
|
||||
python3 --version
|
||||
pip3 install --upgrade pip wheel
|
||||
pip3 install --upgrade -r requirements.txt
|
||||
pip3 install --upgrade -r builder/requirements.txt
|
||||
|
||||
brew uninstall libffi --ignore-dependencies
|
||||
ARCHFLAGS="-arch x86_64 -arch arm64" pip3 install --upgrade cffi --no-binary cffi
|
||||
pip3 install --upgrade -r requirements.txt --no-binary sabyenc3
|
||||
|
||||
pip3 uninstall cryptography -y
|
||||
pip3 download -r builder/osx/requirements.txt --platform macosx_10_10_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
|
||||
- name: Import macOS codesign certificates
|
||||
uses: apple-actions/import-codesign-certs@v1
|
||||
if: env.SIGNING_AUTH
|
||||
@@ -111,4 +131,22 @@ jobs:
|
||||
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
|
||||
run: python3 builder/package.py release
|
||||
|
||||
release_snap:
|
||||
name: Release Snap
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
env:
|
||||
SNAP_TOKEN: ${{ secrets.SNAP_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Release latest available Snap
|
||||
run: |
|
||||
sudo snap install snapcraft --classic
|
||||
echo "${SNAP_TOKEN}" | snapcraft login --with -
|
||||
python3 snap/local/release_snap.py
|
||||
|
||||
13
.github/workflows/integration_testing.yml
vendored
13
.github/workflows/integration_testing.yml
vendored
@@ -6,17 +6,20 @@ jobs:
|
||||
test:
|
||||
name: Test ${{ matrix.name }} - Python ${{ matrix.python-version }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 15
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
||||
python-version: ["3.7", "3.8", "3.9", "3.10"]
|
||||
os: [ubuntu-20.04]
|
||||
include:
|
||||
# TODO: Update to 3.10 when all packages are available, currently lxml is missing
|
||||
- name: macOS
|
||||
os: macos-latest
|
||||
python-version: 3.9
|
||||
python-version: "3.10"
|
||||
- name: Windows
|
||||
os: windows-latest
|
||||
python-version: 3.9
|
||||
python-version: "3.10"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -26,11 +29,11 @@ jobs:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install system dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install unrar p7zip-full par2 chromium-chromedriver
|
||||
run: sudo apt-get install unrar p7zip-full par2
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
python --version
|
||||
pip install --upgrade pip
|
||||
pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r tests/requirements.txt
|
||||
- name: Test SABnzbd
|
||||
|
||||
7
.github/workflows/translations.yml
vendored
7
.github/workflows/translations.yml
vendored
@@ -8,27 +8,30 @@ on:
|
||||
jobs:
|
||||
translations:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TX_TOKEN: ${{ secrets.TX_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Generate translatable texts
|
||||
run: |
|
||||
python3 tools/extract_pot.py
|
||||
- name: Install Transifex client
|
||||
if: env.TX_TOKEN
|
||||
# Sudo is needed to link the "tx"-command
|
||||
run: |
|
||||
sudo -H python3 -m pip install setuptools wheel
|
||||
sudo -H python3 -m pip install transifex-client
|
||||
- name: Push/pull Transifex translations
|
||||
if: env.TX_TOKEN
|
||||
run: |
|
||||
tx push --source --parallel
|
||||
tx pull --all --force --parallel
|
||||
env:
|
||||
TX_TOKEN: ${{ secrets.TX_TOKEN }}
|
||||
- name: Compile translations to validate them
|
||||
run: |
|
||||
python3 tools/make_mo.py
|
||||
- name: Push translatable and translated texts back to repo
|
||||
uses: stefanzweifel/git-auto-commit-action@v4.5.1
|
||||
if: env.TX_TOKEN
|
||||
with:
|
||||
commit_message: Update translatable texts
|
||||
commit_user_name: SABnzbd Automation
|
||||
|
||||
@@ -21,4 +21,3 @@ minimum_perc = 0
|
||||
source_file = po/nsis/SABnsis.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2022 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
The SABnzbd-team is:
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2022 by "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
|
||||
@@ -52,7 +52,7 @@ Specific guides to install from source are available for Windows and macOS:
|
||||
https://sabnzbd.org/wiki/installation/install-macos
|
||||
https://sabnzbd.org/wiki/installation/install-from-source-windows
|
||||
|
||||
Only Python 3.6 and above is supported.
|
||||
Only Python 3.7 and above is supported.
|
||||
|
||||
On Linux systems you need to install:
|
||||
par2 unrar unzip python3-setuptools python3-pip
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2022 by "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
|
||||
|
||||
4
PKG-INFO
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 3.4.1
|
||||
Summary: SABnzbd-3.4.1
|
||||
Version: 3.5.3
|
||||
Summary: SABnzbd-3.5.3
|
||||
Home-page: https://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
@@ -18,7 +18,7 @@ If you want to know more you can head over to our website: https://sabnzbd.org.
|
||||
|
||||
SABnzbd has a few dependencies you'll need before you can get running. If you've previously run SABnzbd from one of the various Linux packages, then you likely already have all the needed dependencies. If not, here's what you're looking for:
|
||||
|
||||
- `python` (Python 3.6 and higher, often called `python3`)
|
||||
- `python` (Python 3.7 and above, often called `python3`)
|
||||
- Python modules listed in `requirements.txt`. Install with `python3 -m pip install -r requirements.txt -U`
|
||||
- `par2` (Multi-threaded par2 installation guide can be found [here](https://sabnzbd.org/wiki/installation/multicore-par2))
|
||||
- `unrar` (make sure you get the "official" non-free version of unrar)
|
||||
|
||||
69
README.mkd
69
README.mkd
@@ -1,32 +1,53 @@
|
||||
Release Notes - SABnzbd 3.4.1
|
||||
Release Notes - SABnzbd 3.5.3
|
||||
=========================================================
|
||||
|
||||
## Bugfixes since 3.4.0
|
||||
- macOS: Failed to run on M1 systems or older macOS versions.
|
||||
## Bugfix since 3.5.0
|
||||
- Prevent disk errors due to Direct Unpack being too aggressive.
|
||||
- URL's waiting to fetch get stuck indefinitely upon restart.
|
||||
|
||||
## Changes since 3.3.1
|
||||
- Extended `Deobfuscate final filenames` to attempt to set the correct
|
||||
file extension based on the file signature if the file extension is
|
||||
not present or meaningless.
|
||||
- Added additional pattern keys that can be used in the `Sort String`
|
||||
for Sorting, by using the `guessit` package internally for parsing.
|
||||
- If unpacked files contain `.par2` files they will always be read and
|
||||
used to rename any matching files.
|
||||
- Regular expressions can be used to specify `Unwanted extensions`.
|
||||
- Not all passwords will be tried if a matching one was found.
|
||||
- Some interface-only options were added as API-call.
|
||||
- The Plush skin has been removed.
|
||||
## Changes and bugfixes since 3.5.0
|
||||
- Prevent permissions errors on systems that do not support them.
|
||||
- Small changes in file assembly and Direct Unpack processing.
|
||||
- Changes to the transition from download to active post-processing.
|
||||
- Malformed NZB files could result in a crash.
|
||||
- Prevent crash in Direct Unpack for obfuscated posts.
|
||||
- RSS feeds with HTML-characters in the name resulted in crashes.
|
||||
- macOS: failed to start on older macOS versions.
|
||||
|
||||
## Bugfixes since 3.3.1
|
||||
- Duplicate check based on `.nzb` MD5 was performed before it was calculated.
|
||||
- Enforce `local_ranges` for broadcasts (Bonjour/SSDP).
|
||||
- Correctly parse the filename in `Content-Disposition` header.
|
||||
- `Warning` instead of `Info` when there is a restart due to crashed thread.
|
||||
- Only run Direct Unpack if `enable_unrar` is enabled.
|
||||
## Changes since 3.4.2
|
||||
- Removed Python 3.6 support.
|
||||
- SOCKS5 proxy support for all outgoing connections.
|
||||
- Restored support for UUencoded jobs.
|
||||
- `Required` server option: in case of connection failures, the queue
|
||||
will be paused for a few minutes instead of skipping the server.
|
||||
- Added Special option to preserve paused state after a restart.
|
||||
- Show an estimated time-left indicator for repair and unpacking.
|
||||
- Require TLS version 1.2 or higher for SSL news server connections.
|
||||
- Setting custom ciphers forces the maximum TLS version to 1.2.
|
||||
- Reduced memory usage during and after parsing `.nzb` files.
|
||||
- Handle multiple passwords stored in NZB-file.
|
||||
- macOS/Linux: `Permissions` are only applied if any are set.
|
||||
- macOS/Windows: updated to Python 3.10.2.
|
||||
- macOS: run native on M1 systems. However, included tools
|
||||
(`par2`, `unrar` and `7za`) still require Rosetta emulation.
|
||||
- Snap: updated to `core20` base and restore 7zip support.
|
||||
|
||||
## Bugfixes since 3.4.2
|
||||
- Global interface settings would not always be applied correctly.
|
||||
- Email notification setting was not shown correctly.
|
||||
- Improvements and fixes for `Defobfuscate final filenames`.
|
||||
- `Post-Process Only Verified Jobs` would not always work as intended.
|
||||
- Correctly detect too little disk space when unpacking 7zip's.
|
||||
- Improvements to handling of repair by MultiPar and par2cmdline.
|
||||
- HTML characters in configuration fields were shown incorrectly.
|
||||
- On Retry the number of downloaded bytes could exceed the total bytes.
|
||||
- `unrar` logging of Direct Unpack was not logged if it was aborted.
|
||||
- Windows: `portable.cmd` was not included in the release.
|
||||
- Windows: print low-level Windows error on `IOError`.
|
||||
|
||||
## 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
|
||||
- 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
|
||||
@@ -39,4 +60,4 @@ Release Notes - SABnzbd 3.4.1
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
|
||||
(c) Copyright 2007-2021 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
(c) Copyright 2007-2022 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
|
||||
82
SABnzbd.py
82
SABnzbd.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
import sys
|
||||
|
||||
if sys.hexversion < 0x03060000:
|
||||
print("Sorry, requires Python 3.6 or above")
|
||||
if sys.hexversion < 0x03070000:
|
||||
print("Sorry, requires Python 3.7 or above")
|
||||
print("You can read more at: https://sabnzbd.org/wiki/installation/install-off-modules")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -32,6 +32,7 @@ import signal
|
||||
import socket
|
||||
import platform
|
||||
import subprocess
|
||||
import multiprocessing
|
||||
import ssl
|
||||
import time
|
||||
import re
|
||||
@@ -46,6 +47,9 @@ try:
|
||||
import portend
|
||||
import cryptography
|
||||
import chardet
|
||||
import guessit
|
||||
import puremagic
|
||||
import socks
|
||||
except ImportError as e:
|
||||
print("Not all required Python modules are available, please check requirements.txt")
|
||||
print("Missing module:", e.name)
|
||||
@@ -87,12 +91,13 @@ from sabnzbd.misc import (
|
||||
is_localhost,
|
||||
is_lan_addr,
|
||||
ip_in_subnet,
|
||||
helpful_warning,
|
||||
set_https_verification,
|
||||
)
|
||||
from sabnzbd.filesystem import get_ext, real_path, long_path, globber_full, remove_file
|
||||
from sabnzbd.panic import panic_tmpl, panic_port, panic_host, panic, launch_a_browser
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg
|
||||
import sabnzbd.downloader
|
||||
import sabnzbd.notifier as notifier
|
||||
import sabnzbd.zconfig
|
||||
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6
|
||||
@@ -106,11 +111,10 @@ try:
|
||||
import win32event
|
||||
import win32service
|
||||
import win32ts
|
||||
import pywintypes
|
||||
import servicemanager
|
||||
from win32com.shell import shell, shellcon
|
||||
|
||||
from sabnzbd.utils.apireg import get_connection_info, set_connection_info, del_connection_info
|
||||
from sabnzbd.utils.apireg import get_connection_info, set_connection_info
|
||||
import sabnzbd.sabtray
|
||||
|
||||
win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True)
|
||||
@@ -129,16 +133,6 @@ def guard_loglevel():
|
||||
LOG_FLAG = True
|
||||
|
||||
|
||||
def warning_helpful(*args, **kwargs):
|
||||
"""Wrapper to ignore helpfull warnings if desired"""
|
||||
if sabnzbd.cfg.helpfull_warnings():
|
||||
return logging.warning(*args, **kwargs)
|
||||
return logging.info(*args, **kwargs)
|
||||
|
||||
|
||||
logging.warning_helpful = warning_helpful
|
||||
|
||||
|
||||
class GUIHandler(logging.Handler):
|
||||
"""Logging handler collects the last warnings/errors/exceptions
|
||||
to be displayed in the web-gui
|
||||
@@ -246,7 +240,7 @@ def print_version():
|
||||
"""
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
Copyright (C) 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
|
||||
SABnzbd comes with ABSOLUTELY NO WARRANTY.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions. It is licensed under the
|
||||
@@ -331,7 +325,7 @@ def identify_web_template(key, defweb, wdir):
|
||||
full_main = real_path(full_dir, DEF_MAIN_TMPL)
|
||||
|
||||
if not os.path.exists(full_main):
|
||||
logging.warning_helpful(T("Cannot find web template: %s, trying standard template"), full_main)
|
||||
helpful_warning(T("Cannot find web template: %s, trying standard template"), full_main)
|
||||
full_dir = real_path(sabnzbd.DIR_INTERFACES, DEF_STDINTF)
|
||||
full_main = real_path(full_dir, DEF_MAIN_TMPL)
|
||||
if not os.path.exists(full_main):
|
||||
@@ -463,9 +457,7 @@ def print_modules():
|
||||
if sabnzbd.newsunpack.RAR_PROBLEM:
|
||||
have_str = "%.2f" % (float(sabnzbd.newsunpack.RAR_VERSION) / 100)
|
||||
want_str = "%.2f" % (float(sabnzbd.constants.REC_RAR_VERSION) / 100)
|
||||
logging.warning_helpful(
|
||||
T("Your UNRAR version is %s, we recommend version %s or higher.<br />"), have_str, want_str
|
||||
)
|
||||
helpful_warning(T("Your UNRAR version is %s, we recommend version %s or higher.<br />"), have_str, want_str)
|
||||
elif not (sabnzbd.WIN32 or sabnzbd.DARWIN):
|
||||
logging.info("UNRAR binary version %.2f", (float(sabnzbd.newsunpack.RAR_VERSION) / 100))
|
||||
else:
|
||||
@@ -474,8 +466,10 @@ def print_modules():
|
||||
sabnzbd.NO_DOWNLOADING = True
|
||||
|
||||
# If available, we prefer 7zip over unzip
|
||||
if sabnzbd.newsunpack.SEVEN_COMMAND:
|
||||
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVEN_COMMAND)
|
||||
if sabnzbd.newsunpack.SEVENZIP_COMMAND:
|
||||
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVENZIP_COMMAND)
|
||||
if not (sabnzbd.WIN32 or sabnzbd.DARWIN):
|
||||
logging.info("7za binary version %s", sabnzbd.newsunpack.SEVENZIP_VERSION)
|
||||
else:
|
||||
logging.info(T("7za binary... NOT found!"))
|
||||
|
||||
@@ -635,7 +629,7 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
logging.info("IPV6 has priority on this system, potential Firefox issue")
|
||||
|
||||
if ipv6 and ipv4 and cherryhost == "" and sabnzbd.WIN32:
|
||||
logging.warning_helpful(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
|
||||
helpful_warning(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
|
||||
|
||||
if cherryhost == "localhost" and not sabnzbd.WIN32 and not sabnzbd.DARWIN:
|
||||
# On the Ubuntu family, localhost leads to problems for CherryPy
|
||||
@@ -688,9 +682,9 @@ def is_sabnzbd_running(url):
|
||||
try:
|
||||
url = "%s&mode=version" % url
|
||||
# Do this without certificate verification, few installations will have that
|
||||
prev = sabnzbd.set_https_verification(False)
|
||||
prev = set_https_verification(False)
|
||||
ver = get_from_url(url)
|
||||
sabnzbd.set_https_verification(prev)
|
||||
set_https_verification(prev)
|
||||
return ver and (re.search(r"\d+\.\d+\.", ver) or ver.strip() == sabnzbd.__version__)
|
||||
except:
|
||||
return False
|
||||
@@ -718,10 +712,10 @@ def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
|
||||
if is_sabnzbd_running(url):
|
||||
# Upload any specified nzb files to the running instance
|
||||
if upload_nzbs:
|
||||
prev = sabnzbd.set_https_verification(False)
|
||||
prev = set_https_verification(False)
|
||||
for f in upload_nzbs:
|
||||
upload_file_to_sabnzbd(url, f)
|
||||
sabnzbd.set_https_verification(prev)
|
||||
set_https_verification(prev)
|
||||
else:
|
||||
# Launch the web browser and quit since sabnzbd is already running
|
||||
# Trim away everything after the final slash in the URL
|
||||
@@ -993,12 +987,6 @@ def main():
|
||||
logger.setLevel(logging.WARNING)
|
||||
logger.addHandler(gui_log)
|
||||
|
||||
# Detect CPU architecture and Windows variant
|
||||
# Use .machine as .processor is not always filled
|
||||
cpu_architecture = platform.uname().machine
|
||||
if sabnzbd.WIN32:
|
||||
sabnzbd.WIN64 = cpu_architecture == "AMD64"
|
||||
|
||||
if inifile:
|
||||
# INI file given, simplest case
|
||||
inifile = evaluate_inipath(inifile)
|
||||
@@ -1192,7 +1180,7 @@ def main():
|
||||
logging.info("Arguments = %s", sabnzbd.CMDLINE)
|
||||
logging.info("Python-version = %s", sys.version)
|
||||
logging.info("Dockerized = %s", sabnzbd.DOCKER)
|
||||
logging.info("CPU architecture = %s", cpu_architecture)
|
||||
logging.info("CPU architecture = %s", platform.uname().machine)
|
||||
|
||||
try:
|
||||
logging.info("Platform = %s - %s", os.name, platform.platform())
|
||||
@@ -1205,13 +1193,20 @@ def main():
|
||||
|
||||
# On Linux/FreeBSD/Unix "UTF-8" is strongly, strongly adviced:
|
||||
if not sabnzbd.WIN32 and not sabnzbd.DARWIN and not ("utf-8" in sabnzbd.encoding.CODEPAGE.lower()):
|
||||
logging.warning_helpful(
|
||||
helpful_warning(
|
||||
T(
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
|
||||
),
|
||||
sabnzbd.encoding.CODEPAGE,
|
||||
)
|
||||
|
||||
# Verify umask, we need at least 700
|
||||
if not sabnzbd.WIN32 and sabnzbd.ORG_UMASK > int("077", 8):
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T("Current umask (%o) might deny SABnzbd access to the files and folders it creates."),
|
||||
sabnzbd.ORG_UMASK,
|
||||
)
|
||||
|
||||
# SSL Information
|
||||
logging.info("SSL version = %s", ssl.OPENSSL_VERSION)
|
||||
|
||||
@@ -1439,12 +1434,11 @@ def main():
|
||||
try:
|
||||
cherrypy.engine.start()
|
||||
except:
|
||||
# Since the webserver is started by cherrypy in a separate thread, we can't really catch any
|
||||
# start-up errors. This try/except only catches very few errors, the rest is only shown in the console.
|
||||
logging.error(T("Failed to start web-interface: "), exc_info=True)
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
|
||||
# Wait for server to become ready
|
||||
cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED)
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
if enable_https:
|
||||
mode = "s"
|
||||
@@ -1468,6 +1462,9 @@ def main():
|
||||
if sabnzbd.NO_DOWNLOADING:
|
||||
return
|
||||
|
||||
# Apply proxy, if configured, before main requests are made
|
||||
sabnzbd.misc.set_socks5_proxy()
|
||||
|
||||
# Start all SABnzbd tasks
|
||||
logging.info("Starting %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
try:
|
||||
@@ -1479,7 +1476,7 @@ def main():
|
||||
# Upload any nzb/zip/rar/nzb.gz/nzb.bz2 files from file association
|
||||
if upload_nzbs:
|
||||
for upload_nzb in upload_nzbs:
|
||||
sabnzbd.add_nzbfile(upload_nzb)
|
||||
sabnzbd.nzbparser.add_nzbfile(upload_nzb)
|
||||
|
||||
# Set URL for browser
|
||||
if enable_https:
|
||||
@@ -1560,7 +1557,7 @@ def main():
|
||||
# 30 sec polling tasks
|
||||
if not timer % 10:
|
||||
# Keep OS awake (if needed)
|
||||
sabnzbd.keep_awake()
|
||||
sabnzbd.misc.keep_awake()
|
||||
# Restart scheduler (if needed)
|
||||
sabnzbd.Scheduler.restart(plan_restart=False)
|
||||
# Save config (if needed)
|
||||
@@ -1739,6 +1736,9 @@ def handle_windows_service():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Require for freezing
|
||||
multiprocessing.freeze_support()
|
||||
|
||||
# We can only register these in the main thread
|
||||
signal.signal(signal.SIGINT, sabnzbd.sig_handler)
|
||||
signal.signal(signal.SIGTERM, sabnzbd.sig_handler)
|
||||
|
||||
@@ -41,6 +41,7 @@ RELEASE_VERSION = pkginfo.Develop(".").version
|
||||
# Add hidden imports
|
||||
extra_hiddenimports = ["Cheetah.DummyTransaction", "cheroot.ssl.builtin", "certifi"]
|
||||
extra_hiddenimports.extend(collect_submodules("babelfish.converters"))
|
||||
extra_hiddenimports.extend(collect_submodules("guessit.data"))
|
||||
|
||||
# Add platform specific stuff
|
||||
if sys.platform == "darwin":
|
||||
@@ -66,6 +67,7 @@ else:
|
||||
# Windows
|
||||
extra_hiddenimports.append("win32timezone")
|
||||
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)
|
||||
@@ -135,6 +137,7 @@ exe = EXE(
|
||||
append_pkg=False,
|
||||
icon="icons/sabnzbd.ico",
|
||||
version=version_info,
|
||||
target_arch="universal2",
|
||||
)
|
||||
|
||||
coll = COLLECT(exe, pyi_analysis.binaries, pyi_analysis.zipfiles, pyi_analysis.datas, name="SABnzbd")
|
||||
|
||||
3
builder/osx/requirements.txt
Normal file
3
builder/osx/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==36.0.1
|
||||
@@ -20,13 +20,16 @@ import platform
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import tempfile
|
||||
import time
|
||||
import shutil
|
||||
import subprocess
|
||||
import tarfile
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
import configobj
|
||||
import pkginfo
|
||||
import github
|
||||
from distutils.dir_util import copy_tree
|
||||
|
||||
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
@@ -115,6 +118,62 @@ def patch_version_file(release_name):
|
||||
ver.write(version_file)
|
||||
|
||||
|
||||
def test_sab_binary(binary_path: str):
|
||||
"""Wrapper to have a simple start-up test for the binary"""
|
||||
with tempfile.TemporaryDirectory() as config_dir:
|
||||
sabnzbd_process = subprocess.Popen(
|
||||
[binary_path, "--browser", "0", "--logging", "2", "--config", config_dir],
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
)
|
||||
|
||||
# Wait for SAB to respond
|
||||
base_url = "http://127.0.0.1:8080/"
|
||||
for _ in range(10):
|
||||
try:
|
||||
urllib.request.urlopen(base_url, timeout=1).read()
|
||||
break
|
||||
except urllib.error.URLError:
|
||||
time.sleep(1)
|
||||
else:
|
||||
raise urllib.error.URLError("Could not connect to SABnzbd")
|
||||
|
||||
# Open a number of API calls and pages, to see if we are really up
|
||||
pages_to_test = [
|
||||
"",
|
||||
"wizard",
|
||||
"config",
|
||||
"config/server",
|
||||
"config/categories",
|
||||
"config/scheduling",
|
||||
"config/rss",
|
||||
"config/general",
|
||||
"config/folders",
|
||||
"config/switches",
|
||||
"config/sorting",
|
||||
"config/notify",
|
||||
"config/special",
|
||||
"api?mode=version",
|
||||
]
|
||||
for url in pages_to_test:
|
||||
print("Testing: %s%s" % (base_url, url))
|
||||
if b"500 Internal Server Error" in urllib.request.urlopen(base_url + url, timeout=1).read():
|
||||
raise RuntimeError("Crash in %s" % url)
|
||||
|
||||
# Parse API-key so we can do a graceful shutdown
|
||||
sab_config = configobj.ConfigObj(os.path.join(config_dir, "sabnzbd.ini"))
|
||||
urllib.request.urlopen(base_url + "shutdown/?apikey=" + sab_config["misc"]["api_key"], timeout=10)
|
||||
sabnzbd_process.wait()
|
||||
|
||||
# Print logs for verification
|
||||
with open(os.path.join(config_dir, "logs", "sabnzbd.log"), "r") as log_file:
|
||||
print(log_file.read())
|
||||
|
||||
# So we have time to print the file before the directory is removed
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Was any option supplied?
|
||||
if len(sys.argv) < 2:
|
||||
@@ -147,6 +206,7 @@ if __name__ == "__main__":
|
||||
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
|
||||
@@ -185,8 +245,7 @@ if __name__ == "__main__":
|
||||
# Run PyInstaller and check output
|
||||
run_external_command([sys.executable, "-O", "-m", "PyInstaller", "SABnzbd.spec"])
|
||||
|
||||
# Use special distutils function to merge the main and console directories
|
||||
copy_tree("dist/SABnzbd-console", "dist/SABnzbd")
|
||||
shutil.copytree("dist/SABnzbd-console", "dist/SABnzbd", dirs_exist_ok=True)
|
||||
safe_remove("dist/SABnzbd-console")
|
||||
|
||||
# Remove unwanted DLL's
|
||||
@@ -227,11 +286,14 @@ if __name__ == "__main__":
|
||||
)
|
||||
|
||||
# Rename the folder
|
||||
os.rename("dist/SABnzbd", RELEASE_NAME)
|
||||
shutil.copytree("dist/SABnzbd", RELEASE_NAME)
|
||||
|
||||
# Create the archive
|
||||
run_external_command(["win/7zip/7za.exe", "a", RELEASE_BINARY, RELEASE_NAME])
|
||||
|
||||
# Test the release, as the very last step to not mess with any release code
|
||||
test_sab_binary("dist/SABnzbd/SABnzbd.exe")
|
||||
|
||||
if "app" in sys.argv:
|
||||
# Must be run on macOS
|
||||
if sys.platform != "darwin":
|
||||
@@ -245,6 +307,15 @@ if __name__ == "__main__":
|
||||
# Run PyInstaller and check output
|
||||
run_external_command([sys.executable, "-O", "-m", "PyInstaller", "SABnzbd.spec"])
|
||||
|
||||
# Make sure we created a fully universal2 release when releasing or during CI
|
||||
if RELEASE_THIS or ON_GITHUB_ACTIONS:
|
||||
for bin_to_check in glob.glob("dist/SABnzbd.app/Contents/MacOS/**/*.so", recursive=True):
|
||||
print("Checking if binary is universal2: %s" % bin_to_check)
|
||||
file_output = run_external_command(["file", bin_to_check])
|
||||
# Make sure we have both arm64 and x86
|
||||
if not ("x86_64" in file_output and "arm64" in file_output):
|
||||
raise RuntimeError("Non-universal2 binary found!")
|
||||
|
||||
# Only continue if we can sign
|
||||
if authority:
|
||||
files_to_sign = [
|
||||
@@ -288,50 +359,24 @@ if __name__ == "__main__":
|
||||
|
||||
# Upload to Apple
|
||||
print("Sending zip to Apple notarization service")
|
||||
upload_process = run_external_command(
|
||||
upload_result = run_external_command(
|
||||
[
|
||||
"xcrun",
|
||||
"altool",
|
||||
"--notarize-app",
|
||||
"-t",
|
||||
"osx",
|
||||
"-f",
|
||||
"notarytool",
|
||||
"submit",
|
||||
notarization_zip,
|
||||
"--primary-bundle-id",
|
||||
"org.sabnzbd.sabnzbd",
|
||||
"-u",
|
||||
"--apple-id",
|
||||
notarization_user,
|
||||
"-p",
|
||||
"--team-id",
|
||||
authority,
|
||||
"--password",
|
||||
notarization_pass,
|
||||
"--wait",
|
||||
],
|
||||
)
|
||||
|
||||
# Extract the notarization ID
|
||||
m = re.match(".*RequestUUID = (.*?)\n", upload_process, re.S)
|
||||
if not m:
|
||||
raise RuntimeError("No UUID created")
|
||||
uuid = m.group(1)
|
||||
|
||||
print("Checking notarization of UUID: %s (every 30 seconds)" % uuid)
|
||||
notarization_in_progress = True
|
||||
while notarization_in_progress:
|
||||
time.sleep(30)
|
||||
check_status = run_external_command(
|
||||
[
|
||||
"xcrun",
|
||||
"altool",
|
||||
"--notarization-info",
|
||||
uuid,
|
||||
"-u",
|
||||
notarization_user,
|
||||
"-p",
|
||||
notarization_pass,
|
||||
],
|
||||
)
|
||||
notarization_in_progress = "Status: in progress" in check_status
|
||||
|
||||
# Check if success
|
||||
if "Status: success" not in check_status:
|
||||
if "status: accepted" not in upload_result.lower():
|
||||
raise RuntimeError("Failed to notarize..")
|
||||
|
||||
# Staple the notarization!
|
||||
@@ -344,6 +389,9 @@ if __name__ == "__main__":
|
||||
else:
|
||||
print("Signing skipped, missing SIGNING_AUTH.")
|
||||
|
||||
# Test the release, as the very last step to not mess with any release code
|
||||
test_sab_binary("dist/SABnzbd.app/Contents/MacOS/SABnzbd")
|
||||
|
||||
if "source" in sys.argv:
|
||||
# Prepare Source distribution package.
|
||||
# We assume the sources are freshly cloned from the repo
|
||||
@@ -361,7 +409,7 @@ if __name__ == "__main__":
|
||||
|
||||
# Copy all folders and files to the new folder
|
||||
for source_folder in extra_folders:
|
||||
copy_tree(source_folder, os.path.join(src_folder, source_folder))
|
||||
shutil.copytree(source_folder, os.path.join(src_folder, source_folder), dirs_exist_ok=True)
|
||||
|
||||
# Copy all files
|
||||
for source_file in extra_files:
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
# Basic build requirements
|
||||
pyinstaller==4.2
|
||||
setuptools
|
||||
pkginfo
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
pyinstaller==4.8
|
||||
pyinstaller-hooks-contrib==2022.0
|
||||
altgraph==0.17.2
|
||||
wrapt==1.13.3
|
||||
setuptools==60.6.0
|
||||
pkginfo==1.8.2
|
||||
PyGithub==1.55
|
||||
charset-normalizer==2.0.11
|
||||
certifi
|
||||
pygithub
|
||||
|
||||
# For the OSX build specific
|
||||
dmgbuild; sys_platform == 'darwin'
|
||||
# For the macOS build
|
||||
dmgbuild==1.5.2; sys_platform == 'darwin'
|
||||
mac-alias==2.2.0; sys_platform == 'darwin'
|
||||
macholib==1.15.2; sys_platform == 'darwin'
|
||||
ds-store==1.3.0; sys_platform == 'darwin'
|
||||
PyNaCl==1.5.0; sys_platform == 'darwin'
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Config"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/configure"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/configure"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#from sabnzbd.encoding import CODEPAGE#-->
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2007-2021 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<h5 class="copyright">Copyright © 2007-2022 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Categories"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/categories"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/categories"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<div class="colmask">
|
||||
<div class="section">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Folders"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/folders"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/folders"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="General"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/general"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/general"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -179,6 +179,11 @@
|
||||
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#--> />
|
||||
<span class="desc">$T('explain-enable_https_verification')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="socks5_proxy_url">$T('opt-socks5_proxy_url')</label>
|
||||
<input type="text" name="socks5_proxy_url" id="socks5_proxy_url" value="$socks5_proxy_url" placeholder="socks5://username:password@hostname:port" />
|
||||
<span class="desc">$T('explain-socks5_proxy_url') <br/>$T('readwiki')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/notifications"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/notifications"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#def show_notify_checkboxes($section_label)#-->
|
||||
@@ -22,6 +22,7 @@
|
||||
<option value="$ct" <!--#if $ct in $getVar($section_label + '_cats') then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<p>$T('defaultNotifiesAll')</p>
|
||||
</div>
|
||||
<!--#end def#-->
|
||||
|
||||
@@ -40,6 +41,7 @@
|
||||
<option value="$ct" <!--#if $ct in $email_cats then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<p>$T('defaultNotifiesAll')</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col1">
|
||||
@@ -47,9 +49,9 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_endjob">$T('opt-email_endjob')</label>
|
||||
<select name="email_endjob" id="email_endjob">
|
||||
<option value="0" <!--#if int($email_endjob) == "0" then 'selected="selected"' else ""#--> >$T('email-never')</option>
|
||||
<option value="1" <!--#if int($email_endjob) == "1" then 'selected="selected"' else ""#--> >$T('email-always')</option>
|
||||
<option value="2" <!--#if int($email_endjob) == "2" then 'selected="selected"' else ""#--> >$T('email-errorOnly')</option>
|
||||
<option value="0" <!--#if int($email_endjob) == 0 then 'selected="selected"' else ""#--> >$T('email-never')</option>
|
||||
<option value="1" <!--#if int($email_endjob) == 1 then 'selected="selected"' else ""#--> >$T('email-always')</option>
|
||||
<option value="2" <!--#if int($email_endjob) == 2 then 'selected="selected"' else ""#--> >$T('email-errorOnly')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="RSS"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/rss"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/rss"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<!--#import html#-->
|
||||
<div class="colmask">
|
||||
@@ -53,7 +53,7 @@
|
||||
</td>
|
||||
<td class="title">
|
||||
<a href="?feed=$rss[$feed_item]['link']" class="subscription-title path feed <!--#if int($rss[$feed_item]['enable']) != 0 then 'feed_enabled' else 'feed_disabled'#-->">
|
||||
$feed_item
|
||||
$feed_item_html
|
||||
</a>
|
||||
</td>
|
||||
<td class="controls">
|
||||
@@ -102,7 +102,7 @@
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<!--#if $active_feed#-->
|
||||
<!--#set $feed = $active_feed#-->
|
||||
<!--#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>
|
||||
@@ -113,12 +113,12 @@
|
||||
<!--#if $error#-->
|
||||
<div class="alert alert-danger">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
<!--#echo html.escape($error)#-->
|
||||
$error
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<form action="upd_rss_feed" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<input type="hidden" name="uri" value="$rss[$feed]['uris']" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
@@ -210,7 +210,7 @@
|
||||
<form action="upd_rss_filter" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="index" value="$rss[$feed]['filtercount']" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<table class="catTable">
|
||||
<tbody>
|
||||
<tr>
|
||||
@@ -286,7 +286,7 @@
|
||||
<form action="upd_rss_filter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="index" value="$fnum" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<table class="catTable">
|
||||
<tbody>
|
||||
<tr class="<!--#if $odd then " alt " else " "#--> <!--#if $filter[3]!="A" and $filter[3]!="S" then 'disabled_options_rule' else ""#-->">
|
||||
@@ -302,8 +302,8 @@
|
||||
<option value="M" <!--#if $filter[3]=="M" then 'selected="selected"' else ""#-->> $T('rss-must')</option>
|
||||
<option value="R" <!--#if $filter[3]=="R" then 'selected="selected"' else ""#-->> $T('rss-reject')</option>
|
||||
<option value="C" <!--#if $filter[3]=="C" then 'selected="selected"' else ""#-->> $T('rss-mustcat')</option>
|
||||
<option value=">" <!--#if $filter[3]==">" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
|
||||
<option value="<" <!--#if $filter[3]=="<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
|
||||
<option value=">" <!--#if $filter[3]==">" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
|
||||
<option value="<" <!--#if $filter[3]=="<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
|
||||
<option value="F" <!--#if $filter[3]=="F" then 'selected="selected"' else ""#-->> $T('rss-from')</option>
|
||||
<option value="S" <!--#if $filter[3]=="S" then 'selected="selected"' else ""#-->> $T('rss-from-show') ($T('rss-accept'))</option>
|
||||
</select>
|
||||
@@ -363,13 +363,13 @@
|
||||
<!--#end for#-->
|
||||
<form action="download_rss_feed" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<div class="padding">
|
||||
<button type="button" class="btn btn-default testFeed" rel="$feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
<button type="button" class="btn btn-default testFeed" rel="$active_feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-forward"></span> $T('button-forceFeed')</button>
|
||||
<button type="button" class="btn btn-default cleanFeed"><span class="glyphicon glyphicon-trash"></span> $T('button-clear') $T('rss-done')</button>
|
||||
<!--#if $evalButton#-->
|
||||
<button type="button" class="btn btn-default evalFeed" rel="$feed"><span class="glyphicon glyphicon-ok-circle"></span> $T('button-evalFeed')</button>
|
||||
<button type="button" class="btn btn-default evalFeed" rel="$active_feed"><span class="glyphicon glyphicon-ok-circle"></span> $T('button-evalFeed')</button>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
</form>
|
||||
@@ -402,7 +402,7 @@
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="url" value="$job['url']" />
|
||||
<input type="hidden" name="nzbname" value="$job['nzbname']" />
|
||||
@@ -446,7 +446,7 @@
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="url" value="$job['url']" />
|
||||
<input type="hidden" name="nzbname" value="$job['nzbname']" />
|
||||
@@ -475,7 +475,7 @@
|
||||
<div class="tab-pane padTable" id="rss-tab-done">
|
||||
<!--#if $downloaded#-->
|
||||
<form action="clean_rss_jobs" method="post">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Scheduling"#-->
|
||||
<!--#set global $help_uri="configuration/3.4s/scheduling"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/scheduling"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<%
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Servers"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/servers"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/servers"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#import json#-->
|
||||
@@ -103,6 +103,11 @@
|
||||
<input type="checkbox" name="send_group" id="send_group" value="1" />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="required">$T('srv-required')</label>
|
||||
<input type="checkbox" name="required" id="required" value="1" />
|
||||
<span class="desc">$T('explain-required')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional" value="1" />
|
||||
@@ -225,6 +230,11 @@
|
||||
<span class="desc">$T('explain-ssl_ciphers') <br>$T('readwiki')
|
||||
<a href="${helpuri}advanced/ssl-ciphers" target="_blank">${helpuri}advanced/ssl-ciphers</a></span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="required$cur">$T('srv-required')</label>
|
||||
<input type="checkbox" name="required" id="required$cur" value="1" <!--#if int($server['required']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-required')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional$cur">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/sorting"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/sorting"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -11,12 +11,13 @@
|
||||
<h3>$T('seriesSorting') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="tv_categories" multiple="multiple" class="multiple_cats">
|
||||
<select name="tv_categories" multiple="multiple" class="multiple_cats" required="required">
|
||||
<!--#for $ct in $categories#-->
|
||||
<option value="$ct" <!--#if $ct in $tv_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>$T('selectOneCat')</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -223,12 +224,13 @@
|
||||
<h3>$T('movieSort') <a href="$helpuri$help_uri#toc6" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="movie_categories" multiple="multiple" class="multiple_cats">
|
||||
<select name="movie_categories" multiple="multiple" class="multiple_cats" required="required">
|
||||
<!--#for $ct in $categories#-->
|
||||
<option value="$ct" <!--#if $ct in $movie_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>$T('selectOneCat')</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -419,12 +421,13 @@
|
||||
<h3>$T('dateSorting') <a href="$helpuri$help_uri#toc9" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="date_categories" multiple="multiple" class="multiple_cats">
|
||||
<select name="date_categories" multiple="multiple" class="multiple_cats" required="required">
|
||||
<!--#for $ct in $categories#-->
|
||||
<option value="$ct" <!--#if $ct in $date_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>$T('selectOneCat')</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Special"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/special"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/special"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Switches"#-->
|
||||
<!--#set global $help_uri="configuration/3.4/switches"#-->
|
||||
<!--#set global $help_uri="configuration/3.5/switches"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -85,6 +85,11 @@
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active" id="options-status">
|
||||
<div class="row" data-bind="visible: statusInfo.active_socks5_proxy">
|
||||
<div class="col-sm-6">$T('opt-socks5_proxy_url')   </div>
|
||||
<div class="col-sm-6" data-bind="visible: hasStatusInfo, text: statusInfo.active_socks5_proxy"></div>
|
||||
<div class="col-sm-6 col-loading" data-bind="visible: !hasStatusInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">$T('dashboard-localIP4') </div>
|
||||
<div class="col-sm-6" data-bind="visible: hasStatusInfo, text: !statusInfo.localipv4() ? '$T('dashboard-connectionError')' : statusInfo.localipv4(), css: { 'options-bad-status' : !statusInfo.localipv4() }"></div>
|
||||
@@ -348,7 +353,6 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="options-switch"></div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-dateFormat')</label>
|
||||
<div class="col-sm-4">
|
||||
|
||||
@@ -55,6 +55,7 @@ function ViewModel() {
|
||||
self.statusInfo = {};
|
||||
self.statusInfo.folders = ko.observableArray([]);
|
||||
self.statusInfo.servers = ko.observableArray([]);
|
||||
self.statusInfo.active_socks5_proxy = ko.observable();
|
||||
self.statusInfo.localipv4 = ko.observable();
|
||||
self.statusInfo.publicipv4 = ko.observable();
|
||||
self.statusInfo.ipv6 = ko.observable();
|
||||
@@ -596,37 +597,6 @@ function ViewModel() {
|
||||
}
|
||||
})
|
||||
|
||||
// Save the rest in config if global-settings
|
||||
var saveInterfaceSettings = function(newValue) {
|
||||
if(self.useGlobalOptions()) {
|
||||
var interfaceSettings = {
|
||||
"dateFormat": self.dateFormat,
|
||||
"extraQueueColumns": self.extraQueueColumns,
|
||||
"extraHistoryColumns": self.extraHistoryColumns,
|
||||
"displayCompact": self.displayCompact,
|
||||
"displayFullWidth": self.displayFullWidth,
|
||||
"displayTabbed": self.displayTabbed,
|
||||
"confirmDeleteQueue": self.confirmDeleteQueue,
|
||||
"confirmDeleteHistory": self.confirmDeleteHistory
|
||||
};
|
||||
callAPI({
|
||||
mode: "set_config",
|
||||
section: "misc",
|
||||
keyword: "interface_settings",
|
||||
value: ko.toJSON(interfaceSettings)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
self.dateFormat.subscribe(saveInterfaceSettings);
|
||||
self.extraQueueColumns.subscribe(saveInterfaceSettings);
|
||||
self.extraHistoryColumns.subscribe(saveInterfaceSettings);
|
||||
self.displayCompact.subscribe(saveInterfaceSettings);
|
||||
self.displayFullWidth.subscribe(saveInterfaceSettings);
|
||||
self.displayTabbed.subscribe(saveInterfaceSettings);
|
||||
self.confirmDeleteQueue.subscribe(saveInterfaceSettings);
|
||||
self.confirmDeleteHistory.subscribe(saveInterfaceSettings);
|
||||
|
||||
/***
|
||||
Add NZB's
|
||||
***/
|
||||
@@ -773,6 +743,7 @@ function ViewModel() {
|
||||
self.statusInfo.completedirspeed(data.status.completedirspeed)
|
||||
self.statusInfo.internetbandwidth(data.status.internetbandwidth)
|
||||
self.statusInfo.dnslookup(data.status.dnslookup)
|
||||
self.statusInfo.active_socks5_proxy(data.status.active_socks5_proxy)
|
||||
self.statusInfo.localipv4(data.status.localipv4)
|
||||
self.statusInfo.publicipv4(data.status.publicipv4)
|
||||
self.statusInfo.ipv6(data.status.ipv6 || glitterTranslate.noneText)
|
||||
@@ -1079,6 +1050,26 @@ function ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
// Save the rest in config if global-settings
|
||||
var saveInterfaceSettings = function(newValue) {
|
||||
var interfaceSettings = {
|
||||
"dateFormat": self.dateFormat,
|
||||
"extraQueueColumns": self.extraQueueColumns,
|
||||
"extraHistoryColumns": self.extraHistoryColumns,
|
||||
"displayCompact": self.displayCompact,
|
||||
"displayFullWidth": self.displayFullWidth,
|
||||
"displayTabbed": self.displayTabbed,
|
||||
"confirmDeleteQueue": self.confirmDeleteQueue,
|
||||
"confirmDeleteHistory": self.confirmDeleteHistory
|
||||
};
|
||||
callAPI({
|
||||
mode: "set_config",
|
||||
section: "misc",
|
||||
keyword: "interface_settings",
|
||||
value: ko.toJSON(interfaceSettings)
|
||||
})
|
||||
}
|
||||
|
||||
// Get the speed-limit, refresh rate and server names
|
||||
callAPI({
|
||||
mode: 'get_config'
|
||||
@@ -1107,6 +1098,16 @@ function ViewModel() {
|
||||
self.confirmDeleteQueue(interfaceSettings['confirmDeleteQueue']);
|
||||
self.confirmDeleteHistory(interfaceSettings['confirmDeleteHistory']);
|
||||
}
|
||||
|
||||
// Only subscribe now to prevent collisions between localStorage and config settings updates
|
||||
self.dateFormat.subscribe(saveInterfaceSettings);
|
||||
self.extraQueueColumns.subscribe(saveInterfaceSettings);
|
||||
self.extraHistoryColumns.subscribe(saveInterfaceSettings);
|
||||
self.displayCompact.subscribe(saveInterfaceSettings);
|
||||
self.displayFullWidth.subscribe(saveInterfaceSettings);
|
||||
self.displayTabbed.subscribe(saveInterfaceSettings);
|
||||
self.confirmDeleteQueue.subscribe(saveInterfaceSettings);
|
||||
self.confirmDeleteHistory.subscribe(saveInterfaceSettings);
|
||||
}
|
||||
|
||||
// Set bandwidth limit
|
||||
@@ -1116,6 +1117,9 @@ function ViewModel() {
|
||||
// Save servers (for reporting functionality of OZnzb)
|
||||
self.servers = response.config.servers;
|
||||
|
||||
// Already set if we are using a proxy
|
||||
if(response.config.misc.socks5_proxy_url) self.statusInfo.active_socks5_proxy(true)
|
||||
|
||||
// Update message
|
||||
if(newRelease) {
|
||||
self.allMessages.push({
|
||||
|
||||
@@ -531,11 +531,10 @@ function QueueModel(parent, data) {
|
||||
return self.name()
|
||||
})
|
||||
self.missingText = ko.pureComputed(function() {
|
||||
// Check for missing data, the value is arbitrary! (1%)
|
||||
if(self.missingMB()/self.totalMB() > 0.01) {
|
||||
// Check for missing data, can show 0 if article-size is smaller than 500K, but we accept that
|
||||
if(self.missingMB()) {
|
||||
return self.missingMB().toFixed(0) + ' MB ' + glitterTranslate.misingArt
|
||||
}
|
||||
return;
|
||||
})
|
||||
self.statusText = ko.computed(function() {
|
||||
// Checking
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
@@ -86,6 +86,11 @@ msgstr ""
|
||||
msgid "SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Current umask (%o) might deny SABnzbd access to the files and folders it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -124,35 +129,6 @@ msgstr ""
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -309,6 +285,14 @@ msgstr ""
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr ""
|
||||
@@ -321,6 +305,19 @@ msgstr ""
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Permissions setting of %s might deny SABnzbd access to the files and folders it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -341,22 +338,6 @@ msgstr ""
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -387,10 +368,6 @@ msgstr ""
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -541,7 +518,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr ""
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -591,6 +568,21 @@ msgstr ""
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -800,11 +792,6 @@ msgstr ""
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr ""
|
||||
@@ -813,50 +800,24 @@ msgstr ""
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
@@ -884,12 +845,9 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
@@ -969,11 +927,11 @@ msgid "Disk full"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgid "Verifying"
|
||||
msgstr ""
|
||||
|
||||
#. PP status
|
||||
@@ -985,6 +943,10 @@ msgstr ""
|
||||
msgid "Trying SFV verification"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr ""
|
||||
@@ -1096,9 +1058,9 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
@@ -1111,6 +1073,11 @@ msgstr ""
|
||||
msgid "Error removing %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1127,7 +1094,7 @@ msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
@@ -1471,11 +1438,6 @@ msgstr ""
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1681,6 +1643,11 @@ msgstr ""
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
@@ -3454,6 +3421,14 @@ msgstr ""
|
||||
msgid "Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
@@ -3686,6 +3661,15 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr ""
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In case of connection failures, the download queue will be paused for a few minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -3862,6 +3846,10 @@ msgstr ""
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "If only the <em>Default</em> category is selected, notifications are enabled for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr ""
|
||||
@@ -4132,7 +4120,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4160,7 +4154,8 @@ msgstr ""
|
||||
msgid "Example"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4312,7 +4307,8 @@ msgstr ""
|
||||
msgid "No folders"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4424,10 +4420,6 @@ msgstr ""
|
||||
msgid "Selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr ""
|
||||
@@ -4813,6 +4805,10 @@ msgstr ""
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr ""
|
||||
|
||||
454
po/main/cs.po
454
po/main/cs.po
File diff suppressed because it is too large
Load Diff
233
po/main/da.po
233
po/main/da.po
@@ -1,15 +1,15 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -102,6 +102,13 @@ msgstr ""
|
||||
"SABnzbd blev startet med kodning %s, dette bør være UTF-8. Forvent problemer"
|
||||
" med Unicoded fil- og mappenavne i downloads."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -140,35 +147,6 @@ msgstr "Signal %s modtaget, gemmer og lukker..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Fatal fejl ved lagring af state"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Forsøger at hente NZB fra %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Gemmes %s mislykkedes"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan ikke oprette temp fil for %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøger at sætte status på ikke eksisterende server %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fejl i tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Downloadning af %s mislykkedes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -333,6 +311,14 @@ msgstr "nøgleord"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Kvote brugt, pause downloading"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fejl parameter"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC søgning \"%s\" er ikke tilladt her"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s er ikke en godkendt e-mail adresse"
|
||||
@@ -345,6 +331,21 @@ msgstr "Kræver serveradresse"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s er ikke et korrekt ciffer værdi"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -365,22 +366,6 @@ msgstr "Kan ikke oprette backup fil for %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Forkert kodet adgangskode%s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fejl parameter"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s er ikke et korrekt ciffer værdi"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC søgning \"%s\" er ikke tilladt her"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -411,10 +396,6 @@ msgstr "Forkert logning i historiken av %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Dekoder fejl: Ikke mere hukommelse"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -570,8 +551,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Ingen modtagere givet, ingen e-mail sendt"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Kan ikke læse %s"
|
||||
|
||||
@@ -631,6 +611,21 @@ msgstr "Det lykkedes ikke at flytte %s til %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fejl i tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Gemmes %s mislykkedes"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Downloadning af %s mislykkedes"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -857,11 +852,6 @@ msgstr "Fjernelse af %s mislykkedes!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Forsøger unrar med adgangskode \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Udpakning mislykkedes, arkivet kræver adgangskode"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Udpakker"
|
||||
@@ -870,51 +860,25 @@ msgstr "Udpakker"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Udpakning mislykkedes, kunne ikke finde %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "FEJL: lykkedes ikke at finde \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Udpakning mislykkedes, CRC-fejl"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "FEJL: CRC mislykkedes i \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr "Udpakningen fejlede, da filen er for stor til filsystemet (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "FEJL: Fil for stor til filsystem (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Udpakning mislykkedes, skrivefejl eller disken fuld?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "FEJL: skrivefejll (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Udpakningen mislykkedes, stien er for lang"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "FEJL: stien for lang (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "FEJL: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Udpakning mislykkedes, arkivet kræver adgangskode"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -941,13 +905,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Forsøger 7zip med adgangskode \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP sæt \"%s\" er ufuldstændig, kan ikke udpakke"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Kan ikke udpakke %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se logfil"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1030,14 +991,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Disk fuld"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Bekræfter"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Tjekker ekstra filer"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Bekræfter"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1047,6 +1008,10 @@ msgstr "Kontrollerer"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Forsøger SFV verifikation"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "tilbage"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Denne server tillader ikke SSL på denne port"
|
||||
@@ -1163,10 +1128,10 @@ msgstr "Notification scriptet \"%s\" findes ikke"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Det lykkedes ikke at sende Windows notification"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Det lykkedes ikke at importere %s filer fra %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan ikke oprette temp fil for %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1178,6 +1143,11 @@ msgstr "Det lykkedes ikke at tilføje %s, slette"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Fejl ved fjernelse af %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Det lykkedes ikke at importere %s filer fra %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1194,8 +1164,8 @@ msgstr "NZB tilføjet i køen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Ødelagt NZB fil %s, springer over (årsag=%s, linje=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "Ødelagt NZB fil %s, springer over (årsag=%s)"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1573,11 +1543,6 @@ msgstr "Mere"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Efterbehandling mislykkedes for %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se logfil"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1787,6 +1752,11 @@ msgstr "Ukendt handling: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Tidsplan for ikke-eksisterende server %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøger at sætte status på ikke eksisterende server %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3701,6 +3671,14 @@ msgstr ""
|
||||
"Kontroller certifikater, når du opretter forbindelse til indeksører og RSS-"
|
||||
"kilder ved hjælp HTTPS."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -3949,6 +3927,17 @@ msgstr "Streng"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 er højeste prioritet, 100 er den laveste prioritet"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4134,6 +4123,12 @@ msgstr "Hentet"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Læs alle Feeds nu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "E-mail påmindelse når job er fuldført"
|
||||
@@ -4416,7 +4411,13 @@ msgstr "Indekseringen kategorier/grupper"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sortering"
|
||||
|
||||
@@ -4444,7 +4445,8 @@ msgstr "Forudindstillinger"
|
||||
msgid "Example"
|
||||
msgstr "Eksempel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sortering"
|
||||
|
||||
@@ -4596,7 +4598,8 @@ msgstr "I mappe"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
@@ -4716,10 +4719,6 @@ msgstr "Emne"
|
||||
msgid "Selection"
|
||||
msgstr "Udvælgelse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "tilbage"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Ledig diskplads"
|
||||
@@ -5123,6 +5122,10 @@ msgstr "Fejl, Ubrugelig arkivfil"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "URL hentning mislykkedes; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Forsøger at hente NZB fra %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Værtsnavnet er ikke indstillet."
|
||||
|
||||
265
po/main/de.po
265
po/main/de.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -7,14 +7,17 @@
|
||||
# Nikolai Bohl <n.kay01@gmail.com>, 2020
|
||||
# reloxx13 <reloxx@interia.pl>, 2021
|
||||
# Ben Hecht <benjamin.hecht@me.com>, 2021
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
# Manuel C. Senn, 2021
|
||||
# Andreas Kames, 2021
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
# Simon W., 2021
|
||||
# Nils Briggen, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Manuel C. Senn, 2021\n"
|
||||
"Last-Translator: Nils Briggen, 2022\n"
|
||||
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -111,6 +114,15 @@ msgstr ""
|
||||
"sein. Es werden Probleme mit Unicode codierten Dateien und "
|
||||
"Ordnerbezeichnungen in Downloads erwartet."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
"Die aktuellen Zugriffseinstellungen (%o) könnte SABnzbd den Zugriff auf die "
|
||||
"erstellten Dateien und Ordner von SABnzbd verweigern."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -150,35 +162,6 @@ msgstr "Signal %s erkannt. Wird gespeichert und beendet …"
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Schwerer Fehler beim Speichern des Zustands"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "NZB-Datei wird versucht von %s abzurufen"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Fehler beim Speichern von %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Temporäre Datei für %s konnte nicht angelegt werden"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fehler in tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Fehler beim Laden von %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -346,6 +329,14 @@ msgstr "Schlüsselwörter"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Kontingent aufgebraucht, Downloads werden angehalten"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fehlerhafter Parameter"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s ist keine gültige E-Mail-Adresse"
|
||||
@@ -358,6 +349,25 @@ msgstr "Server-Adresse wird benötigt"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr "%s ist kein gültiges Script"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s ist kein gültiger Oktal-Wert"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
"Die aktuellen Zugriffseinstellungen (%s) könnte SABnzbd den Zugriff auf die "
|
||||
"erstellten Dateien und Ordner von SABnzbd verweigern."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
|
||||
"ist."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -379,24 +389,6 @@ msgstr "Kann keine Sicherungsdatei erstellen für %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Ungültig kodiertes Passwort %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fehlerhafter Parameter"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s ist kein gültiger Oktal-Wert"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
|
||||
"ist."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -429,10 +421,6 @@ msgstr "Ungültiges Stufen-Protokoll im Verlauf für %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Decoder Fehler: Nicht genügend Speicher"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode erkannt, aber nur yEnc encoding ist untertützt [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -538,7 +526,7 @@ msgstr "Wird beendet …"
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Server %s is expiring in %s day(s)"
|
||||
msgstr "Server %s läuft in %s tag(en) ab"
|
||||
msgstr "Server %s läuft in %s Tag(en) ab"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -591,8 +579,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Keine E-Mail gesendet da keine Empfänger angegeben"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "%s kann nicht gelesen werden"
|
||||
|
||||
@@ -654,6 +641,21 @@ msgstr "Verschieben von %s nach %s fehlgeschlagen"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr "Versuch das Verzeichnis %s zu erstellen wurde blockiert"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fehler in tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Fehler beim Speichern von %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Fehler beim Laden von %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Abgelehnte Verbindung von:"
|
||||
@@ -889,11 +891,6 @@ msgstr "Löschen von %s fehlgeschlagen!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Versuche entpacken mit Passwort \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Entpacken fehlgeschlagen. Archiv benötigt ein Passwort."
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Entpacken"
|
||||
@@ -902,53 +899,27 @@ msgstr "Entpacken"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Entpacken fehlgeschlagen. Konnte %s nicht finden."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "FEHLER: »%s« kann nicht gefunden werden."
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Entpacken fehlgeschlagen. CRC-Fehler"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "FEHLER: CRC in »%s« fehlgeschlagen."
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
"Entpacken fehlgeschlagen - Datei zu groß für Dateisystem (Formatierung FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "Fehler: Datei zu groß für Dateisystem (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr ""
|
||||
"Entpacken fehlgeschlagen. Fehler beim Schreiben oder volle Festplatte?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "FEHLER: Schreibfehler %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Entpacken fehlgeschlagen, Pfad ist zu lang"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "FEHLER: Pfad ist zu lang (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "FEHLER: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Entpacken fehlgeschlagen. Archiv benötigt ein Passwort."
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -975,13 +946,10 @@ msgstr "Keine 7za Binary gefunden, entpacken von \"%s\" nicht möglich"
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Versuche 7zip mit Passwort \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "Das 7zip-Set \"%s\" ist unvollständig, kann nicht entpackt werden"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Konnte nicht entpacken %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "Beachten Sie die Protokolldatei"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1066,14 +1034,14 @@ msgstr "Überprüfe Reparatur"
|
||||
msgid "Disk full"
|
||||
msgstr "Festplatte voll"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Überprüfen"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Überprüfe zusätzliche Dateien"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Überprüfen"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1083,6 +1051,10 @@ msgstr "Wird überprüft"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Versuche SFV-Überprüfung"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "rest"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Dieser Server erlaubt kein SSL auf diesem Port"
|
||||
@@ -1202,10 +1174,10 @@ msgstr "Benachrichtigungsskript \"%s\" existiert nicht"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Windows Benachrichtigung konnte nicht gesendet werden"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importieren von %s Dateien von %s fehlgeschlagen"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Temporäre Datei für %s konnte nicht angelegt werden"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1217,6 +1189,11 @@ msgstr "Fehler beim Hinzufügen von %s. Entferne."
|
||||
msgid "Error removing %s"
|
||||
msgstr "Fehler beim Entfernen von %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importieren von %s Dateien von %s fehlgeschlagen"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1233,8 +1210,8 @@ msgstr "NZB zur Warteschlange hinzugefügt"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Ungültige NZB-Datei %s wird übersprungen: %s auf Zeile %s"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "Ungültige NZB-Datei %s wird übersprungen: %s "
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1627,11 +1604,6 @@ msgstr "Mehr"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Nachbearbeitung von %s fehlgeschlagen (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "Beachten Sie die Protokolldatei"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr "Nachbearbeitung wurde abgebrochen"
|
||||
@@ -1688,7 +1660,7 @@ msgstr "RAR-Datei konnten nicht überprüft werden"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Trying RAR renamer"
|
||||
msgstr "Versuche RAR Umbenenner"
|
||||
msgstr "Versuche RAR-Umbenenner"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -1841,6 +1813,11 @@ msgstr "Unbekannte Aktion: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Regel für nicht existierenden Server %s."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3818,6 +3795,15 @@ msgstr ""
|
||||
"Überprüfe Zertifikate bei Verbindungen zu Indexern und RSS-Quellen über "
|
||||
"HTTPS."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr "SOCKS5 Proxy"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
"Benutze den angegebenen SOCKS5 Proxy für alle ausgehenden Verbindungen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -4077,6 +4063,19 @@ msgstr "Strikt"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 ist die höchste, 99 die niedrigste Priorität"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr "Benötigt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
"Im Fall von Verbindungsausfällen wird die Downloadwarteschlange für ein paar"
|
||||
" Minuten pausiert, statt diesen Server zu überspringen"
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4194,7 +4193,7 @@ msgstr "Bearbeiten"
|
||||
#. Config->RSS when will be the next RSS scan
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Next scan at"
|
||||
msgstr "Nächster scan um"
|
||||
msgstr "Nächster Scan um"
|
||||
|
||||
#. Config->RSS table column header
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4261,6 +4260,14 @@ msgstr "Heruntergeladen"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Jetzt alle Feeds lesen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
"Wenn nur die <em>Standart</em> Kategorie ausgewählt ist werden die "
|
||||
"Benachrichtigungen für Jobs in allen Kategorien aktiviert. "
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Email-Benachrichtigung beim Fertigstellen von Aufträgen"
|
||||
@@ -4547,7 +4554,13 @@ msgstr "Indexer Kategorien/Gruppen"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Wähle mindestens 1 Kategorie"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortieren von TV-Serien"
|
||||
|
||||
@@ -4575,7 +4588,8 @@ msgstr "Voreinstellungen"
|
||||
msgid "Example"
|
||||
msgstr "Beispiel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film Sortierung"
|
||||
|
||||
@@ -4727,7 +4741,8 @@ msgstr "In Ordnern"
|
||||
msgid "No folders"
|
||||
msgstr "Keine Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortieren nach Datum"
|
||||
|
||||
@@ -4766,15 +4781,15 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "GuessIt Property"
|
||||
msgstr ""
|
||||
msgstr "GuessIt Property"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "GuessIt.Property"
|
||||
msgstr ""
|
||||
msgstr "GuessIt.Property"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
msgstr "GuessIt_Property"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
@@ -4847,10 +4862,6 @@ msgstr "Betreff"
|
||||
msgid "Selection"
|
||||
msgstr "Auswahl"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "rest"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Freier Speicherplatz"
|
||||
@@ -4925,7 +4936,7 @@ msgstr "Weitere Warteschlangen Spalten"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra history columns"
|
||||
msgstr "Weitere Verlauf Spalten"
|
||||
msgstr "Weitere Verlaufspalten"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
@@ -5009,7 +5020,7 @@ msgstr "Skript-Protokoll anzeigen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Renaming the job will abort Direct Unpack."
|
||||
msgstr ""
|
||||
msgstr "Das Umbenennen des Jobs wird das direkte entpacken abbrechen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
@@ -5257,6 +5268,10 @@ msgstr "Ungültige NZB-Datei."
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Abrufen der URL fehlgeschlagen; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "NZB-Datei wird versucht von %s abzurufen"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Der Hostname wurde nicht angegeben"
|
||||
|
||||
234
po/main/es.po
234
po/main/es.po
@@ -1,17 +1,17 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Ester Molla Aragones <moarages@gmail.com>, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# 1024mb <angelb2203@gmail.com>, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: 1024mb <angelb2203@gmail.com>, 2020\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -108,6 +108,13 @@ msgstr ""
|
||||
"UTF-8. Habrá problemas con el archivo en Unicode y con los nombres de "
|
||||
"directorio en las descargas."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -148,35 +155,6 @@ msgstr "Señal %s capturado, guardando y saliendo..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Error grave al guardar estado"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Tratando de buscar NZB de %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Guardar de %s no se pudo completar."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "No se puede crear el archivo temporal para %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Intentando cambiar el estado de servidor inexistente %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fallo en tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Cargar de %s no se pudo completar."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -347,6 +325,14 @@ msgstr "palabras clave"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Quota gastado, pausando cola"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parámetro incorrecto"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s no es una dirección de correo electrónico válida."
|
||||
@@ -359,6 +345,21 @@ msgstr "Se necesita la dirección del servidor"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s no es un valor octal correcto"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Error: Cola no esta vacía, no se puede cambiar el directorio"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -379,22 +380,6 @@ msgstr "No se puede crear copia de seguridad del archivo %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Contraseña incorrectamente codificado %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parámetro incorrecto"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s no es un valor octal correcto"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Error: Cola no esta vacía, no se puede cambiar el directorio"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -428,10 +413,6 @@ msgstr "Registro de etapa invalido para transferencia terminada %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Fallo del decodificador: no hay memoria"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "Se ha detectado UUencode, solo se permite codificación yEnc [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -591,8 +572,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Sin destinatarios no se pudo enviar el email"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "No se puede leer %s"
|
||||
|
||||
@@ -652,6 +632,21 @@ msgstr "Error al mover %s a %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fallo en tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Guardar de %s no se pudo completar."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Cargar de %s no se pudo completar."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -886,11 +881,6 @@ msgstr "¡Error al eliminar %s!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Intentado descomprimir rar con contraseña \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Error al descomprimir; El archivo está protegido por contraseña"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Descomprimiendo"
|
||||
@@ -899,55 +889,28 @@ msgstr "Descomprimiendo"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Error al descomprimir; Imposible encontrar %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "ERROR: Imposible encontrar \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Error de CRC al descomprimir"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "ERROR: Ha fallado la comprobación CRC sobre \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
"La descompresión ha fallado, el archivo es demasiado grande para el sistema "
|
||||
"de archivos (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
"ERROR: el archivo es demasiado grande para el sistema de archivos (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr ""
|
||||
"Error al descomprimir; ¿Error de escritura, o tal vez el disco está lleno?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "ERROR: Error de escritura (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Aperture de archivo fallo, la via es muy larga"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "ERROR: via es muy larga (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "ERROR: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Error al descomprimir; El archivo está protegido por contraseña"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -974,13 +937,10 @@ msgstr "No se ha encontrado el binario 7za, no se puede descomprimir \"%s\""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Tratando 7zip con la contraseña \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP conjunto \"%s\" es incompleta, no puede desempaquetar"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "No se pudo descomprimir %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ver fichero de log"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1065,14 +1025,14 @@ msgstr "Reparación de verificación"
|
||||
msgid "Disk full"
|
||||
msgstr "Disco lleno"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Comprobando archivos extra"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1082,6 +1042,10 @@ msgstr "Verificando"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Intentando verificación por SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "Restante"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Este servidor no permite SSL en este puerto"
|
||||
@@ -1205,10 +1169,10 @@ msgstr "El script de notificación \"%s\" no existe"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Fallo al mandar la notificación de Windows"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Error al importar %s ficheros desde %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "No se puede crear el archivo temporal para %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1220,6 +1184,11 @@ msgstr "Error al añadir %s, eliminando"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Error al quitar %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Error al importar %s ficheros desde %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1237,8 +1206,8 @@ msgstr "NZB añadido a la cola"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Fichero NBZ inválido: %s, omitiendo (razón=%s, línea=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "Fichero NBZ inválido: %s, omitiendo (razón=%s)"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1627,11 +1596,6 @@ msgstr "Más"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Error al post-procesar %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ver fichero de log"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1845,6 +1809,11 @@ msgstr "Acción desconocida: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Planificación para servidor %s inexistente"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Intentando cambiar el estado de servidor inexistente %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3802,6 +3771,14 @@ msgstr ""
|
||||
"Verificar certificados al conectarse a indexadores y fuentes RSS usando "
|
||||
"HTTPS."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
@@ -4059,6 +4036,17 @@ msgstr "Estricto"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 El prioridad más alta, 99 es la prioridad más baja"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4245,6 +4233,12 @@ msgstr "Descargado"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Leer todas las fuentes ahora"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Notificación por email al terminar"
|
||||
@@ -4531,7 +4525,13 @@ msgstr "Categorías Indexer / Grupos"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenación de Series"
|
||||
|
||||
@@ -4559,7 +4559,8 @@ msgstr "Preajustes"
|
||||
msgid "Example"
|
||||
msgstr "Ejemplo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Clasificación de películas"
|
||||
|
||||
@@ -4711,7 +4712,8 @@ msgstr "En directorios"
|
||||
msgid "No folders"
|
||||
msgstr "Sin Directorios"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenar por fecha"
|
||||
|
||||
@@ -4831,10 +4833,6 @@ msgstr "Asunto"
|
||||
msgid "Selection"
|
||||
msgstr "Selección"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "Restante"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espacio libre"
|
||||
@@ -5244,6 +5242,10 @@ msgstr "Archivo NZB inusable"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Error al recuperar la URL; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Tratando de buscar NZB de %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "El hostname no está definido."
|
||||
|
||||
229
po/main/fi.po
229
po/main/fi.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -102,6 +102,13 @@ msgstr ""
|
||||
"Unicode-merkkejä tiedosto- ja kansionimissä sisältävät lataukset voivat "
|
||||
"aiheuttaa ongelmia."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -141,35 +148,6 @@ msgstr "Signaali %s kaapattu, tallennetaan ja lopetetaan..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Vakava virhe tallennettaessa tilaa"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Yritetään noutaa NZB osoitteesta %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Kohteen %s tallentaminen epäonnistui"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Väliaikaistiedostoa ei voida luoda kohteelle %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Virhe tiedostossa tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Kohteen %s lataaminen epäonnistui"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -330,6 +308,14 @@ msgstr "avainsanat"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Latausrajoitus saavutettu, keskeytetään lataukset"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Virheellinen parametri"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "TUNT polku \"%s\" ei ole sallittu"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s ei ole kelvollinen sähköpostiosoite"
|
||||
@@ -342,6 +328,21 @@ msgstr "Palvelimen osoite vaaditaan"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s ei ole oikea oktaalinen arvo"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -362,22 +363,6 @@ msgstr "Ei voitu luoda varmuuskopiotiedostoa kohteelle %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Virheellisesti koodattu salasana %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Virheellinen parametri"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s ei ole oikea oktaalinen arvo"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "TUNT polku \"%s\" ei ole sallittu"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -408,10 +393,6 @@ msgstr "Virheellinen tila lokihistoriassa kohteelle %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -566,8 +547,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Vastaanottajaa ei määritelty, sähköpostia ei lähetetty"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Ei voida lukea %s"
|
||||
|
||||
@@ -627,6 +607,21 @@ msgstr "Kohteen %s siirtäminen kohteeseen %s epäonnistui"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Virhe tiedostossa tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Kohteen %s tallentaminen epäonnistui"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Kohteen %s lataaminen epäonnistui"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -853,11 +848,6 @@ msgstr "Kohteen %s poisto epäonnistui!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Yritetään purkaa rar arkistoa salasanalla \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Purkaminen epäonnistui, arkisto vaatii salasanan"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Puretaan"
|
||||
@@ -866,51 +856,25 @@ msgstr "Puretaan"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Purkaminen epäonnistui, %s ei löydy"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "VIRHE: kohdetta \"%s\" ei löydy"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Purkaminen epäonnistui, CRC virhe"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "VIRHE: CRC epäonnistui kohteessa \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Purkaminen epäonnistui, kirjoitusvirhe tai levy täynnä?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "VIRHE: kirjoitusvirhe (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Purkaminen epäonnistui, polku on liian pitkä"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "VIRHE: polku liian pitkä (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "VIRHE: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Purkaminen epäonnistui, arkisto vaatii salasanan"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -937,13 +901,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Yritetään purkaa 7zip arkistoa salasanalla \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP setti \"%s\" on puutteellinen, ei voida purkaa"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Ei voitu purkaa %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "katso lokitiedosto"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1023,14 +984,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Levy täynnä"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Varmennetaan"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Varmennetaan"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1040,6 +1001,10 @@ msgstr "Tarkistetaan"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Yritetään SFV varmennusta"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "jäljellä"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Tämä palvelin ei salli SSL yhteyksiä tähän porttiin"
|
||||
@@ -1156,10 +1121,10 @@ msgstr "Ilmoitusskriptiä \"%s\" ei ole olemassa"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Windows-ilmoituksen lähetys epäonnistui"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Virhe tuotaessa %s tiedostoa kohteesta %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Väliaikaistiedostoa ei voida luoda kohteelle %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1171,6 +1136,11 @@ msgstr "Virhe lisättäessä %s, poistetaan"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Virhe poistettaessa %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Virhe tuotaessa %s tiedostoa kohteesta %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1187,8 +1157,8 @@ msgstr "NZB lisätty jonoon"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Virheellinen NZB tiedosto %s, ohitetaan (syy=%s, rivi=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1566,11 +1536,6 @@ msgstr "Lisää"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Jälkikäsittely epäonnistui kohteelle %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "katso lokitiedosto"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1778,6 +1743,11 @@ msgstr "Tuntematon toiminto: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Ajastettu tuntemattomalle palvelimelle %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3703,6 +3673,14 @@ msgstr ""
|
||||
"Varmenna sertifikaatit yhdistettäessä indeksoijiin ja RSS-lähteisiin HTTPS "
|
||||
"protokollan avulla."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Palvelin"
|
||||
@@ -3950,6 +3928,17 @@ msgstr "Tiukka"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 on suurin prioriteetti, 99 on pienin prioriteetti"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4134,6 +4123,12 @@ msgstr "Ladattu"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Lue kaikki syötteet nyt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Sähköposti-ilmoitus onnistuneesta latauksesta"
|
||||
@@ -4416,7 +4411,13 @@ msgstr "Indeksoijan kategoriat / ryhmä"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sarjojen lajittelu"
|
||||
|
||||
@@ -4444,7 +4445,8 @@ msgstr "Esiasetukset"
|
||||
msgid "Example"
|
||||
msgstr "Esimerkki"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4596,7 +4598,8 @@ msgstr "Kansioissa"
|
||||
msgid "No folders"
|
||||
msgstr "Ei kansioita"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Päivämäärän lajittelu"
|
||||
|
||||
@@ -4717,10 +4720,6 @@ msgstr "Otsikko"
|
||||
msgid "Selection"
|
||||
msgstr "Valinta"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "jäljellä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Vapaa tila"
|
||||
@@ -5127,6 +5126,10 @@ msgstr "NZB tiedostoa ei voida käyttää"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Osoitteen nouto epäonnistui; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Yritetään noutaa NZB osoitteesta %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Isäntänimeä ei ole asetettu."
|
||||
|
||||
246
po/main/fr.po
246
po/main/fr.po
@@ -1,16 +1,16 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Fred L <88com88@gmail.com>, 2021
|
||||
# Fred L <88com88@gmail.com>, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2021\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2022\n"
|
||||
"Language-Team: French (https://www.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -109,6 +109,15 @@ msgstr ""
|
||||
"Attendez-vous à des problèmes avec les noms de fichiers et de répertoires "
|
||||
"Unicode dans les téléchargements."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
"L'umask actuel (%o) pourrait refuser à SABnzbd l'accès aux fichiers et "
|
||||
"dossiers qu'il crée."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -149,35 +158,6 @@ msgstr "Signal %s intercepté, enregistrement et fermeture en cours..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Erreur fatale lors de l'enregistrement"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Essai de récupération du NZB depuis %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "L'enregistrement de %s a échoué"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Impossible de créer le fichier temporaire pour %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Test de l'état du serveur inexistant %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Échec dans tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Echec du chargement de %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -348,6 +328,14 @@ msgstr "mots-clés"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Quota atteint, téléchargement mis en pause"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Paramètre incorrect"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s n'est pas une adresse email valide"
|
||||
@@ -360,6 +348,24 @@ msgstr "Adresse du serveur requise"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr "%s n'est pas un script valide"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s n'est pas une valeur octale correcte"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
"Le réglage des permissions de %s pourrait refuser à SABnzbd l'accès aux "
|
||||
"fichiers et dossiers qu'il crée."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
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/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -380,23 +386,6 @@ msgstr "Impossible de créer le fichier de sauvegarde pour %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Encodage mot de passe incorrect %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Paramètre incorrect"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s n'est pas une valeur octale correcte"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
"Erreur : La file d'attente n'est pas vide, impossible de changer le dossier."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -429,10 +418,6 @@ msgstr "Étape de journalisation invalide dans l'historique pour %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Échec du décodeur : mémoire insuffisante"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode détecté, seul l'encodage yEnc est pris en charge [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -593,8 +578,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Aucun destinataire déterminé, aucun email envoyé"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Impossible de lire %s"
|
||||
|
||||
@@ -654,6 +638,21 @@ msgstr "Échec lors du déplacement de %s vers %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr "Tentative bloquée de création du répertoire %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Échec dans tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "L'enregistrement de %s a échoué"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Echec du chargement de %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connexion refusée de:"
|
||||
@@ -890,11 +889,6 @@ msgstr "Impossible de supprimer %s !"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Tentative d'extraction avec le mot de passe \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Échec de l'extraction, l'archive nécessite un mot de passe"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Extraction"
|
||||
@@ -903,55 +897,28 @@ msgstr "Extraction"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Échec de l'extraction, %s n'a pas été trouvé"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "ERREUR : impossible de trouver \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Échec de l'extraction, erreur CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "ERREUR : échec CRC pour \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
"La décompression a échoué, le fichier est trop volumineux pour le système de"
|
||||
" fichiers (FAT ?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
"ERREUR : le fichier est trop volumineux pour le système de fichiers (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr ""
|
||||
"Échec de l'extraction, erreur d'écriture ou espace disque insuffisant ?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "ERREUR : erreur d'écriture (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Extraction échoué, le chemin est trop long"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "ERREUR : chemin trop long (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "ERREUR : %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Échec de l'extraction, l'archive nécessite un mot de passe"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -978,14 +945,10 @@ msgstr "Aucun binaire 7za trouvé, impossible de décompresser \"%s\""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Tentative 7zip avec le mot de passe \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr ""
|
||||
"La collection 7ZIP \"%s\" est incomplète, impossible d'extraire les fichiers"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Impossible de décompresser %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "voir le journal"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1067,14 +1030,14 @@ msgstr "Vérification de la réparation"
|
||||
msgid "Disk full"
|
||||
msgstr "Disque plein"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Vérification en cours"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Vérification des fichiers supplémentaires"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Vérification en cours"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1084,6 +1047,10 @@ msgstr "Vérification"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Essai vérification SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "restant"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Ce serveur n'authorise pas de connexion SSL sur ce port"
|
||||
@@ -1203,10 +1170,10 @@ msgstr "Le script de notification \"%s\" est introuvable"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Echec d'envoi de la notification Windows"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Echec de l'importation des fichiers %s depuis %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Impossible de créer le fichier temporaire pour %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1218,6 +1185,11 @@ msgstr "Erreur lors de l'ajout de %s, suppression"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Erreur lors de la suppression de %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Echec de l'importation des fichiers %s depuis %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1234,8 +1206,8 @@ msgstr "NZB ajouté à la file d'attente"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Fichier NZB invalide %s, ignoré (raison=%s, ligne=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "Fichier NZB %s invalide, sera ignoré (erreur : %s)"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1625,11 +1597,6 @@ msgstr "Plus"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Échec du post-traitement pour %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "voir le journal"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr "Le post-traitement a été interrompu"
|
||||
@@ -1840,6 +1807,11 @@ msgstr "Action inconnue : %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Planification pour un serveur non existant %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Test de l'état du serveur inexistant %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3821,6 +3793,15 @@ msgstr ""
|
||||
"Vérifier les certificats lors de la connexion aux indexeurs et sources RSS "
|
||||
"utilisant HTTPS."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr "Proxy SOCKS5"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
"Utiliser le proxy SOCKS5 spécifié pour toutes les connexions sortantes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Serveur"
|
||||
@@ -4080,6 +4061,19 @@ msgstr "Strict"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 est la priorité la plus élevée, 99 est la priorité la plus faible"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr "Obligatoire"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
"En cas d'échecs de connexion, la file d'attente des téléchargements sera "
|
||||
"mise en pause pendant quelques minutes au lieu de passer au serveur suivant."
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4267,6 +4261,14 @@ msgstr "Téléchargé"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Lire tous les flux maintenant"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
"Si seule la catégorie <em>Défaut</em> est sélectionnée, les notifications "
|
||||
"seront activées pour les tâches de toutes les catégories."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Notification par email lorsque des téléchargements sont terminés"
|
||||
@@ -4555,7 +4557,13 @@ msgstr "Catégories de l'indexeur / Groupes"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Sélectionnez au moins une catégorie."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Tri des séries"
|
||||
|
||||
@@ -4583,7 +4591,8 @@ msgstr "Modèles prédéfinis"
|
||||
msgid "Example"
|
||||
msgstr "Exemple"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Tri des films"
|
||||
|
||||
@@ -4736,7 +4745,8 @@ msgstr "Dans les dossiers"
|
||||
msgid "No folders"
|
||||
msgstr "Pas de dossiers"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Tri par date"
|
||||
|
||||
@@ -4856,10 +4866,6 @@ msgstr "Sujet"
|
||||
msgid "Selection"
|
||||
msgstr "Sélection"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "restant"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espace libre"
|
||||
@@ -5271,6 +5277,10 @@ msgstr "Fichier NZB inutilisable"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Échec de récupération de l'URL ; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Essai de récupération du NZB depuis %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Le nom d'hôte n'est pas défini."
|
||||
|
||||
233
po/main/he.po
233
po/main/he.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -98,6 +98,13 @@ msgstr ""
|
||||
"SABnzbd הותחל עם קידוד %s, הוא אמור להיות UTF-8. צפה לבעיות עם שמות Unicoded"
|
||||
" של קבצים וסיפריות בהורדות."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -136,35 +143,6 @@ msgstr "אות %s נתפס, שומר ויוצא…"
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "שגיאה חמורה במצב שמירה"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "מנסה למשוך קובץ NZB מן %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "שמירת %s נכשלה"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "לא ניתן ליצור קובץ זמני עבור %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "מנסה לקבוע מעמד של שרת בלתי קיים %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "כישלון ב־tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "טעינת %s נכשלה"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -326,6 +304,14 @@ msgstr "מילות מפתח"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "מכסה נוצלה, משהה הורדה"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "פרמטר שגוי"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s אינה כתובת דוא״ל תקפה"
|
||||
@@ -338,6 +324,21 @@ msgstr "כתובת שרת דרושה"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr "%s הוא לא תסריט תקף"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s אינו ערך אוקטלי נכון"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -358,22 +359,6 @@ msgstr "לא ניתן ליצור קובץ גיבוי עבור %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "סיסמה מקודדת באופן שגוי %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "פרמטר שגוי"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s אינו ערך אוקטלי נכון"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -404,10 +389,6 @@ msgstr "רישום של אירוע בלתי תקף בהיסטוריה עבור %
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "כישלון מפענח: אין זיכרון"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode התגלה, רק קידוד yEnc נתמך [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -563,8 +544,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "נמענים לא ניתנו, דוא״ל לא נשלח"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "לא ניתן לקרוא את %s"
|
||||
|
||||
@@ -624,6 +604,21 @@ msgstr "נכשל בהעברת %s אל %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr "ניסיון נחסם ליצור תיקייה %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "כישלון ב־tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "שמירת %s נכשלה"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "טעינת %s נכשלה"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "חיבור מסורב מאת:"
|
||||
@@ -852,11 +847,6 @@ msgstr "מחיקת %s נכשלה!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "מנסה לחלץ עם הסיסמה \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "פריקה נכשלה, ארכיון דורש סיסמה"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "פורק"
|
||||
@@ -865,51 +855,25 @@ msgstr "פורק"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "פריקה נכשלה, לא היה ניתן למצוא את %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "שגיאה: לא היה ניתן למצוא את \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "פריקה נכשלה, שגיאת CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "שגיאה: CRC נכשל ב־\"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr "פריקה נכשלה, קובץ גדול מדי עבור מערכת הקבצים (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "שגיאה: קובץ גדול מדי עבור מערכת הקבצים (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "פריקה נכשלה, שגיאת כתיבה או דיסק מלא?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "שגיאה: שגיאת כתיבה (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "פריקה נכשלה, נתיב ארוך מדי"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "שגיאה: נתיב ארוך מדי (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "שגיאה: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "פריקה נכשלה, ארכיון דורש סיסמה"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -936,13 +900,10 @@ msgstr "בינארי 7za לא נמצא, לא ניתן לפרוק את \"%s\""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "מנסה 7zip עם הסיסמה \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "ערכות 7ZIP בשם \"%s\" אינה שלמה, לא ניתן לפרוק"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "לא היה ניתן לפרוק את %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ראה קובץ יומן"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1021,14 +982,14 @@ msgstr "מוודא תיקון"
|
||||
msgid "Disk full"
|
||||
msgstr "דיסק מלא"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "מוודא"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "בודק קבצי תוספת"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "מוודא"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1038,6 +999,10 @@ msgstr "בודק"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "מנסה וידוא SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "נותר"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "שרת זה אינו מתיר SSL על פתחה זו"
|
||||
@@ -1156,10 +1121,10 @@ msgstr "תסריט ההתראה \"%s\" אינו קיים"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "נכשל בשליחת התראת Windows"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "נכשל ביבוא %s קבצים מן %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "לא ניתן ליצור קובץ זמני עבור %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1171,6 +1136,11 @@ msgstr "שגיאה בזמן הוספת %s, מסיר"
|
||||
msgid "Error removing %s"
|
||||
msgstr "שגיאה בהסרת %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "נכשל ביבוא %s קבצים מן %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1187,8 +1157,8 @@ msgstr "NZB התווסף לתור"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "קובץ NZB בלתי תקף %s, מדלג (סיבה=%s, שורה=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "קובץ NZB בלתי תקף %s, מדלג (שגיאה: %s)"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1570,11 +1540,6 @@ msgstr "עוד"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "בתר־עיבוד נכשל עבור %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ראה קובץ יומן"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr "בתר־עיבוד בוטל"
|
||||
@@ -1782,6 +1747,11 @@ msgstr "פעולה בלתי ידועה: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "תזמן עבור שרת בלתי קיים %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "מנסה לקבוע מעמד של שרת בלתי קיים %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3699,6 +3669,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr "וודא תעודות בעת התחברות אל מדדנים ומקורות RSS ע״י שימוש ב־HTTPS."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr "ייפוי כוח SOCKS5"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr "השתמש בייפוי הכוח SOCKS5 המצוין עבור כל החיבורים היוצאים."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "שרת"
|
||||
@@ -3950,6 +3928,19 @@ msgstr "קפדני"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 הוא העדיפות הגבוהה ביותר, 100 הוא העדיפות הנמוכה ביותר"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr "דרוש"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
"במקרה של כישלונות חיבור, תור ההורדות יושהה למשך כמה דקות במקום דילוג על השרת"
|
||||
" הזה"
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4133,6 +4124,14 @@ msgstr "הוּרד"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "קרא את כל ההזנות כעת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
"אם רק קטגורית <em>ברירת המחדל</em> נבחרת, התראות מאופשרות עבור עבודות בכל "
|
||||
"הקטגוריות."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "התראת דוא״ל בעת השלמת עבודה"
|
||||
@@ -4413,7 +4412,13 @@ msgstr "קטגוריות / קבוצות של מדדן"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "בחר קטגוריה 1 לפחות."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "מיון סדרות"
|
||||
|
||||
@@ -4441,7 +4446,8 @@ msgstr "קדם־קביעות"
|
||||
msgid "Example"
|
||||
msgstr "דוגמה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "מיון סרטים"
|
||||
|
||||
@@ -4593,7 +4599,8 @@ msgstr "בתיקיות"
|
||||
msgid "No folders"
|
||||
msgstr "אין תיקיות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "מיון תאריכים"
|
||||
|
||||
@@ -4712,10 +4719,6 @@ msgstr "נושא"
|
||||
msgid "Selection"
|
||||
msgstr "בחירה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "נותר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "שטח פנוי"
|
||||
@@ -5121,6 +5124,10 @@ msgstr "קובץ NZB בלתי שמיש"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "משיכת כתובת נכשלה; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "מנסה למשוך קובץ NZB מן %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "שם המארח לא נקבע."
|
||||
|
||||
229
po/main/nb.po
229
po/main/nb.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -100,6 +100,13 @@ msgstr ""
|
||||
"SABnzbd ble startet med koding %s, dette burde være UTF-8. Forvent problemer"
|
||||
" med Unicode filer- og katalognavn i nedlastinger."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -138,35 +145,6 @@ msgstr "Signal %s mottatt, lagrer og avslutter..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Kritisk feil ved lagring av tilstand"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Forsøker å hente NZB fra %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Lagring av %s mislyktes"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan ikke lage midlertidig fil for %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøker å sette status på ikke-eksisterende server %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Feil i tempfil.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Lasting av %s mislyktes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -327,6 +305,14 @@ msgstr "nøkkelord"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Kvote oppbrukt, setter nedlasting på pause"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Feil parameter"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-sti \"%s\" er ikke tillatt her"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s er ikke en godkjent e-post-adresse"
|
||||
@@ -339,6 +325,21 @@ msgstr "Krever server-adresse"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s er ikke en korrekt oktal verdi"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -359,22 +360,6 @@ msgstr "Kan ikke sikkerhetskopiere fil %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Feil kodet passord %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Feil parameter"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s er ikke en korrekt oktal verdi"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-sti \"%s\" er ikke tillatt her"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -405,10 +390,6 @@ msgstr "Ugyldig scenen logging i historien for %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -562,8 +543,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Ingen mottaker oppgitt, e-post ikke sendt"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Kan ikke lese %s"
|
||||
|
||||
@@ -623,6 +603,21 @@ msgstr "Kunne ikke flytte %s til %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Feil i tempfil.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Lagring av %s mislyktes"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Lasting av %s mislyktes"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -849,11 +844,6 @@ msgstr "Fjerning av %s mislyktes!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Prøver unrar med passord \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Utpakking mislyktes, arkivet krever passord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Utpakker"
|
||||
@@ -862,51 +852,25 @@ msgstr "Utpakker"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Utpakking mislyktes, kunne ikke finne %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "FEIL: kunne ikke finne \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Utpakking mislyktes, CRC-feil"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "FEIL: CRC mislyktes i \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr "Utpakking feilet, filen er for stor for filsystemet (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "FEIL: Filen er for stor for filsystemet (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Utpakking mislyktes, skrivefeil eller er disken full?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "FEIL: skrive feil (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Utpakking feilet, stien er for lang"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "FEIL: sti er for lang (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "FEIL: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Utpakking mislyktes, arkivet krever passord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -933,13 +897,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Prøver 7zip med password \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP set \"%s\" er ikke komplett, kan ikke pakke ut"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Kunne ikke pakke ut %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1020,14 +981,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Harddisken er full"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiserer"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiserer"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1037,6 +998,10 @@ msgstr "Undersøker"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Prøver SFV-verifisering"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "gjenstår"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Denne serveren tillater ikke SSL på denne porten"
|
||||
@@ -1153,10 +1118,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Klarte ikke å sende Windows melding"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Kunne ikke importere %s filer fra %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan ikke lage midlertidig fil for %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1168,6 +1133,11 @@ msgstr "Kunne ikke legge til %s, tar bort"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Feil ved fjerning av %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Kunne ikke importere %s filer fra %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1184,8 +1154,8 @@ msgstr "NZB er lagt til i køen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Feilaktig NZB fil %s, hopper over (årsak=%s, linje=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1563,11 +1533,6 @@ msgstr "Mer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Etterbehandling mislyktes for %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1775,6 +1740,11 @@ msgstr "Ukjent handling: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Skjema for ikke eksisterende server %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøker å sette status på ikke-eksisterende server %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3679,6 +3649,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -3927,6 +3905,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 er høyeste prioritet, 99 er laveste prioritet"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4111,6 +4100,12 @@ msgstr "Nedlastet"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Les alle kilder nå"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "E-Post varsling når nedlasting er ferdig"
|
||||
@@ -4389,7 +4384,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
@@ -4417,7 +4418,8 @@ msgstr "For innstillinger"
|
||||
msgid "Example"
|
||||
msgstr "Eksempel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4569,7 +4571,8 @@ msgstr "I mappe"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
@@ -4689,10 +4692,6 @@ msgstr "Emvne"
|
||||
msgid "Selection"
|
||||
msgstr "Utvalg"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "gjenstår"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Ledig plass"
|
||||
@@ -5098,6 +5097,10 @@ msgstr "Feil, Ubrukelig akrivfil"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "URL henting mislyktes; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Forsøker å hente NZB fra %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Du har ikke stilt inn vertsnavn."
|
||||
|
||||
242
po/main/nl.po
242
po/main/nl.po
@@ -1,15 +1,16 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
# Rik Brouwer, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
|
||||
"Last-Translator: Rik Brouwer, 2022\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -104,6 +105,15 @@ msgstr ""
|
||||
"bij het downloaden, problemen krijgen met Unicode namen van bestanden en "
|
||||
"mappen."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
"Huidige umask (%o) zou kunnen beletten dat SABnzbd toegang heeft tot de "
|
||||
"aangemaakte bestanden en mappen."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -142,35 +152,6 @@ msgstr "Signaal %s ontvangen, opslaan en afsluiten..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Onherstelbare fout bij opslaan status"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Probeer NZB op te halen van %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Opslaan van %s lukt niet"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan geen tijdelijk bestand maken voor %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Poging de status van niet-bestaande server %s in te stellen"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Probleem met tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Inlezen van %s mislukt"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -339,6 +320,14 @@ msgstr "trefwoorden"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Quotum verbruikt, download is gestopt"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Incorrecte parameter"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-pad '%s' hier niet toegestaan."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s is geen geldig e-mailadres"
|
||||
@@ -351,6 +340,23 @@ msgstr "Serveradres verplicht"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr "%s is geen geldig script."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s is geen correct octaal getal"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
"Ingestelde rechten van %s zouden kunnen beletten dat SABnzbd toegang heeft "
|
||||
"tot de aangemaakte bestanden en mappen."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fout: Wachtrij is niet leeg, andere map kiezen niet mogelijk."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -371,22 +377,6 @@ msgstr "Backupbestand maken voor %s niet mogelijk"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Foutief gecodeerd wachtwoord %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Incorrecte parameter"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s is geen correct octaal getal"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-pad '%s' hier niet toegestaan."
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fout: Wachtrij is niet leeg, andere map kiezen niet mogelijk."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -420,10 +410,6 @@ msgstr "Ongeldig loggen van fase in geschiedenis voor %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Decoder fout: onvoldoende geheugen"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode gevonden, alleen yEnc codering wordt ondersteund [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -582,8 +568,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Geen geadresseerden opgegeven, e-mail niet verstuurd"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "%s kan niet gelezen worden"
|
||||
|
||||
@@ -643,6 +628,21 @@ msgstr "Verplaatsen van %s naar %s mislukt"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr "Poging om map %s aan te maken geblokkeerd"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Probleem met tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Opslaan van %s lukt niet"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Inlezen van %s mislukt"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Verbinding geweigerd van: "
|
||||
@@ -876,11 +876,6 @@ msgstr "Verwijderen van %s mislukt."
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Unrar proberen met wachtwoord \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Uitpakken mislukt, archief vereist wachtwoord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Uitpakken"
|
||||
@@ -889,51 +884,25 @@ msgstr "Uitpakken"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Uitpakken mislukt, kan %s niet vinden"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "FOUT: \"%s\" niet te vinden"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Uitpakken mislukt, CRC-fout"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "FOUT: onjuiste CRC in \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr "Uitplakken mislukt, bestand te groot voor het bestandssysteem (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "FOUT: bestand te groot voor het bestandssysteem (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Uitpakken mislukt, schrijffout of schijf vol?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "FOUT: schrijffout (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Uitpakken mislukt, bestandspad is te lang"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "FOUT: bestandspad is te lang (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "FOUT: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Uitpakken mislukt, archief vereist wachtwoord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -960,13 +929,10 @@ msgstr "Geen 7za-programma gevonden, kan \"%s\" niet uitpakken"
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Uitpakpoging met 7zip en wachtwoord '%s'"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "De 7Zip-set '%s' is incompleet, uitpakken is niet mogelijk"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Uitpakken %s niet mogelijk"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "zie logbestand"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1049,14 +1015,14 @@ msgstr "Reparatie controleren"
|
||||
msgid "Disk full"
|
||||
msgstr "Schijf is vol"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiëren"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Controleren van extra bestanden"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiëren"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1066,6 +1032,10 @@ msgstr "Controleren"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Probeer SFV-verificatie"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "over"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "De server staat geen SSL toe op deze poort"
|
||||
@@ -1185,10 +1155,10 @@ msgstr "Meldingsscript '%s' bestaat niet"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Versturen Windows-melding mislukt"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importeren van %s bestanden van %s mislukt"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan geen tijdelijk bestand maken voor %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1200,6 +1170,11 @@ msgstr "Fout bij toevoegen van %s, wordt weer verwijderd"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Fout bij verwijderen van %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importeren van %s bestanden van %s mislukt"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1216,8 +1191,8 @@ msgstr "Download aan wachtrij toegevoegd"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Foutief NZB-bestand %s, overslaan (reden=%s, regel=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr "Corrupte NZB %s wordt overgeslagen (foutmelding: %s)"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1600,11 +1575,6 @@ msgstr "Meer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Nabewerking van %s mislukt (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "zie logbestand"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr "Nabewerking is afgebroken"
|
||||
@@ -1814,6 +1784,11 @@ msgstr "Onbekende actie: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Taak voor niet bestaande server %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Poging de status van niet-bestaande server %s in te stellen"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3771,6 +3746,14 @@ msgstr ""
|
||||
"Controleer certificaten bij beveiligde verbindingen met indexers en RSS-"
|
||||
"feeds."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr "SOCKS5 Proxy"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr "Gebruik een SOCKS5 proxy server voor alle uitgaande verbindingen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -4033,6 +4016,19 @@ msgstr "Strikt"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 is de hoogste en 99 de laagste prioriteit"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr "Vereist"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
"Het downloaden zal een aantal minuten gepauzeerd worden wanneer deze server "
|
||||
"niet beschikbaar is."
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4219,6 +4215,14 @@ msgstr "Gedownload"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Alle feeds nu uitlezen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
"Notificaties zullen worden verstuurd voor alle downloads als de "
|
||||
"<em>Standaard</em> categorie geselecteerd is."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Stuur een e-mail na het voltooien van elke download"
|
||||
@@ -4505,7 +4509,13 @@ msgstr "Indexer Categorieën / Groepen"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Selecteer minstens 1 categorie."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sorteren"
|
||||
|
||||
@@ -4533,7 +4543,8 @@ msgstr "Standaardinstellingen"
|
||||
msgid "Example"
|
||||
msgstr "Voorbeeld"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sorteren"
|
||||
|
||||
@@ -4685,7 +4696,8 @@ msgstr "In mappen"
|
||||
msgid "No folders"
|
||||
msgstr "Geen mappen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sorteren"
|
||||
|
||||
@@ -4724,7 +4736,7 @@ msgstr "eigenschap"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "GuessIt Property"
|
||||
msgstr "GuessIt eigenschap"
|
||||
msgstr "GuessIt Eigenschap"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "GuessIt.Property"
|
||||
@@ -4805,10 +4817,6 @@ msgstr "Onderwerp"
|
||||
msgid "Selection"
|
||||
msgstr "Selectie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "over"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Vrije ruimte"
|
||||
@@ -5214,6 +5222,10 @@ msgstr "Onbruikbaar NZB-bestand"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "URL ophalen mislukt; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Probeer NZB op te halen van %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Geen hostnaam opgegeven."
|
||||
|
||||
229
po/main/pl.po
229
po/main/pl.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -95,6 +95,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -133,35 +140,6 @@ msgstr "Odebrano sygnał %s, zapisywanie i zamykanie programu..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Błąd krytyczny podczas zapisywania stanu"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Próba pobrania NZB z %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Nie udało się zapisać %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nie można utworzyć tymczasowego pliku dla %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Próba ustawienia statusu nieistniejącego serwera %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Błąd w tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Nie udało się wczytać %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -322,6 +300,14 @@ msgstr "słowa kluczowe"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Przekroczono limit, wstrzymywanie pobierania"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Błędny parametr"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ścieżka UNC \"%s\" niedozwolona"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s nie jest prawidłowym adresem email"
|
||||
@@ -334,6 +320,21 @@ msgstr "Wymagane jest podanie adresu serwera"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nie jest prawidłową wartością w systemie ósemkowym"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -354,22 +355,6 @@ msgstr "Nie można utworzyć kopii zapasowej %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Nieprawidłowo zakodowane hasło %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Błędny parametr"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nie jest prawidłową wartością w systemie ósemkowym"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ścieżka UNC \"%s\" niedozwolona"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -400,10 +385,6 @@ msgstr "Nieprawidłowy log etapu w historii dla %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -561,8 +542,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Nie podano adresatów, wiadomość nie została wysłana"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Nie można odczytać %s"
|
||||
|
||||
@@ -622,6 +602,21 @@ msgstr "Nie udało się przenieść %s do %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Błąd w tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Nie udało się zapisać %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Nie udało się wczytać %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -848,11 +843,6 @@ msgstr "Usuwanie %s nie powiodło się!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Próba rozpakowania archiwum RAR z użyciem hasła \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Rozpakowywanie nie powiodło się, archiwum wymaga podania hasła"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Rozpakowywanie"
|
||||
@@ -861,51 +851,25 @@ msgstr "Rozpakowywanie"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Rozpakowywanie nie powiodło się, nie można znaleźć %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "BŁĄD: nie można znaleźć \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Rozpakowywanie nie powiodło się, błąd CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "BŁĄD: nieprawidłowa suma kontrolna CRC w \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Rozpakowywanie nie powiodło się, błąd zapisu lub zapełniony dysk?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "BŁĄD: błąd zapisu (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Rozpakowywanie nie powiodło się, zbyt długa ścieżka"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "BŁĄD: zbyt długa ścieżka (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "BŁĄD: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Rozpakowywanie nie powiodło się, archiwum wymaga podania hasła"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -932,13 +896,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Próba rozpakowania archiwum 7zip z użyciem hasła \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "Zestaw 7zip \"%s\" jest niekompletny, nie można rozpakować"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Nie można rozpakować %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "sprawdź logi"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1021,14 +982,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Dysk pełny"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Weryfikowanie"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Weryfikowanie"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1038,6 +999,10 @@ msgstr "Sprawdzanie"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Próba weryfikacji SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "pozostało"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Serwer nie obsługuje SSL na tym porcie"
|
||||
@@ -1154,10 +1119,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Nie udało się zaimportować %s plików z %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nie można utworzyć tymczasowego pliku dla %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1169,6 +1134,11 @@ msgstr "Błąd podczas dodawania %s, usuwanie"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Błąd podczas usuwania %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Nie udało się zaimportować %s plików z %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1185,8 +1155,8 @@ msgstr "NZB dodany do kolejki"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Nieprawidłowy plik NZB %s, pomijam (powód=%s, linia=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1568,11 +1538,6 @@ msgstr "Więcej"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Przetwarzanie końcowe nie powiodło się dla %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "sprawdź logi"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1780,6 +1745,11 @@ msgstr "Nieznane działanie: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Harmonogram dla nieistniejącego serwera %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Próba ustawienia statusu nieistniejącego serwera %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3686,6 +3656,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Serwer"
|
||||
@@ -3935,6 +3913,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 oznacza najwyższy priorytet, 99 - najniższy"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4119,6 +4108,12 @@ msgstr "Pobrane"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Czytaj teraz wszystkie kanały"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Powiadomienia email po zakończeniu zadania"
|
||||
@@ -4397,7 +4392,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortowanie seriali"
|
||||
|
||||
@@ -4425,7 +4426,8 @@ msgstr "Predefiniowane"
|
||||
msgid "Example"
|
||||
msgstr "Przykład"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4577,7 +4579,8 @@ msgstr "W katalogach"
|
||||
msgid "No folders"
|
||||
msgstr "Brak katalogów"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortowanie według daty"
|
||||
|
||||
@@ -4697,10 +4700,6 @@ msgstr "Temat"
|
||||
msgid "Selection"
|
||||
msgstr "Zaznaczenie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "pozostało"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Wolne miejsce"
|
||||
@@ -5103,6 +5102,10 @@ msgstr "Bezużyteczny plik NZB"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Pobieranie URL nie powiodło się; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Próba pobrania NZB z %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Nie ustawiono nazwy hosta."
|
||||
|
||||
229
po/main/pt_BR.po
229
po/main/pt_BR.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -99,6 +99,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -137,35 +144,6 @@ msgstr "Sinal %s encontrado. Salvando e saindo..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Erro fatal ao salvar estado"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Tentando obter NZB de %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Falha ao salvar %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Não é possível criar um arquivo temporário para %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Tentando definir o status do servidor inexistente %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Falha em tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Falha ao carregar %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -326,6 +304,14 @@ msgstr "palavras chave"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Quota esgotada, pausando o download"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parâmetro incorreto"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "O caminho UNC \"%s\" não é permitido aqui"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s não é um endereço de e-mail válido"
|
||||
@@ -338,6 +324,21 @@ msgstr "Endereço do servidor necessário"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s não é um valor octal correto"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
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/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -358,22 +359,6 @@ msgstr "Não é possível criar um arquivo de backup para %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Senha %s codificada incorretamente"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parâmetro incorreto"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s não é um valor octal correto"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "O caminho UNC \"%s\" não é permitido aqui"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Erro: A fila não está vazia. Não será possível mudar de pasta."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -406,10 +391,6 @@ msgstr "Registro inválido de etapa no histórico para %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -565,8 +546,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Nenhum destinário fornecido, e-mail não enviado"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Não é possível ler %s"
|
||||
|
||||
@@ -626,6 +606,21 @@ msgstr "Falha ao mover %s para %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Falha em tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Falha ao salvar %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Falha ao carregar %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -852,11 +847,6 @@ msgstr "A exclusão de %s falhou!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Tentando descompactar com a senha \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "A descompactação falhou. O arquivo exige uma senha"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Descompactando"
|
||||
@@ -865,51 +855,25 @@ msgstr "Descompactando"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "A descompactação falhou. Não foi possível encontrar %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "ERRO: Não foi possível encontrar \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "A descompactação falhou. Erro de CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "ERRO: CRC falhou em \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "A descompactação falhou. Erro de escrita ou disco cheio?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "ERRO: erro de escrita (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Descompactação falhou, o caminho é muito extenso"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "ERRO: caminho muito extenso (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "ERRO: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "A descompactação falhou. O arquivo exige uma senha"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -936,13 +900,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Testando 7zip com a senha \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "O arquivo 7ZIP \"%s\" está incompleto, impossível descompactar"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Não foi possível descompactar %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "veja o arquivo de log"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1022,14 +983,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Disco cheio"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1039,6 +1000,10 @@ msgstr "Verificando"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Tentando verificação SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "restantes"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Este servidor não permite SSL nesta porta"
|
||||
@@ -1155,10 +1120,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Falha ao importar %s arquivos de %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Não é possível criar um arquivo temporário para %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1170,6 +1135,11 @@ msgstr "Erro ao adicionar %s. Removendo"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Erro ao remover %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Falha ao importar %s arquivos de %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1186,8 +1156,8 @@ msgstr "NZB adicionado à fila"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Arquivo NZB %s inválido. Pulando (razão=%s, linha=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1570,11 +1540,6 @@ msgstr "Mais"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "O pós-processamento falhou para %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "veja o arquivo de log"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1783,6 +1748,11 @@ msgstr "Ação desconhecida: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Agendamento para um servidor inexistente %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Tentando definir o status do servidor inexistente %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3691,6 +3661,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
@@ -3939,6 +3917,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 é a prioridade mais alta, 99 é a prioridade mais baixa"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4123,6 +4112,12 @@ msgstr "Baixados"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Ler Todos os Feeds Agora"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Notificar por e-mail na conclusão da tarefa"
|
||||
@@ -4401,7 +4396,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenação de Séries"
|
||||
|
||||
@@ -4429,7 +4430,8 @@ msgstr "Predefinições"
|
||||
msgid "Example"
|
||||
msgstr "Exemplo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4581,7 +4583,8 @@ msgstr "Em pastas"
|
||||
msgid "No folders"
|
||||
msgstr "Sem pastas"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenação por data"
|
||||
|
||||
@@ -4701,10 +4704,6 @@ msgstr "Assunto"
|
||||
msgid "Selection"
|
||||
msgstr "Seleção"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "restantes"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espaço Disponível"
|
||||
@@ -5108,6 +5107,10 @@ msgstr "Arquivo NZB inutilizável"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "A busca da URL falhou; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Tentando obter NZB de %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "O nome do host não foi definido."
|
||||
|
||||
229
po/main/ro.po
229
po/main/ro.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -105,6 +105,13 @@ msgstr ""
|
||||
"SABnzbd a fost pornit cu encodarea %s, aceasta trebuie să fie UTF-8. Pot "
|
||||
"apărea probleme cu denumiri de fișiere și directoare Unicode în descărcări."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -143,35 +150,6 @@ msgstr "Semnal %s prins, salvez şi ies..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Eroare fatală la salvare"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Încerc să descarc NZB de la %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Salvarea %s nereuşită"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nu pot crea fişier temporar pentru %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Încerc să setez starea unui server nexistent %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Eroare în tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Încărcarea %s nereuşită"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -338,6 +316,14 @@ msgstr "cuvinte cheie"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Cotă epuizată, întrerupem descărcarea"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parametru Incorect"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "cale UNC \"%s\" nu este premisă aici"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s nu este o adresă email validă"
|
||||
@@ -350,6 +336,21 @@ msgstr "Adresă server necesară"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nu este o valoare octală corectă"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -370,22 +371,6 @@ msgstr "Nu pot crea copie de rezervă pentru %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Parolă %s codificată greşit"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Parametru Incorect"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nu este o valoare octală corectă"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "cale UNC \"%s\" nu este premisă aici"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -417,10 +402,6 @@ msgstr "Jurnal istoric stagii invalid pentru %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "Eroare decodare: lipsă memorie"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode detectat, este suportată doar codarea yEnc [%s]"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -579,8 +560,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Destinatar necunoscut, niciun email trimis"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Nu pot citi %s"
|
||||
|
||||
@@ -640,6 +620,21 @@ msgstr "Mutare %s în %s nereuşită"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Eroare în tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Salvarea %s nereuşită"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Încărcarea %s nereuşită"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -872,11 +867,6 @@ msgstr "Ştergere %s nereuşită!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Încerc unrar cu parola \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Dezarhivare nereuşită, arhiva necesită o parolă"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Dezarhivare"
|
||||
@@ -885,52 +875,26 @@ msgstr "Dezarhivare"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Dezarhivare nereuşită, nu pot găsi %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "EROARE: nu pot găsi \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Dezarhivare nereuşită, eroare CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "EROARE: CRC nereuşit în \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
"Dezarhivare eșuată, fișier prea mare pentru sistemul de fișiere (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "EROARE: fișier prea mare pentru sistemul de fișiere (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Dezarhivare nereuşită, eroare scriere sau disc plin?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "EROARE: eroare scriere (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Dezarhivare eșuată, calea este prea lungă"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "EROARE: calea este prea lungă (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "EROARE: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Dezarhivare nereuşită, arhiva necesită o parolă"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -957,13 +921,10 @@ msgstr "Nu s-a găsit binar 7za, nu pot dezarhiva „%s”"
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Încerc 7zip cu parola \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "Setul 7ZIP \"%s\" este incomplet, nu pot dezarhiva"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Nu pot dezarahiva %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "vezi fişier jurnal"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1046,14 +1007,14 @@ msgstr "Se verifică repararea"
|
||||
msgid "Disk full"
|
||||
msgstr "Disc plin"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Se verifică"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr "Se verifică fișierele extra"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Se verifică"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1063,6 +1024,10 @@ msgstr "Se verifică"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Încerc verificare SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "rămas"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Acest server nu permite SSL pe acest port"
|
||||
@@ -1181,10 +1146,10 @@ msgstr "Scriptul de notificare \"%s\" nu există"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "Nu am putut trimite notificări în Fereastră"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importare %s a fişierelor de la %s nereuşită"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nu pot crea fişier temporar pentru %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1196,6 +1161,11 @@ msgstr "Eroare adăugare %s, ştergem"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Eroare ştergere %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Importare %s a fişierelor de la %s nereuşită"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1212,8 +1182,8 @@ msgstr "NZB adăugat în coadă"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Fişier NZB invalid %s, ignorăm (motiv=%s, line=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1599,11 +1569,6 @@ msgstr "Mai mult"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Post Procesare Nereuşită pentru %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "vezi fişier jurnal"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr "Post-procesarea a fost întreruptă"
|
||||
@@ -1811,6 +1776,11 @@ msgstr "Acţiune necunoscută: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Planificare pentru un server inexistent %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Încerc să setez starea unui server nexistent %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3717,6 +3687,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -3967,6 +3945,17 @@ msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr ""
|
||||
"0 este prioritatea cea mai ridicată, 99 este prioritatea cea mai scăzută"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4151,6 +4140,12 @@ msgstr "Descărcate"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Citeşte Toate Fluxurile Acum"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Notificări Email Sarcină Terminată"
|
||||
@@ -4428,7 +4423,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortare Seriale"
|
||||
|
||||
@@ -4456,7 +4457,8 @@ msgstr "Presetări"
|
||||
msgid "Example"
|
||||
msgstr "Exemplu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4608,7 +4610,8 @@ msgstr "În dosare"
|
||||
msgid "No folders"
|
||||
msgstr "Fără dosare"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortare Dată"
|
||||
|
||||
@@ -4728,10 +4731,6 @@ msgstr "Subiect"
|
||||
msgid "Selection"
|
||||
msgstr "Selecţie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "rămas"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Spațiu liber"
|
||||
@@ -5136,6 +5135,10 @@ msgstr "Fişier NZB Inutilizabil"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Descărcare URL nereuşită; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Încerc să descarc NZB de la %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Numele gazdei nu este setat."
|
||||
|
||||
229
po/main/ru.po
229
po/main/ru.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -99,6 +99,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -137,35 +144,6 @@ msgstr "Получен сигнал %s. Выполняется сохранен
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Попытка загрузить NZB с %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Ошибка сохранения %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Не удаётся создать временный файл для %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Попытка установить статус для несуществующего сервера %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Ошибка в tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Ошибка загрузки %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -326,6 +304,14 @@ msgstr ""
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Квота исчерпана. Загрузка приостановлена"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Неправильный параметр"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-путь «%s» здесь не допускается"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s не является допустимым адресом электронной почты"
|
||||
@@ -338,6 +324,21 @@ msgstr "Требуется адрес сервера"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s не является правильным восьмеричным значением"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Ошибка: очередь не пустая, папку нельзя изменить."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -358,22 +359,6 @@ msgstr "Не удаётся создать файл резервной копи
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Неправильно закодированный пароль %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Неправильный параметр"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s не является правильным восьмеричным значением"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-путь «%s» здесь не допускается"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Ошибка: очередь не пустая, папку нельзя изменить."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -404,10 +389,6 @@ msgstr "Недопустимый этап ведения журнала для %
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -561,8 +542,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Получатели не указаны. Электронное письмо не отправлено"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Не удаётся прочитать %s"
|
||||
|
||||
@@ -622,6 +602,21 @@ msgstr "Не удалось переместить %s в %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Ошибка в tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Ошибка сохранения %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Ошибка загрузки %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -850,11 +845,6 @@ msgstr "Не удалось удалить %s!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Попытка распаковки RAR-архива с паролем «%s»"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Ошибка распаковки: архив защищён паролем"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Распаковка"
|
||||
@@ -863,51 +853,25 @@ msgstr "Распаковка"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Ошибка распаковки: не удаётся найти %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "ОШИБКА: не удаётся найти «%s»"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Не удалось распаковать: ошибка CRC"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "ОШИБКА: неверная CRC-сумма для %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Не удалось распаковать: ошибка записи или на диске нет места?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "ОШИБКА: не удалось записать (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "ОШИБКА: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Ошибка распаковки: архив защищён паролем"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -934,13 +898,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr ""
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "см. журнал"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1022,14 +983,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверка"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверка"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1039,6 +1000,10 @@ msgstr "Проверка"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Проверка SFV-суммы"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "осталось"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr ""
|
||||
@@ -1155,10 +1120,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Не удалось импортировать %s файлов из %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Не удаётся создать временный файл для %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1170,6 +1135,11 @@ msgstr "Не удалось добавить %s: удалён"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Ошибка удаления %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Не удалось импортировать %s файлов из %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1186,8 +1156,8 @@ msgstr "NZB-файл добавлен в очередь"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Недопустимый NZB-файл %s: пропущен (причина — %s, строка — %s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1567,11 +1537,6 @@ msgstr "Подробнее"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Ошибка пост-обработки для %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "см. журнал"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1779,6 +1744,11 @@ msgstr "Неизвестное действие: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Расписание для несуществующего сервера %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Попытка установить статус для несуществующего сервера %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3681,6 +3651,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Сервер"
|
||||
@@ -3928,6 +3906,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr ""
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4112,6 +4101,12 @@ msgstr "Загружено"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Прочитать все ленты"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Уведомление по электронной почте после завершения задания"
|
||||
@@ -4396,7 +4391,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортировка сериалов"
|
||||
|
||||
@@ -4424,7 +4425,8 @@ msgstr "Готовые шаблоны"
|
||||
msgid "Example"
|
||||
msgstr "Пример"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4576,7 +4578,8 @@ msgstr "В папках"
|
||||
msgid "No folders"
|
||||
msgstr "Без папок"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сортировка даты"
|
||||
|
||||
@@ -4696,10 +4699,6 @@ msgstr "Тема"
|
||||
msgid "Selection"
|
||||
msgstr "Выбрать"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "осталось"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "свободно на диске"
|
||||
@@ -5105,6 +5104,10 @@ msgstr "Пустой NZB-файл"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Не удалось загрузить URL: %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Попытка загрузить NZB с %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Не задано имя компьютера."
|
||||
|
||||
229
po/main/sr.po
229
po/main/sr.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -97,6 +97,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -135,35 +142,6 @@ msgstr "Signal %s primljen, snimanje i napuštanje..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Fatalna greška pri snimanju trenutnog stanja"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Pokušaj da se učita NZB sa %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Snimanje %s neuspešno"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nemoguće kreiranje privremene datoteke za %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Покушај постављања статуса за непостојећи сервер %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Грешка у tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Učitavanje %s neuspešno"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -324,6 +302,14 @@ msgstr "кључне речи"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Kvota utrošena, pauziram preuzimanja"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Погрешан параметар"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC путања \"%s\" није дозвољена"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s nije ispravna email adresa"
|
||||
@@ -336,6 +322,21 @@ msgstr "Потребна је адреса сервера"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nije ispravna oktalna vrednost"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Грешка: ред није празан, фасцикла се не може променити."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -356,22 +357,6 @@ msgstr "Ne može se kreirati sigurnosna kopija za %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Pogrešno šifrovana lozinka %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Погрешан параметар"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s nije ispravna oktalna vrednost"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC путања \"%s\" није дозвољена"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Грешка: ред није празан, фасцикла се не може променити."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -402,10 +387,6 @@ msgstr "Погрешне етапе извештаја можете наћи у
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -560,8 +541,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Нема примаоце, е-порука није послана"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Неуспешно читање %s"
|
||||
|
||||
@@ -621,6 +601,21 @@ msgstr "Neuspešno premeštanje %s u %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Грешка у tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Snimanje %s neuspešno"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Učitavanje %s neuspešno"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -845,11 +840,6 @@ msgstr "Neuspešno brisanje %s!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Proba raspakivanja sa lozinkom \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Neuspešno raspakivanje, arhiva zahteva lozinku"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Распакивање"
|
||||
@@ -858,51 +848,25 @@ msgstr "Распакивање"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Погрешно распакивање, не може да се нађе %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "ГРЕШКА: Не могу да нађем \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Neuspešno raspakivanje, CRC greška"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "ГРЕШКА: Погрешан CRC у \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Neuspašno raspakivanje, greška u pisanju ili je disk pun?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "ГРЕШКА: грешка писања (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Neuspešno raspakivanje, putanja je predugačka"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "ГРЕШКА: путања је превелика (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "ГРЕШКА: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Neuspešno raspakivanje, arhiva zahteva lozinku"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -929,13 +893,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Покушавам 7zip са лозинком \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP скуп \"%s\" није потпун, не могу да издвојим"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Не могу да издвојим %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "видети извештај"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1016,14 +977,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Диск је пун"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверавање"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверавање"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1033,6 +994,10 @@ msgstr "Провера"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Pokušaj SFV provere"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "остало"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Ovaj server ne dozvoljava SSL na ovom portu"
|
||||
@@ -1149,10 +1114,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Неуспешан унос %s датотеке са %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Nemoguće kreiranje privremene datoteke za %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1164,6 +1129,11 @@ msgstr "Грешка додавања %s, уклањање"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Greška pri uklanjanju %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Неуспешан унос %s датотеке са %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1180,8 +1150,8 @@ msgstr "NZB додат у ред"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Неважећи NZB %s, прескакање (разлог=%s, линија=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1559,11 +1529,6 @@ msgstr "Више"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Грешка пост-процесирања за %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "видети извештај"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1771,6 +1736,11 @@ msgstr "Непозната акција: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Планификација за непостојећи сервер %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Покушај постављања статуса за непостојећи сервер %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3666,6 +3636,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Сервер"
|
||||
@@ -3914,6 +3892,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 je najveći prioritet, 99 je najniži prioritet"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4097,6 +4086,12 @@ msgstr "Преузето"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Сада читај све фидове"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "Нотификација е-поштом при завршетку рада"
|
||||
@@ -4374,7 +4369,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортирање серије"
|
||||
|
||||
@@ -4402,7 +4403,8 @@ msgstr "Предподешавања"
|
||||
msgid "Example"
|
||||
msgstr "Примери"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4554,7 +4556,8 @@ msgstr "У фасциклама"
|
||||
msgid "No folders"
|
||||
msgstr "Нема фасцикле"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сређивање датумом"
|
||||
|
||||
@@ -4674,10 +4677,6 @@ msgstr "Тема"
|
||||
msgid "Selection"
|
||||
msgstr "Избор"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "остало"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Слободан простор"
|
||||
@@ -5080,6 +5079,10 @@ msgstr "NZB датотека неупотребљива"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "Погрешно учитавање УРЛ-а; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Pokušaj da se učita NZB sa %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Име хоста није унето."
|
||||
|
||||
229
po/main/sv.po
229
po/main/sv.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -97,6 +97,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -135,35 +142,6 @@ msgstr "Signal %s mottagen, sparar och stänger..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Kritiskt fel vid sparande av läge"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Försöker att hämta NZB från %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Sparar %s misslyckades"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan inte skapa temp -fil för %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Försöker att sätta status på icke existerande server %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fel i tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Laddning av %s misslyckades"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -324,6 +302,14 @@ msgstr "nyckelord"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "Din kvot är uppnådd, pausar nerladdning"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fel parameter"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC sökväg \"%s\" är inte tillåten här"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s är inte en godkänd e-mail adress"
|
||||
@@ -336,6 +322,21 @@ msgstr "Kräver serveradress"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s är inte rätt siffervärde"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fel: Kön är inte tom, kan inte byta mapp."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -356,22 +357,6 @@ msgstr "Kan inte skapa backup-fil för %s"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "Felaktigt kodat lösenord %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Fel parameter"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s är inte rätt siffervärde"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC sökväg \"%s\" är inte tillåten här"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fel: Kön är inte tom, kan inte byta mapp."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -403,10 +388,6 @@ msgstr "Felaktig loggning i historiken av %s"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -560,8 +541,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "Ingen mottagare angiven, ingen e-post har skickats"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "Kan ej läsa %s"
|
||||
|
||||
@@ -621,6 +601,21 @@ msgstr "Det gick inte att flyta %s till %s"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "Fel i tempfile.mkstemp"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "Sparar %s misslyckades"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Laddning av %s misslyckades"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -847,11 +842,6 @@ msgstr "Borttagning av %s misslyckades!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "Försöker att packa upp med lösenord %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Uppackning misslyckades, arkivet kräver lösenord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "Packar upp"
|
||||
@@ -860,51 +850,25 @@ msgstr "Packar upp"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "Uppackning misslyckades, gick inte att hitta %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "FEL: gick inte att hitta \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "Uppackning misslyckades, CRC-fel"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "FEL: CRC misslyckades i \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Uppackning misslyckades, skrivfel eller disken full?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "FEL: skrivningsfel (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Uppackning misslyckades, sökvägen är för lång"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "FEL: sökvägen är för lång (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "FEL: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "Uppackning misslyckades, arkivet kräver lösenord"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -931,13 +895,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Provar 7zip med lösenord \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP set \"%s\" är inte komplett, kan inte packa upp"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "Kunde inte packa upp %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1020,14 +981,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "Disken är full"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifierar"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifierar"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1037,6 +998,10 @@ msgstr "Kontrollerar"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Försöker verifiera SFV"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "kvar"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "Den här servern tillåter in SSL på denna port"
|
||||
@@ -1153,10 +1118,10 @@ msgstr ""
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Det gick inte att importera %s filer från %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "Kan inte skapa temp -fil för %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1168,6 +1133,11 @@ msgstr "Det gick inte att lägga till %s, tar bort"
|
||||
msgid "Error removing %s"
|
||||
msgstr "Fel vid borttagning av %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "Det gick inte att importera %s filer från %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1184,8 +1154,8 @@ msgstr "NZB tillagd i kön"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "Felaktig NZB fil %s, hoppar över (orsak=%s, linje=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1565,11 +1535,6 @@ msgstr "Mer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Efterbehandling misslyckades för %s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1777,6 +1742,11 @@ msgstr "Okänd åtgärd: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "Schema för icke existerande server %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Försöker att sätta status på icke existerande server %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3678,6 +3648,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
@@ -3926,6 +3904,17 @@ msgstr ""
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 är högst prioritet, 99 är lägst prioritet"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4110,6 +4099,12 @@ msgstr "Nedladdad"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "Läsa Alla Flöden Nu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "E-post notifiering när jobb är slutfört"
|
||||
@@ -4387,7 +4382,13 @@ msgstr ""
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
@@ -4415,7 +4416,8 @@ msgstr "Förinställningar"
|
||||
msgid "Example"
|
||||
msgstr "Exempel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -4567,7 +4569,8 @@ msgstr "In mapp"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sortering"
|
||||
|
||||
@@ -4687,10 +4690,6 @@ msgstr "Ämne"
|
||||
msgid "Selection"
|
||||
msgstr "Urval"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "kvar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Ledigt diskutrymme"
|
||||
@@ -5095,6 +5094,10 @@ msgstr "Oanvändbar NZB fil"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "URL hämtning misslyckades; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Försöker att hämta NZB från %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Adressen är inte angiven."
|
||||
|
||||
229
po/main/zh_CN.po
229
po/main/zh_CN.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
@@ -95,6 +95,13 @@ msgid ""
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr "SABnzbd 以 %s 编码启动了,正常应该是 UTF-8。会导致下载文件夹中统一标准编码的文件和文件夹名称出现问题。"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -133,35 +140,6 @@ msgstr "捕捉到 %s 信号,正在保存并退出..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "保存状态时遇到致命错误"
|
||||
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "正在尝试从 %s 装取 NZB"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "保存 %s 失败"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "无法为 %s 创建临时文件"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "正在尝试设置不存在的服务器 %s 的状态"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "tempfile.mkstemp 出错"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "加载 %s 失败"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -322,6 +300,14 @@ msgstr "关键词"
|
||||
msgid "Quota spent, pausing downloading"
|
||||
msgstr "配额已耗尽,暂停下载"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "参数不正确"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "此处不允许使用 UNC 路径 \"%s\""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s 不是有效的电子邮箱地址"
|
||||
@@ -334,6 +320,21 @@ msgstr "服务器地址必填"
|
||||
msgid "%s is not a valid script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s 不是有效的八进制值"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Permissions setting of %s might deny SABnzbd access to the files and folders"
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "错误: 队列非空,无法变更文件夹。"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -354,22 +355,6 @@ msgstr "无法为 %s 创建备份文件"
|
||||
msgid "Incorrectly encoded password %s"
|
||||
msgstr "密码编码错误 %s"
|
||||
|
||||
#: sabnzbd/config.py, sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "参数不正确"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "%s is not a correct octal value"
|
||||
msgstr "%s 不是有效的八进制值"
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "此处不允许使用 UNC 路径 \"%s\""
|
||||
|
||||
#: sabnzbd/config.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "错误: 队列非空,无法变更文件夹。"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Cannot write to History database, check access rights!"
|
||||
@@ -400,10 +385,6 @@ msgstr "%s 历史信息中 stage 日志无效"
|
||||
msgid "Decoder failure: Out of memory"
|
||||
msgstr "解码器失败:内存不足"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "Unknown Error while decoding %s"
|
||||
@@ -557,8 +538,7 @@ msgid "No recipients given, no email sent"
|
||||
msgstr "未给定收件人,电子邮件未发出"
|
||||
|
||||
#. Error message - Warning message
|
||||
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
|
||||
#: sabnzbd/rss.py
|
||||
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
|
||||
msgid "Cannot read %s"
|
||||
msgstr "无法读取 %s"
|
||||
|
||||
@@ -618,6 +598,21 @@ msgstr "将 %s 移动到 %s 失败"
|
||||
msgid "Blocked attempt to create directory %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr "tempfile.mkstemp 出错"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Saving %s failed"
|
||||
msgstr "保存 %s 失败"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Loading %s failed"
|
||||
msgstr "加载 %s 失败"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
@@ -838,11 +833,6 @@ msgstr "删除 %s 失败!"
|
||||
msgid "Trying unrar with password \"%s\""
|
||||
msgstr "正在尝试 unrar,使用密码 \"%s\""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "解压失败,压缩文件需要密码"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr "正在解压"
|
||||
@@ -851,51 +841,25 @@ msgstr "正在解压"
|
||||
msgid "Unpacking failed, unable to find %s"
|
||||
msgstr "解压失败,找不到 %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: unable to find \"%s\""
|
||||
msgstr "错误: 无法找到 \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, CRC error"
|
||||
msgstr "解压失败,CRC 错误"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: CRC failed in \"%s\""
|
||||
msgstr "错误: \"%s\" CRC 失败"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, file too large for filesystem (FAT?)"
|
||||
msgstr "解压失败,文件太大文件系统不支持 (FAT?)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: File too large for filesystem (%s)"
|
||||
msgstr "错误:文件太大文件系统不支持 (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "解压失败,写入出错或磁盘已满?"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: write error (%s)"
|
||||
msgstr "错误: 写入出错 (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "解压失败,路径过长"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: path too long (%s)"
|
||||
msgstr "*错误*: 路径过长 (%s)"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "ERROR: %s"
|
||||
msgstr "错误: %s"
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr "解压失败,压缩文件需要密码"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unusable RAR file"
|
||||
@@ -922,13 +886,10 @@ msgstr ""
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "正在尝试 7zip,密码 \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
|
||||
msgstr "7ZIP 分卷组 \"%s\" 不完整,无法解压"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Could not unpack %s"
|
||||
msgstr "无法解压 %s"
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "查看日志文件"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Quick Checking"
|
||||
@@ -1007,14 +968,14 @@ msgstr ""
|
||||
msgid "Disk full"
|
||||
msgstr "磁盘空间已满"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "正在验证"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Checking extra files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "正在验证"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
@@ -1024,6 +985,10 @@ msgstr "正在检查"
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "正在尝试 SFV 验证"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "剩余"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "This server does not allow SSL on this port"
|
||||
msgstr "该服务器不允许在该端口使用 SSL"
|
||||
@@ -1140,10 +1105,10 @@ msgstr "通知脚本 \"%s\" 不存在"
|
||||
msgid "Failed to send Windows notification"
|
||||
msgstr "无法发送 Windows 通知"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "导入 %s 文件失败,来自 %s"
|
||||
msgid "Cannot create temp file for %s"
|
||||
msgstr "无法为 %s 创建临时文件"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbparser.py
|
||||
@@ -1155,6 +1120,11 @@ msgstr "加载 %s 出错,正在移除"
|
||||
msgid "Error removing %s"
|
||||
msgstr "移除 %s 时出错"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbparser.py
|
||||
msgid "Failed to import %s files from %s"
|
||||
msgstr "导入 %s 文件失败,来自 %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/nzbqueue.py
|
||||
msgid "Incompatible queuefile found, cannot proceed"
|
||||
@@ -1171,8 +1141,8 @@ msgstr "NZB 已添加到队列"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
|
||||
msgstr "无效 NZB 文件 %s,正在跳过 (原因=%s, 行=%s)"
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
|
||||
@@ -1550,11 +1520,6 @@ msgstr "更多"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "后期处理失败:%s (%s)"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "查看日志文件"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing was aborted"
|
||||
msgstr ""
|
||||
@@ -1762,6 +1727,11 @@ msgstr "未知操作: %s"
|
||||
msgid "Schedule for non-existing server %s"
|
||||
msgstr "定时任务的服务器不存在 %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "正在尝试设置不存在的服务器 %s 的状态"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3621,6 +3591,14 @@ msgid ""
|
||||
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
|
||||
msgstr "当用 HTTPS 方式连接索引和RSS源时验证证书。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SOCKS5 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server"
|
||||
msgstr "服务器"
|
||||
@@ -3864,6 +3842,17 @@ msgstr "严格"
|
||||
msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 为最高优先级,100 为最低优先级"
|
||||
|
||||
#. Server required tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"In case of connection failures, the download queue will be paused for a few "
|
||||
"minutes instead of skipping this server"
|
||||
msgstr ""
|
||||
|
||||
#. Server optional tickbox
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Optional"
|
||||
@@ -4046,6 +4035,12 @@ msgstr "已下载"
|
||||
msgid "Read All Feeds Now"
|
||||
msgstr "立即读取全部 Feed"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"If only the <em>Default</em> category is selected, notifications are enabled"
|
||||
" for jobs in all categories."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Email Notification On Job Completion"
|
||||
msgstr "任务完成 Email 通知"
|
||||
@@ -4324,7 +4319,13 @@ msgstr "索引 Categories / Groups"
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "TV 排序"
|
||||
|
||||
@@ -4352,7 +4353,8 @@ msgstr "预设"
|
||||
msgid "Example"
|
||||
msgstr "示例"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "电影排序"
|
||||
|
||||
@@ -4504,7 +4506,8 @@ msgstr "分文件夹"
|
||||
msgid "No folders"
|
||||
msgstr "不分文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "日期排序"
|
||||
|
||||
@@ -4622,10 +4625,6 @@ msgstr "主题"
|
||||
msgid "Selection"
|
||||
msgstr "选择"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "left"
|
||||
msgstr "剩余"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "剩余空间"
|
||||
@@ -5023,6 +5022,10 @@ msgstr "不可用的 NZB 文件"
|
||||
msgid "URL Fetching failed; %s"
|
||||
msgstr "URL 装取失败; %s"
|
||||
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "正在尝试从 %s 装取 NZB"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "主机名未设置。"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Ben Hecht <benjamin.hecht@me.com>, 2021
|
||||
# Simon W., 2021
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Ben Hecht <benjamin.hecht@me.com>, 2021\n"
|
||||
"Last-Translator: Simon W., 2021\n"
|
||||
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -52,7 +52,7 @@ msgid ""
|
||||
"The installer only supports Windows 8.1 and above, use the standalone legacy"
|
||||
" version to run on older Windows version."
|
||||
msgstr ""
|
||||
"Der Installer unterstützt nur Windows 8.1 und höher. Benutze die Standalone "
|
||||
"Der Installer unterstützt nur Windows 8.1 und höher. Benutze die standalone "
|
||||
"Version für ältere Windows Versionen."
|
||||
|
||||
#: builder/win/NSIS_Installer.nsi
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2011-2021 The SABnzbd-Team
|
||||
# Copyright 2007-2022 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
|
||||
@@ -1,21 +1,42 @@
|
||||
sabyenc3>=4.0.0
|
||||
cheetah3>=3.0.0
|
||||
cryptography
|
||||
feedparser>=6.0.0
|
||||
configobj
|
||||
cheroot
|
||||
cherrypy
|
||||
portend
|
||||
chardet
|
||||
notify2
|
||||
puremagic
|
||||
guessit>=3.1.0
|
||||
# Main requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
sabyenc3==4.0.2
|
||||
cheetah3==3.2.6
|
||||
cryptography==36.0.1
|
||||
cffi==1.15
|
||||
pycparser==2.21
|
||||
feedparser==6.0.8
|
||||
configobj==5.0.6
|
||||
cheroot==8.6.0
|
||||
six==1.16.0
|
||||
cherrypy==18.6.1
|
||||
jaraco.functools==3.5.0
|
||||
jaraco.collections==3.5.1
|
||||
jaraco.text==3.7.0
|
||||
jaraco.classes==3.2.1
|
||||
jaraco.context==4.1.1
|
||||
more-itertools==8.12.0
|
||||
zc.lockfile==2.0
|
||||
python-dateutil==2.8.2
|
||||
tempora==5.0.1
|
||||
pytz==2021.3
|
||||
sgmllib3k==1.0.0
|
||||
portend==3.1.0
|
||||
chardet==4.0.0
|
||||
PySocks==1.7.1
|
||||
puremagic==1.11
|
||||
guessit==3.4.3
|
||||
babelfish==0.6.0
|
||||
rebulk==3.1.0
|
||||
|
||||
# Windows system integration
|
||||
pywin32>=227; sys_platform == 'win32'
|
||||
pywin32==303; sys_platform == 'win32'
|
||||
|
||||
# macOS system calls
|
||||
pyobjc; sys_platform == 'darwin'
|
||||
pyobjc==8.1; sys_platform == 'darwin'
|
||||
|
||||
# Linux notifications
|
||||
notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
|
||||
|
||||
# Optional support for *nix tray icon.
|
||||
# Note that pygobject depends on pycairo, which requires pkg-config and cairo headers.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -18,28 +18,24 @@
|
||||
import os
|
||||
import logging
|
||||
import datetime
|
||||
import tempfile
|
||||
import pickle
|
||||
import ctypes.util
|
||||
import gzip
|
||||
import time
|
||||
import socket
|
||||
import cherrypy
|
||||
import cherrypy._cpreqbody
|
||||
import platform
|
||||
import sys
|
||||
import ssl
|
||||
from threading import Lock, Thread, Condition
|
||||
from typing import Any, AnyStr, Optional, Union
|
||||
from threading import Lock, Condition
|
||||
|
||||
##############################################################################
|
||||
# Determine platform flags
|
||||
##############################################################################
|
||||
|
||||
WIN32 = DARWIN = FOUNDATION = WIN64 = DOCKER = False
|
||||
KERNEL32 = LIBC = MACOSLIBC = None
|
||||
|
||||
if os.name == "nt":
|
||||
WIN32 = True
|
||||
WIN64 = platform.uname().machine == "AMD64"
|
||||
from sabnzbd.utils.apireg import del_connection_info
|
||||
|
||||
try:
|
||||
@@ -69,8 +65,6 @@ elif os.name == "posix":
|
||||
# Parse macOS version numbers
|
||||
if platform.system().lower() == "darwin":
|
||||
DARWIN = True
|
||||
# 12 = Sierra, 11 = ElCaptain, 10 = Yosemite, 9 = Mavericks, 8 = MountainLion
|
||||
DARWIN_VERSION = int(platform.mac_ver()[0].split(".")[1])
|
||||
MACOSLIBC = ctypes.CDLL(ctypes.util.find_library("c"), use_errno=True) # the MacOS C library
|
||||
try:
|
||||
import Foundation
|
||||
@@ -121,10 +115,6 @@ from sabnzbd.constants import (
|
||||
DEFAULT_PRIORITY,
|
||||
VALID_ARCHIVES,
|
||||
REPAIR_REQUEST,
|
||||
QUEUE_FILE_NAME,
|
||||
QUEUE_VERSION,
|
||||
QUEUE_FILE_TMPL,
|
||||
Status,
|
||||
)
|
||||
import sabnzbd.utils.ssdp
|
||||
|
||||
@@ -201,7 +191,6 @@ CMDLINE = " ".join(['"%s"' % arg for arg in sys.argv])
|
||||
__INITIALIZED__ = False
|
||||
__SHUTTING_DOWN__ = False
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Signal Handler
|
||||
##############################################################################
|
||||
@@ -247,14 +236,11 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
|
||||
# Optionally wait for "incomplete" to become online
|
||||
if cfg.wait_for_dfolder():
|
||||
wait_for_download_folder()
|
||||
filesystem.wait_for_download_folder()
|
||||
else:
|
||||
cfg.download_dir.set(cfg.download_dir(), create=True)
|
||||
cfg.download_dir.set_create(True)
|
||||
|
||||
# Set access rights for "incomplete" base folder
|
||||
filesystem.set_permissions(cfg.download_dir.get_path(), recursive=False)
|
||||
|
||||
# If dirscan_dir cannot be created, set a proper value anyway.
|
||||
# Maybe it's a network path that's temporarily missing.
|
||||
path = cfg.dirscan_dir.get_path()
|
||||
@@ -262,28 +248,29 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
filesystem.create_real_path(cfg.dirscan_dir.ident(), "", path, False)
|
||||
|
||||
# Set call backs for Config items
|
||||
cfg.cache_limit.callback(new_limit)
|
||||
cfg.cherryhost.callback(guard_restart)
|
||||
cfg.cherryport.callback(guard_restart)
|
||||
cfg.web_dir.callback(guard_restart)
|
||||
cfg.web_color.callback(guard_restart)
|
||||
cfg.username.callback(guard_restart)
|
||||
cfg.password.callback(guard_restart)
|
||||
cfg.log_dir.callback(guard_restart)
|
||||
cfg.https_port.callback(guard_restart)
|
||||
cfg.https_cert.callback(guard_restart)
|
||||
cfg.https_key.callback(guard_restart)
|
||||
cfg.enable_https.callback(guard_restart)
|
||||
cfg.top_only.callback(guard_top_only)
|
||||
cfg.pause_on_post_processing.callback(guard_pause_on_pp)
|
||||
cfg.quota_size.callback(guard_quota_size)
|
||||
cfg.quota_day.callback(guard_quota_dp)
|
||||
cfg.quota_period.callback(guard_quota_dp)
|
||||
cfg.language.callback(guard_language)
|
||||
cfg.enable_https_verification.callback(guard_https_ver)
|
||||
guard_https_ver()
|
||||
cfg.cache_limit.callback(cfg.new_limit)
|
||||
cfg.cherryhost.callback(cfg.guard_restart)
|
||||
cfg.cherryport.callback(cfg.guard_restart)
|
||||
cfg.web_dir.callback(cfg.guard_restart)
|
||||
cfg.web_color.callback(cfg.guard_restart)
|
||||
cfg.username.callback(cfg.guard_restart)
|
||||
cfg.password.callback(cfg.guard_restart)
|
||||
cfg.log_dir.callback(cfg.guard_restart)
|
||||
cfg.https_port.callback(cfg.guard_restart)
|
||||
cfg.https_cert.callback(cfg.guard_restart)
|
||||
cfg.https_key.callback(cfg.guard_restart)
|
||||
cfg.enable_https.callback(cfg.guard_restart)
|
||||
cfg.socks5_proxy_url.callback(cfg.guard_restart)
|
||||
cfg.top_only.callback(cfg.guard_top_only)
|
||||
cfg.pause_on_post_processing.callback(cfg.guard_pause_on_pp)
|
||||
cfg.quota_size.callback(cfg.guard_quota_size)
|
||||
cfg.quota_day.callback(cfg.guard_quota_dp)
|
||||
cfg.quota_period.callback(cfg.guard_quota_dp)
|
||||
cfg.language.callback(cfg.guard_language)
|
||||
cfg.enable_https_verification.callback(cfg.guard_https_ver)
|
||||
cfg.guard_https_ver()
|
||||
|
||||
check_incomplete_vs_complete()
|
||||
filesystem.check_incomplete_vs_complete()
|
||||
|
||||
# Set language files
|
||||
lang.set_locale_info("SABnzbd", DIR_LANGUAGE)
|
||||
@@ -291,7 +278,7 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
sabnzbd.api.clear_trans_cache()
|
||||
|
||||
# Set end-of-queue action
|
||||
sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False)
|
||||
sabnzbd.misc.change_queue_complete_action(cfg.queue_complete(), new=False)
|
||||
|
||||
# Convert auto-sort
|
||||
if cfg.auto_sort() == "0":
|
||||
@@ -304,7 +291,7 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
cfg.host_whitelist.set(socket.gethostname())
|
||||
|
||||
# Do repair if requested
|
||||
if check_repair_request():
|
||||
if misc.check_repair_request():
|
||||
repair = 2
|
||||
pause_downloader = True
|
||||
|
||||
@@ -478,95 +465,6 @@ def trigger_restart(timeout=None):
|
||||
notify_shutdown_loop()
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Misc Wrappers
|
||||
##############################################################################
|
||||
def new_limit():
|
||||
"""Callback for article cache changes"""
|
||||
sabnzbd.ArticleCache.new_limit(cfg.cache_limit.get_int())
|
||||
|
||||
|
||||
def guard_restart():
|
||||
"""Callback for config options requiring a restart"""
|
||||
sabnzbd.RESTART_REQ = True
|
||||
|
||||
|
||||
def guard_top_only():
|
||||
"""Callback for change of top_only option"""
|
||||
sabnzbd.NzbQueue.set_top_only(cfg.top_only())
|
||||
|
||||
|
||||
def guard_pause_on_pp():
|
||||
"""Callback for change of pause-download-on-pp"""
|
||||
if cfg.pause_on_post_processing():
|
||||
pass # Not safe to idle downloader, because we don't know
|
||||
# if post-processing is active now
|
||||
else:
|
||||
sabnzbd.Downloader.resume_from_postproc()
|
||||
|
||||
|
||||
def guard_quota_size():
|
||||
"""Callback for change of quota_size"""
|
||||
sabnzbd.BPSMeter.change_quota()
|
||||
|
||||
|
||||
def guard_quota_dp():
|
||||
"""Callback for change of quota_day or quota_period"""
|
||||
sabnzbd.Scheduler.restart()
|
||||
|
||||
|
||||
def guard_language():
|
||||
"""Callback for change of the interface language"""
|
||||
sabnzbd.lang.set_language(cfg.language())
|
||||
sabnzbd.api.clear_trans_cache()
|
||||
|
||||
|
||||
def set_https_verification(value):
|
||||
"""Set HTTPS-verification state while returning current setting
|
||||
False = disable verification
|
||||
"""
|
||||
prev = ssl._create_default_https_context == ssl.create_default_context
|
||||
if value:
|
||||
ssl._create_default_https_context = ssl.create_default_context
|
||||
else:
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
return prev
|
||||
|
||||
|
||||
def guard_https_ver():
|
||||
"""Callback for change of https verification"""
|
||||
set_https_verification(cfg.enable_https_verification())
|
||||
|
||||
|
||||
def add_url(url, pp=None, script=None, cat=None, priority=None, nzbname=None, password=None):
|
||||
"""Add NZB based on a URL, attributes optional"""
|
||||
if "http" not in url:
|
||||
return
|
||||
if not pp or pp == "-1":
|
||||
pp = None
|
||||
if script and script.lower() == "default":
|
||||
script = None
|
||||
if cat and cat.lower() == "default":
|
||||
cat = None
|
||||
logging.info("Fetching %s", url)
|
||||
|
||||
# Add feed name if it came from RSS
|
||||
msg = T("Trying to fetch NZB from %s") % url
|
||||
if nzbname:
|
||||
msg = "%s - %s" % (nzbname, msg)
|
||||
|
||||
# Generate the placeholder
|
||||
future_nzo = sabnzbd.NzbQueue.generate_future(msg, pp, script, cat, url=url, priority=priority, nzbname=nzbname)
|
||||
|
||||
# Set password
|
||||
if not future_nzo.password:
|
||||
future_nzo.password = password
|
||||
|
||||
# Get it!
|
||||
sabnzbd.URLGrabber.add(url, future_nzo)
|
||||
return future_nzo.nzo_id
|
||||
|
||||
|
||||
def save_state():
|
||||
"""Save all internal bookkeeping to disk"""
|
||||
config.save_config()
|
||||
@@ -579,418 +477,6 @@ def save_state():
|
||||
sabnzbd.RSSReader.save()
|
||||
|
||||
|
||||
def pause_all():
|
||||
"""Pause all activities than cause disk access"""
|
||||
sabnzbd.PAUSED_ALL = True
|
||||
sabnzbd.Downloader.pause()
|
||||
logging.debug("PAUSED_ALL active")
|
||||
|
||||
|
||||
def unpause_all():
|
||||
"""Resume all activities"""
|
||||
sabnzbd.PAUSED_ALL = False
|
||||
sabnzbd.Downloader.resume()
|
||||
logging.debug("PAUSED_ALL inactive")
|
||||
|
||||
|
||||
##############################################################################
|
||||
# NZB Saving Methods
|
||||
##############################################################################
|
||||
|
||||
|
||||
def backup_exists(filename: str) -> bool:
|
||||
"""Return True if backup exists and no_dupes is set"""
|
||||
path = cfg.nzb_backup_dir.get_path()
|
||||
return path and os.path.exists(os.path.join(path, filename + ".gz"))
|
||||
|
||||
|
||||
def backup_nzb(filename: str, data: AnyStr):
|
||||
"""Backup NZB file"""
|
||||
path = cfg.nzb_backup_dir.get_path()
|
||||
if path:
|
||||
save_compressed(path, filename, data)
|
||||
|
||||
|
||||
def save_compressed(folder: str, filename: str, data: AnyStr):
|
||||
"""Save compressed NZB file in folder"""
|
||||
if filename.endswith(".nzb"):
|
||||
filename += ".gz"
|
||||
else:
|
||||
filename += ".nzb.gz"
|
||||
logging.info("Backing up %s", os.path.join(folder, filename))
|
||||
try:
|
||||
# Have to get around the path being put inside the tgz
|
||||
with open(os.path.join(folder, filename), "wb") as tgz_file:
|
||||
f = gzip.GzipFile(filename, fileobj=tgz_file, mode="wb")
|
||||
f.write(encoding.utob(data))
|
||||
f.flush()
|
||||
f.close()
|
||||
except:
|
||||
logging.error(T("Saving %s failed"), os.path.join(folder, filename))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Unsynchronized methods
|
||||
##############################################################################
|
||||
|
||||
|
||||
def add_nzbfile(
|
||||
nzbfile: Union[str, cherrypy._cpreqbody.Part],
|
||||
pp: Optional[Union[int, str]] = None,
|
||||
script: Optional[str] = None,
|
||||
cat: Optional[str] = None,
|
||||
catdir: Optional[str] = None,
|
||||
priority: Optional[Union[int, str]] = DEFAULT_PRIORITY,
|
||||
nzbname: Optional[str] = None,
|
||||
nzo_info=None,
|
||||
url: Optional[str] = None,
|
||||
keep: Optional[bool] = None,
|
||||
reuse: Optional[str] = None,
|
||||
password: Optional[str] = None,
|
||||
nzo_id: Optional[str] = None,
|
||||
):
|
||||
"""Add file, either a single NZB-file or an archive.
|
||||
All other parameters are passed to the NZO-creation.
|
||||
"""
|
||||
if pp == "-1":
|
||||
pp = None
|
||||
if script and (script.lower() == "default" or not filesystem.is_valid_script(script)):
|
||||
script = None
|
||||
if cat and cat.lower() == "default":
|
||||
cat = None
|
||||
|
||||
if isinstance(nzbfile, str):
|
||||
# File coming from queue repair or local file-path
|
||||
path = nzbfile
|
||||
filename = os.path.basename(path)
|
||||
keep_default = True
|
||||
if not sabnzbd.WIN32:
|
||||
# If windows client sends file to Unix server backslashes may
|
||||
# be included, so convert these
|
||||
path = path.replace("\\", "/")
|
||||
logging.info("Attempting to add %s [%s]", filename, path)
|
||||
else:
|
||||
# File from file-upload object
|
||||
# CherryPy mangles unicode-filenames: https://github.com/cherrypy/cherrypy/issues/1766
|
||||
filename = encoding.correct_unknown_encoding(nzbfile.filename)
|
||||
logging.info("Attempting to add %s", filename)
|
||||
keep_default = False
|
||||
try:
|
||||
# We have to create a copy, because we can't re-use the CherryPy temp-file
|
||||
# Just to be sure we add the extension to detect file type later on
|
||||
nzb_temp_file, path = tempfile.mkstemp(suffix=filesystem.get_ext(filename))
|
||||
os.write(nzb_temp_file, nzbfile.file.read())
|
||||
os.close(nzb_temp_file)
|
||||
except OSError:
|
||||
logging.error(T("Cannot create temp file for %s"), filename)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
return None
|
||||
|
||||
# Externally defined if we should keep the file?
|
||||
if keep is None:
|
||||
keep = keep_default
|
||||
|
||||
if filesystem.get_ext(filename) in VALID_ARCHIVES:
|
||||
return nzbparser.process_nzb_archive_file(
|
||||
filename,
|
||||
path=path,
|
||||
pp=pp,
|
||||
script=script,
|
||||
cat=cat,
|
||||
catdir=catdir,
|
||||
priority=priority,
|
||||
nzbname=nzbname,
|
||||
keep=keep,
|
||||
reuse=reuse,
|
||||
nzo_info=nzo_info,
|
||||
url=url,
|
||||
password=password,
|
||||
nzo_id=nzo_id,
|
||||
)
|
||||
else:
|
||||
return nzbparser.process_single_nzb(
|
||||
filename,
|
||||
path=path,
|
||||
pp=pp,
|
||||
script=script,
|
||||
cat=cat,
|
||||
catdir=catdir,
|
||||
priority=priority,
|
||||
nzbname=nzbname,
|
||||
keep=keep,
|
||||
reuse=reuse,
|
||||
nzo_info=nzo_info,
|
||||
url=url,
|
||||
password=password,
|
||||
nzo_id=nzo_id,
|
||||
)
|
||||
|
||||
|
||||
def enable_server(server):
|
||||
"""Enable server (scheduler only)"""
|
||||
try:
|
||||
config.get_config("servers", server).enable.set(1)
|
||||
except:
|
||||
logging.warning(T("Trying to set status of non-existing server %s"), server)
|
||||
return
|
||||
config.save_config()
|
||||
sabnzbd.Downloader.update_server(server, server)
|
||||
|
||||
|
||||
def disable_server(server):
|
||||
"""Disable server (scheduler only)"""
|
||||
try:
|
||||
config.get_config("servers", server).enable.set(0)
|
||||
except:
|
||||
logging.warning(T("Trying to set status of non-existing server %s"), server)
|
||||
return
|
||||
config.save_config()
|
||||
sabnzbd.Downloader.update_server(server, server)
|
||||
|
||||
|
||||
def system_shutdown():
|
||||
"""Shutdown system after halting download and saving bookkeeping"""
|
||||
logging.info("Performing system shutdown")
|
||||
|
||||
Thread(target=halt).start()
|
||||
while __INITIALIZED__:
|
||||
time.sleep(1.0)
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
powersup.win_shutdown()
|
||||
elif DARWIN:
|
||||
powersup.osx_shutdown()
|
||||
else:
|
||||
powersup.linux_shutdown()
|
||||
|
||||
|
||||
def system_hibernate():
|
||||
"""Hibernate system"""
|
||||
logging.info("Performing system hybernation")
|
||||
if sabnzbd.WIN32:
|
||||
powersup.win_hibernate()
|
||||
elif DARWIN:
|
||||
powersup.osx_hibernate()
|
||||
else:
|
||||
powersup.linux_hibernate()
|
||||
|
||||
|
||||
def system_standby():
|
||||
"""Standby system"""
|
||||
logging.info("Performing system standby")
|
||||
if sabnzbd.WIN32:
|
||||
powersup.win_standby()
|
||||
elif DARWIN:
|
||||
powersup.osx_standby()
|
||||
else:
|
||||
powersup.linux_standby()
|
||||
|
||||
|
||||
def restart_program():
|
||||
"""Restart program (used by scheduler)"""
|
||||
logging.info("Scheduled restart request")
|
||||
# Just set the stop flag, because stopping CherryPy from
|
||||
# the scheduler is not reliable
|
||||
sabnzbd.TRIGGER_RESTART = True
|
||||
|
||||
|
||||
def change_queue_complete_action(action, new=True):
|
||||
"""Action or script to be performed once the queue has been completed
|
||||
Scripts are prefixed with 'script_'
|
||||
When "new" is False, check whether non-script actions are acceptable
|
||||
"""
|
||||
_action = None
|
||||
_argument = None
|
||||
if action.startswith("script_") and filesystem.is_valid_script(action.replace("script_", "", 1)):
|
||||
# all scripts are labeled script_xxx
|
||||
_action = run_script
|
||||
_argument = action.replace("script_", "", 1)
|
||||
elif new or cfg.queue_complete_pers():
|
||||
if action == "shutdown_pc":
|
||||
_action = system_shutdown
|
||||
elif action == "hibernate_pc":
|
||||
_action = system_hibernate
|
||||
elif action == "standby_pc":
|
||||
_action = system_standby
|
||||
elif action == "shutdown_program":
|
||||
_action = shutdown_program
|
||||
else:
|
||||
action = None
|
||||
else:
|
||||
action = None
|
||||
|
||||
if new:
|
||||
cfg.queue_complete.set(action or "")
|
||||
config.save_config()
|
||||
|
||||
sabnzbd.QUEUECOMPLETE = action
|
||||
sabnzbd.QUEUECOMPLETEACTION = _action
|
||||
sabnzbd.QUEUECOMPLETEARG = _argument
|
||||
|
||||
|
||||
def run_script(script):
|
||||
"""Run a user script (queue complete only)"""
|
||||
script_path = filesystem.make_script_path(script)
|
||||
if script_path:
|
||||
try:
|
||||
script_output = misc.run_command([script_path])
|
||||
logging.info("Output of queue-complete script %s: \n%s", script, script_output)
|
||||
except:
|
||||
logging.info("Failed queue-complete script %s, Traceback: ", script, exc_info=True)
|
||||
|
||||
|
||||
def keep_awake():
|
||||
"""If we still have work to do, keep Windows/macOS system awake"""
|
||||
if KERNEL32 or FOUNDATION:
|
||||
if sabnzbd.cfg.keep_awake():
|
||||
ES_CONTINUOUS = 0x80000000
|
||||
ES_SYSTEM_REQUIRED = 0x00000001
|
||||
if (not sabnzbd.Downloader.is_paused() and not sabnzbd.NzbQueue.is_empty()) or (
|
||||
not sabnzbd.PostProcessor.paused and not sabnzbd.PostProcessor.empty()
|
||||
):
|
||||
if KERNEL32:
|
||||
# Set ES_SYSTEM_REQUIRED until the next call
|
||||
KERNEL32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)
|
||||
else:
|
||||
sleepless.keep_awake("SABnzbd is busy downloading and/or post-processing")
|
||||
else:
|
||||
if KERNEL32:
|
||||
# Allow the regular state again
|
||||
KERNEL32.SetThreadExecutionState(ES_CONTINUOUS)
|
||||
else:
|
||||
sleepless.allow_sleep()
|
||||
|
||||
|
||||
################################################################################
|
||||
# Data IO #
|
||||
################################################################################
|
||||
|
||||
|
||||
def get_new_id(prefix, folder, check_list=None):
|
||||
"""Return unique prefixed admin identifier within folder
|
||||
optionally making sure that id is not in the check_list.
|
||||
"""
|
||||
for n in range(100):
|
||||
try:
|
||||
if not os.path.exists(folder):
|
||||
os.makedirs(folder)
|
||||
fd, path = tempfile.mkstemp("", "SABnzbd_%s_" % prefix, folder)
|
||||
os.close(fd)
|
||||
head, tail = os.path.split(path)
|
||||
if not check_list or tail not in check_list:
|
||||
return tail
|
||||
except:
|
||||
logging.error(T("Failure in tempfile.mkstemp"))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
break
|
||||
# Cannot create unique id, crash the process
|
||||
raise IOError
|
||||
|
||||
|
||||
def save_data(data, _id, path, do_pickle=True, silent=False):
|
||||
"""Save data to a diskfile"""
|
||||
if not silent:
|
||||
logging.debug("[%s] Saving data for %s in %s", misc.caller_name(), _id, path)
|
||||
path = os.path.join(path, _id)
|
||||
|
||||
# We try 3 times, to avoid any dict or access problems
|
||||
for t in range(3):
|
||||
try:
|
||||
with open(path, "wb") as data_file:
|
||||
if do_pickle:
|
||||
pickle.dump(data, data_file, protocol=pickle.HIGHEST_PROTOCOL)
|
||||
else:
|
||||
data_file.write(data)
|
||||
break
|
||||
except:
|
||||
if silent:
|
||||
# This can happen, probably a removed folder
|
||||
pass
|
||||
elif t == 2:
|
||||
logging.error(T("Saving %s failed"), path)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
else:
|
||||
# Wait a tiny bit before trying again
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
def load_data(data_id, path, remove=True, do_pickle=True, silent=False):
|
||||
"""Read data from disk file"""
|
||||
path = os.path.join(path, data_id)
|
||||
|
||||
if not os.path.exists(path):
|
||||
logging.info("[%s] %s missing", misc.caller_name(), path)
|
||||
return None
|
||||
|
||||
if not silent:
|
||||
logging.debug("[%s] Loading data for %s from %s", misc.caller_name(), data_id, path)
|
||||
|
||||
try:
|
||||
with open(path, "rb") as data_file:
|
||||
if do_pickle:
|
||||
try:
|
||||
data = pickle.load(data_file, encoding=sabnzbd.encoding.CODEPAGE)
|
||||
except UnicodeDecodeError:
|
||||
# Could be Python 2 data that we can load using old encoding
|
||||
data = pickle.load(data_file, encoding="latin1")
|
||||
else:
|
||||
data = data_file.read()
|
||||
|
||||
if remove:
|
||||
filesystem.remove_file(path)
|
||||
except:
|
||||
logging.error(T("Loading %s failed"), path)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
return None
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def remove_data(_id: str, path: str):
|
||||
"""Remove admin file"""
|
||||
path = os.path.join(path, _id)
|
||||
try:
|
||||
if os.path.exists(path):
|
||||
filesystem.remove_file(path)
|
||||
except:
|
||||
logging.debug("Failed to remove %s", path)
|
||||
|
||||
|
||||
def save_admin(data: Any, data_id: str):
|
||||
"""Save data in admin folder in specified format"""
|
||||
logging.debug("[%s] Saving data for %s", misc.caller_name(), data_id)
|
||||
save_data(data, data_id, cfg.admin_dir.get_path())
|
||||
|
||||
|
||||
def load_admin(data_id: str, remove=False, silent=False) -> Any:
|
||||
"""Read data in admin folder in specified format"""
|
||||
logging.debug("[%s] Loading data for %s", misc.caller_name(), data_id)
|
||||
return load_data(data_id, cfg.admin_dir.get_path(), remove=remove, silent=silent)
|
||||
|
||||
|
||||
def request_repair():
|
||||
"""Request a full repair on next restart"""
|
||||
path = os.path.join(cfg.admin_dir.get_path(), REPAIR_REQUEST)
|
||||
try:
|
||||
with open(path, "w") as f:
|
||||
f.write("\n")
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def check_repair_request():
|
||||
"""Return True if repair request found, remove afterwards"""
|
||||
path = os.path.join(cfg.admin_dir.get_path(), REPAIR_REQUEST)
|
||||
if os.path.exists(path):
|
||||
try:
|
||||
filesystem.remove_file(path)
|
||||
except:
|
||||
pass
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def check_all_tasks():
|
||||
"""Check every task and restart safe ones, else restart program
|
||||
Return True when everything is under control
|
||||
@@ -1059,87 +545,3 @@ def pid_file(pid_path=None, pid_file=None, port=0):
|
||||
filesystem.remove_file(sabnzbd.DIR_PID)
|
||||
except:
|
||||
logging.warning(T("Cannot access PID file %s"), sabnzbd.DIR_PID)
|
||||
|
||||
|
||||
def check_incomplete_vs_complete():
|
||||
"""Make sure download_dir and complete_dir are not identical
|
||||
or that download_dir is not a subfolder of complete_dir"""
|
||||
complete = cfg.complete_dir.get_path()
|
||||
if filesystem.same_file(cfg.download_dir.get_path(), complete):
|
||||
if filesystem.real_path("X", cfg.download_dir()) == filesystem.long_path(cfg.download_dir()):
|
||||
# Abs path, so set download_dir as an abs path inside the complete_dir
|
||||
cfg.download_dir.set(os.path.join(complete, "incomplete"))
|
||||
else:
|
||||
cfg.download_dir.set("incomplete")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def wait_for_download_folder():
|
||||
"""Wait for download folder to become available"""
|
||||
while not cfg.download_dir.test_path():
|
||||
logging.debug('Waiting for "incomplete" folder')
|
||||
time.sleep(2.0)
|
||||
|
||||
|
||||
def test_ipv6():
|
||||
"""Check if external IPv6 addresses are reachable"""
|
||||
if not cfg.selftest_host():
|
||||
# User disabled the test, assume active IPv6
|
||||
return True
|
||||
try:
|
||||
info = sabnzbd.getipaddress.addresslookup6(cfg.selftest_host())
|
||||
except:
|
||||
logging.debug(
|
||||
"Test IPv6: Disabling IPv6, because it looks like it's not available. Reason: %s", sys.exc_info()[0]
|
||||
)
|
||||
return False
|
||||
|
||||
try:
|
||||
af, socktype, proto, canonname, sa = info[0]
|
||||
with socket.socket(af, socktype, proto) as sock:
|
||||
sock.settimeout(2) # 2 second timeout
|
||||
sock.connect(sa[0:2])
|
||||
logging.debug("Test IPv6: IPv6 test successful. Enabling IPv6")
|
||||
return True
|
||||
except socket.error:
|
||||
logging.debug("Test IPv6: Cannot reach IPv6 test host. Disabling IPv6")
|
||||
return False
|
||||
except:
|
||||
logging.debug("Test IPv6: Problem during IPv6 connect. Disabling IPv6. Reason: %s", sys.exc_info()[0])
|
||||
return False
|
||||
|
||||
|
||||
def test_cert_checking():
|
||||
"""Test quality of certificate validation"""
|
||||
# User disabled the test, assume proper SSL certificates
|
||||
if not cfg.selftest_host():
|
||||
return True
|
||||
|
||||
# Try a connection to our test-host
|
||||
try:
|
||||
ctx = ssl.create_default_context()
|
||||
base_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
ssl_sock = ctx.wrap_socket(base_sock, server_hostname=cfg.selftest_host())
|
||||
ssl_sock.settimeout(2.0)
|
||||
ssl_sock.connect((cfg.selftest_host(), 443))
|
||||
ssl_sock.close()
|
||||
return True
|
||||
except (socket.gaierror, socket.timeout):
|
||||
# Non-SSL related error.
|
||||
# We now assume that certificates work instead of forcing
|
||||
# lower quality just because some (temporary) internet problem
|
||||
logging.info("Could not determine system certificate validation quality due to connection problems")
|
||||
return True
|
||||
except:
|
||||
# Seems something is still wrong
|
||||
sabnzbd.set_https_verification(False)
|
||||
return False
|
||||
|
||||
|
||||
def history_updated():
|
||||
"""To make sure we always have a fresh history"""
|
||||
sabnzbd.LAST_HISTORY_UPDATE += 1
|
||||
# Never go over the limit
|
||||
if sabnzbd.LAST_HISTORY_UPDATE + 1 >= sys.maxsize:
|
||||
sabnzbd.LAST_HISTORY_UPDATE = 1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -59,15 +59,14 @@ from sabnzbd.misc import (
|
||||
create_https_certificates,
|
||||
calc_age,
|
||||
opts_to_pp,
|
||||
format_time_left,
|
||||
)
|
||||
from sabnzbd.filesystem import diskspace, get_ext, clip_path, remove_all, list_scripts
|
||||
from sabnzbd.encoding import xml_name, utob
|
||||
from sabnzbd.utils.servertests import test_nntp_server_dict
|
||||
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, addresslookup
|
||||
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, addresslookup, active_socks5_proxy
|
||||
from sabnzbd.database import build_history_info, unpack_history_info, HistoryDB
|
||||
from sabnzbd.lang import is_rtl
|
||||
import sabnzbd.notifier
|
||||
import sabnzbd.rss
|
||||
import sabnzbd.emailer
|
||||
import sabnzbd.sorting
|
||||
|
||||
@@ -195,7 +194,7 @@ def _api_queue_rename(value, kwargs):
|
||||
|
||||
def _api_queue_change_complete_action(value, kwargs):
|
||||
"""API: accepts value(=action)"""
|
||||
sabnzbd.change_queue_complete_action(value)
|
||||
sabnzbd.misc.change_queue_complete_action(value)
|
||||
return report()
|
||||
|
||||
|
||||
@@ -307,7 +306,7 @@ def _api_options(name, kwargs):
|
||||
"multipar": sabnzbd.newsunpack.MULTIPAR_COMMAND,
|
||||
"rar": sabnzbd.newsunpack.RAR_COMMAND,
|
||||
"zip": sabnzbd.newsunpack.ZIP_COMMAND,
|
||||
"7zip": sabnzbd.newsunpack.SEVEN_COMMAND,
|
||||
"7zip": sabnzbd.newsunpack.SEVENZIP_COMMAND,
|
||||
"nice": sabnzbd.newsunpack.NICE_COMMAND,
|
||||
"ionice": sabnzbd.newsunpack.IONICE_COMMAND,
|
||||
},
|
||||
@@ -331,7 +330,7 @@ def _api_addfile(name, kwargs):
|
||||
# Indexer category, so do mapping
|
||||
cat = cat_convert(xcat)
|
||||
# Add the NZB-file
|
||||
res, nzo_ids = sabnzbd.add_nzbfile(
|
||||
res, nzo_ids = sabnzbd.nzbparser.add_nzbfile(
|
||||
name,
|
||||
pp=kwargs.get("pp"),
|
||||
script=kwargs.get("script"),
|
||||
@@ -386,7 +385,7 @@ def _api_addlocalfile(name, kwargs):
|
||||
password = kwargs.get("password")
|
||||
|
||||
if get_ext(name) in VALID_ARCHIVES + VALID_NZB_FILES:
|
||||
res, nzo_ids = sabnzbd.add_nzbfile(
|
||||
res, nzo_ids = sabnzbd.nzbparser.add_nzbfile(
|
||||
name,
|
||||
pp=pp,
|
||||
script=script,
|
||||
@@ -553,7 +552,7 @@ def _api_history(name, kwargs):
|
||||
history_db.remove_failed(search)
|
||||
if special in ("all", "completed"):
|
||||
history_db.remove_completed(search)
|
||||
sabnzbd.history_updated()
|
||||
sabnzbd.misc.history_updated()
|
||||
return report()
|
||||
elif value:
|
||||
jobs = value.split(",")
|
||||
@@ -565,7 +564,7 @@ def _api_history(name, kwargs):
|
||||
history_db = sabnzbd.get_db_connection()
|
||||
remove_all(history_db.get_path(job), recursive=True)
|
||||
history_db.remove_history(job)
|
||||
sabnzbd.history_updated()
|
||||
sabnzbd.misc.history_updated()
|
||||
return report()
|
||||
else:
|
||||
return report(_MSG_NO_VALUE)
|
||||
@@ -634,7 +633,7 @@ def _api_addurl(name, kwargs):
|
||||
password = kwargs.get("password", "")
|
||||
|
||||
if name:
|
||||
nzo_id = sabnzbd.add_url(name, pp, script, cat, priority, nzbname, password)
|
||||
nzo_id = sabnzbd.urlgrabber.add_url(name, pp, script, cat, priority, nzbname, password)
|
||||
# Reporting a list of NZO's, for compatibility with other add-methods
|
||||
return report(keyword="", data={"status": True, "nzo_ids": [nzo_id]})
|
||||
else:
|
||||
@@ -650,7 +649,7 @@ def _api_pause(name, kwargs):
|
||||
|
||||
def _api_resume(name, kwargs):
|
||||
sabnzbd.Scheduler.plan_resume(0)
|
||||
sabnzbd.unpause_all()
|
||||
sabnzbd.downloader.unpause_all()
|
||||
return report()
|
||||
|
||||
|
||||
@@ -753,7 +752,7 @@ def _api_restart(name, kwargs):
|
||||
|
||||
def _api_restart_repair(name, kwargs):
|
||||
logging.info("Queue repair requested by API")
|
||||
sabnzbd.request_repair()
|
||||
sabnzbd.misc.request_repair()
|
||||
# Do the shutdown async to still send goodbye to browser
|
||||
Thread(target=sabnzbd.trigger_restart, kwargs={"timeout": 1}).start()
|
||||
return report()
|
||||
@@ -1336,6 +1335,7 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
|
||||
|
||||
# Dashboard: Connection information
|
||||
if not int_conv(skip_dashboard):
|
||||
info["active_socks5_proxy"] = active_socks5_proxy()
|
||||
info["localipv4"] = localipv4()
|
||||
info["publicipv4"] = publicipv4()
|
||||
info["ipv6"] = ipv6()
|
||||
@@ -1580,7 +1580,7 @@ def retry_job(job, new_nzb=None, password=None):
|
||||
history_db = sabnzbd.get_db_connection()
|
||||
futuretype, url, pp, script, cat = history_db.get_other(job)
|
||||
if futuretype:
|
||||
nzo_id = sabnzbd.add_url(url, pp, script, cat)
|
||||
nzo_id = sabnzbd.urlgrabber.add_url(url, pp, script, cat)
|
||||
else:
|
||||
path = history_db.get_path(job)
|
||||
nzo_id = sabnzbd.NzbQueue.repair_job(path, new_nzb, password)
|
||||
@@ -1865,26 +1865,10 @@ def get_active_history(queue, items):
|
||||
|
||||
|
||||
def calc_timeleft(bytesleft, bps):
|
||||
"""Calculate the time left in the format HH:MM:SS"""
|
||||
try:
|
||||
if bytesleft <= 0:
|
||||
return "0:00:00"
|
||||
totalseconds = int(bytesleft / bps)
|
||||
minutes, seconds = divmod(totalseconds, 60)
|
||||
hours, minutes = divmod(minutes, 60)
|
||||
days, hours = divmod(hours, 24)
|
||||
if minutes < 10:
|
||||
minutes = "0%s" % minutes
|
||||
if seconds < 10:
|
||||
seconds = "0%s" % seconds
|
||||
if days > 0:
|
||||
if hours < 10:
|
||||
hours = "0%s" % hours
|
||||
return "%s:%s:%s:%s" % (days, hours, minutes, seconds)
|
||||
else:
|
||||
return "%s:%s:%s" % (hours, minutes, seconds)
|
||||
except:
|
||||
"""Based on bytesleft and bps calculate the time left in the format HH:MM:SS"""
|
||||
if bytesleft <= 0 or bps <= 0:
|
||||
return "0:00:00"
|
||||
return format_time_left(int(bytesleft / bps))
|
||||
|
||||
|
||||
def list_cats(default=True):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -85,9 +85,8 @@ class ArticleCache:
|
||||
def save_article(self, article: Article, data: bytes):
|
||||
"""Save article in cache, either memory or disk"""
|
||||
nzo = article.nzf.nzo
|
||||
if nzo.is_gone():
|
||||
# Do not discard this article because the
|
||||
# file might still be processed at this moment!!
|
||||
# Skip if already post-processing or fully finished
|
||||
if nzo.pp_or_finished:
|
||||
return
|
||||
|
||||
# Register article for bookkeeping in case the job is deleted
|
||||
@@ -129,7 +128,9 @@ class ArticleCache:
|
||||
logging.debug("Failed to load %s from cache, probably already deleted", article)
|
||||
return data
|
||||
elif article.art_id:
|
||||
data = sabnzbd.load_data(article.art_id, nzo.admin_path, remove=True, do_pickle=False, silent=True)
|
||||
data = sabnzbd.filesystem.load_data(
|
||||
article.art_id, nzo.admin_path, remove=True, do_pickle=False, silent=True
|
||||
)
|
||||
nzo.remove_saved_article(article)
|
||||
return data
|
||||
|
||||
@@ -156,15 +157,12 @@ class ArticleCache:
|
||||
# Could fail if already deleted by flush_articles or load_data
|
||||
logging.debug("Failed to flush %s from cache, probably already deleted or written to disk", article)
|
||||
elif article.art_id:
|
||||
sabnzbd.remove_data(article.art_id, article.nzf.nzo.admin_path)
|
||||
sabnzbd.filesystem.remove_data(article.art_id, article.nzf.nzo.admin_path)
|
||||
|
||||
@staticmethod
|
||||
def __flush_article_to_disk(article: Article, data):
|
||||
nzo = article.nzf.nzo
|
||||
if nzo.is_gone():
|
||||
# Don't store deleted jobs
|
||||
return
|
||||
|
||||
# Save data, but don't complain when destination folder is missing
|
||||
# because this flush may come after completion of the NZO.
|
||||
sabnzbd.save_data(data, article.get_art_id(), nzo.admin_path, do_pickle=False, silent=True)
|
||||
sabnzbd.filesystem.save_data(
|
||||
data, article.get_art_id(), article.nzf.nzo.admin_path, do_pickle=False, silent=True
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -24,8 +24,8 @@ import queue
|
||||
import logging
|
||||
import re
|
||||
from threading import Thread
|
||||
from time import sleep
|
||||
import hashlib
|
||||
import ctypes
|
||||
from typing import Tuple, Optional, List
|
||||
|
||||
import sabnzbd
|
||||
@@ -41,7 +41,6 @@ from sabnzbd.filesystem import (
|
||||
from sabnzbd.constants import Status, GIGI, MAX_ASSEMBLER_QUEUE
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.nzbstuff import NzbObject, NzbFile
|
||||
import sabnzbd.downloader
|
||||
import sabnzbd.par2file as par2file
|
||||
import sabnzbd.utils.rarfile as rarfile
|
||||
|
||||
@@ -106,99 +105,106 @@ class Assembler(Thread):
|
||||
filepath = nzf.prepare_filepath()
|
||||
|
||||
if filepath:
|
||||
logging.debug("Decoding part of %s", filepath)
|
||||
try:
|
||||
logging.debug("Decoding part of %s", filepath)
|
||||
self.assemble(nzf, file_done)
|
||||
|
||||
# Continue after partly written data
|
||||
if not file_done:
|
||||
continue
|
||||
|
||||
# Clean-up admin data
|
||||
logging.info("Decoding finished %s", filepath)
|
||||
nzf.remove_admin()
|
||||
|
||||
# Do rar-related processing
|
||||
if rarfile.is_rarfile(filepath):
|
||||
# Encryption and unwanted extension detection
|
||||
rar_encrypted, unwanted_file = check_encrypted_and_unwanted_files(nzo, filepath)
|
||||
if rar_encrypted:
|
||||
if cfg.pause_on_pwrar() == 1:
|
||||
logging.warning(
|
||||
T(
|
||||
'Paused job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
|
||||
),
|
||||
nzo.final_name,
|
||||
)
|
||||
nzo.pause()
|
||||
else:
|
||||
logging.warning(
|
||||
T(
|
||||
'Aborted job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
|
||||
),
|
||||
nzo.final_name,
|
||||
)
|
||||
nzo.fail_msg = T("Aborted, encryption detected")
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
if unwanted_file:
|
||||
# Don't repeat the warning after a user override of an unwanted extension pause
|
||||
if nzo.unwanted_ext == 0:
|
||||
logging.warning(
|
||||
T('In "%s" unwanted extension in RAR file. Unwanted file is %s '),
|
||||
nzo.final_name,
|
||||
unwanted_file,
|
||||
)
|
||||
logging.debug(T("Unwanted extension is in rar file %s"), filepath)
|
||||
if cfg.action_on_unwanted_extensions() == 1 and nzo.unwanted_ext == 0:
|
||||
logging.debug("Unwanted extension ... pausing")
|
||||
nzo.unwanted_ext = 1
|
||||
nzo.pause()
|
||||
if cfg.action_on_unwanted_extensions() == 2:
|
||||
logging.debug("Unwanted extension ... aborting")
|
||||
nzo.fail_msg = T("Aborted, unwanted extension detected")
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
# Add to direct unpack
|
||||
nzo.add_to_direct_unpacker(nzf)
|
||||
|
||||
elif par2file.is_parfile(filepath):
|
||||
# Parse par2 files, cloaked or not
|
||||
nzo.handle_par2(nzf, filepath)
|
||||
|
||||
filter_output, reason = nzo_filtered_by_rating(nzo)
|
||||
if filter_output == 1:
|
||||
logging.warning(
|
||||
T('Paused job "%s" because of rating (%s)'),
|
||||
nzo.final_name,
|
||||
reason,
|
||||
)
|
||||
nzo.pause()
|
||||
elif filter_output == 2:
|
||||
logging.warning(
|
||||
T('Aborted job "%s" because of rating (%s)'),
|
||||
nzo.final_name,
|
||||
reason,
|
||||
)
|
||||
nzo.fail_msg = T("Aborted, rating filter matched (%s)") % reason
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
except IOError as err:
|
||||
# If job was deleted or in active post-processing, ignore error
|
||||
if not nzo.deleted and not nzo.is_gone() and not nzo.pp_active:
|
||||
# If job was deleted/finished or in active post-processing, ignore error
|
||||
if not nzo.pp_or_finished:
|
||||
# 28 == disk full => pause downloader
|
||||
if err.errno == 28:
|
||||
logging.error(T("Disk full! Forcing Pause"))
|
||||
else:
|
||||
logging.error(T("Disk error on creating file %s"), clip_path(filepath))
|
||||
# Log traceback
|
||||
if sabnzbd.WIN32:
|
||||
logging.info(
|
||||
"Winerror: %s - %s",
|
||||
err.winerror,
|
||||
hex(ctypes.windll.ntdll.RtlGetLastNtStatus() + 2**32),
|
||||
)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
# Pause without saving
|
||||
sabnzbd.Downloader.pause()
|
||||
continue
|
||||
else:
|
||||
logging.debug("Ignoring error %s for %s, already finished or in post-proc", err, filepath)
|
||||
except:
|
||||
logging.error(T("Fatal error in Assembler"), exc_info=True)
|
||||
break
|
||||
|
||||
# Continue after partly written data
|
||||
if not file_done:
|
||||
continue
|
||||
|
||||
# Clean-up admin data
|
||||
logging.info("Decoding finished %s", filepath)
|
||||
nzf.remove_admin()
|
||||
|
||||
# Do rar-related processing
|
||||
if rarfile.is_rarfile(filepath):
|
||||
# Encryption and unwanted extension detection
|
||||
rar_encrypted, unwanted_file = check_encrypted_and_unwanted_files(nzo, filepath)
|
||||
if rar_encrypted:
|
||||
if cfg.pause_on_pwrar() == 1:
|
||||
logging.warning(
|
||||
T(
|
||||
'Paused job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
|
||||
),
|
||||
nzo.final_name,
|
||||
)
|
||||
nzo.pause()
|
||||
else:
|
||||
logging.warning(
|
||||
T(
|
||||
'Aborted job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
|
||||
),
|
||||
nzo.final_name,
|
||||
)
|
||||
nzo.fail_msg = T("Aborted, encryption detected")
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
if unwanted_file:
|
||||
# Don't repeat the warning after a user override of an unwanted extension pause
|
||||
if nzo.unwanted_ext == 0:
|
||||
logging.warning(
|
||||
T('In "%s" unwanted extension in RAR file. Unwanted file is %s '),
|
||||
nzo.final_name,
|
||||
unwanted_file,
|
||||
)
|
||||
logging.debug(T("Unwanted extension is in rar file %s"), filepath)
|
||||
if cfg.action_on_unwanted_extensions() == 1 and nzo.unwanted_ext == 0:
|
||||
logging.debug("Unwanted extension ... pausing")
|
||||
nzo.unwanted_ext = 1
|
||||
nzo.pause()
|
||||
if cfg.action_on_unwanted_extensions() == 2:
|
||||
logging.debug("Unwanted extension ... aborting")
|
||||
nzo.fail_msg = T("Aborted, unwanted extension detected")
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
# Add to direct unpack
|
||||
nzo.add_to_direct_unpacker(nzf)
|
||||
|
||||
elif par2file.is_parfile(filepath):
|
||||
# Parse par2 files, cloaked or not
|
||||
nzo.handle_par2(nzf, filepath)
|
||||
|
||||
filter_output, reason = nzo_filtered_by_rating(nzo)
|
||||
if filter_output == 1:
|
||||
logging.warning(
|
||||
T('Paused job "%s" because of rating (%s)'),
|
||||
nzo.final_name,
|
||||
reason,
|
||||
)
|
||||
nzo.pause()
|
||||
elif filter_output == 2:
|
||||
logging.warning(
|
||||
T('Aborted job "%s" because of rating (%s)'),
|
||||
nzo.final_name,
|
||||
reason,
|
||||
)
|
||||
nzo.fail_msg = T("Aborted, rating filter matched (%s)") % reason
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
|
||||
else:
|
||||
sabnzbd.NzbQueue.remove(nzo.nzo_id, cleanup=False)
|
||||
sabnzbd.PostProcessor.process(nzo)
|
||||
@@ -213,7 +219,8 @@ class Assembler(Thread):
|
||||
if not nzf.md5:
|
||||
nzf.md5 = hashlib.md5()
|
||||
|
||||
with open(nzf.filepath, "ab") as fout:
|
||||
# We write large article-sized chunks, so we can safely skip the buffering of Python
|
||||
with open(nzf.filepath, "ab", buffering=0) as fout:
|
||||
for article in nzf.decodetable:
|
||||
# Break if deleted during writing
|
||||
if nzf.nzo.status is Status.DELETED:
|
||||
@@ -298,7 +305,6 @@ def check_encrypted_and_unwanted_files(nzo: NzbObject, filepath: str) -> Tuple[b
|
||||
# Is it even a rarfile?
|
||||
if rarfile.is_rarfile(filepath):
|
||||
# Open the rar
|
||||
rarfile.UNRAR_TOOL = sabnzbd.newsunpack.RAR_COMMAND
|
||||
zf = rarfile.RarFile(filepath, single_file_check=True)
|
||||
|
||||
# Check for encryption
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -161,7 +161,7 @@ class BPSMeter:
|
||||
|
||||
def save(self):
|
||||
"""Save admin to disk"""
|
||||
sabnzbd.save_admin(
|
||||
sabnzbd.filesystem.save_admin(
|
||||
(
|
||||
self.last_update,
|
||||
self.grand_total,
|
||||
@@ -203,7 +203,7 @@ class BPSMeter:
|
||||
res = False
|
||||
quota = self.left = cfg.quota_size.get_float() # Quota for this period
|
||||
self.have_quota = bool(cfg.quota_size())
|
||||
data = sabnzbd.load_admin(BYTES_FILE_NAME)
|
||||
data = sabnzbd.filesystem.load_admin(BYTES_FILE_NAME)
|
||||
try:
|
||||
(
|
||||
self.last_update,
|
||||
|
||||
180
sabnzbd/cfg.py
180
sabnzbd/cfg.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -18,7 +18,11 @@
|
||||
"""
|
||||
sabnzbd.cfg - Configuration Parameters
|
||||
"""
|
||||
|
||||
import logging
|
||||
import re
|
||||
import argparse
|
||||
from typing import List, Tuple
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.config import (
|
||||
@@ -28,13 +32,7 @@ from sabnzbd.config import (
|
||||
OptionDir,
|
||||
OptionStr,
|
||||
OptionList,
|
||||
validate_octal,
|
||||
validate_safedir,
|
||||
all_lowercase,
|
||||
create_api_key,
|
||||
validate_notempty,
|
||||
clean_nice_ionice_parameters,
|
||||
validate_strip_right_slash,
|
||||
)
|
||||
from sabnzbd.constants import (
|
||||
DEF_HOST,
|
||||
@@ -48,9 +46,74 @@ from sabnzbd.constants import (
|
||||
DEF_FOLDER_MAX,
|
||||
)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Email validation support
|
||||
# Default Validation handlers
|
||||
##############################################################################
|
||||
class ErrorCatchingArgumentParser(argparse.ArgumentParser):
|
||||
def error(self, status=0, message=None):
|
||||
# Need to override so it doesn't raise SystemExit
|
||||
if status:
|
||||
raise ValueError
|
||||
|
||||
|
||||
def clean_nice_ionice_parameters(value):
|
||||
"""Verify that the passed parameters are not exploits"""
|
||||
if value:
|
||||
parser = ErrorCatchingArgumentParser()
|
||||
|
||||
# Nice parameters
|
||||
parser.add_argument("-n", "--adjustment", type=int)
|
||||
|
||||
# Ionice parameters, not supporting -p
|
||||
parser.add_argument("--classdata", type=int)
|
||||
parser.add_argument("-c", "--class", type=int)
|
||||
parser.add_argument("-t", "--ignore", action="store_true")
|
||||
|
||||
try:
|
||||
parser.parse_args(value.split())
|
||||
except ValueError:
|
||||
# Also log at start-up if invalid parameter was set in the ini
|
||||
msg = "%s: %s" % (T("Incorrect parameter"), value)
|
||||
logging.error(msg)
|
||||
return msg, None
|
||||
return None, value
|
||||
|
||||
|
||||
def all_lowercase(value):
|
||||
"""Lowercase everything!"""
|
||||
if isinstance(value, list):
|
||||
# If list, for each item
|
||||
return None, [item.lower() for item in value]
|
||||
return None, value.lower()
|
||||
|
||||
|
||||
def validate_no_unc(root, value, default):
|
||||
"""Check if path isn't a UNC path"""
|
||||
# Only need to check the 'value' part
|
||||
if value and not value.startswith(r"\\"):
|
||||
return validate_notempty(root, value, default)
|
||||
else:
|
||||
return T('UNC path "%s" not allowed here') % value, None
|
||||
|
||||
|
||||
def validate_single_tag(value: List[str]) -> Tuple[None, List[str]]:
|
||||
"""Don't split single indexer tags like "TV > HD"
|
||||
into ['TV', '>', 'HD']
|
||||
"""
|
||||
if len(value) == 3:
|
||||
if value[1] == ">":
|
||||
return None, [" ".join(value)]
|
||||
return None, value
|
||||
|
||||
|
||||
def validate_strip_right_slash(value):
|
||||
"""Strips the right slash"""
|
||||
if value:
|
||||
return None, value.rstrip("/")
|
||||
return None, value
|
||||
|
||||
|
||||
RE_VAL = re.compile(r"[^@ ]+@[^.@ ]+\.[^.@ ]")
|
||||
|
||||
|
||||
@@ -85,6 +148,43 @@ def validate_script(value):
|
||||
return T("%s is not a valid script") % value, None
|
||||
|
||||
|
||||
def validate_permissions(value: str):
|
||||
"""Check the permissions for correct input"""
|
||||
# Octal verification
|
||||
if not value:
|
||||
return None, value
|
||||
try:
|
||||
oct_value = int(value, 8)
|
||||
# Block setting it to 0
|
||||
if not oct_value:
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
return T("%s is not a correct octal value") % value, None
|
||||
|
||||
# Check if we at least have user-permissions
|
||||
if oct_value < int("700", 8):
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T("Permissions setting of %s might deny SABnzbd access to the files and folders it creates."), value
|
||||
)
|
||||
return None, value
|
||||
|
||||
|
||||
def validate_safedir(root, value, default):
|
||||
"""Allow only when queues are empty and no UNC"""
|
||||
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
|
||||
return validate_no_unc(root, value, default)
|
||||
else:
|
||||
return T("Error: Queue not empty, cannot change folder."), None
|
||||
|
||||
|
||||
def validate_notempty(root, value, default):
|
||||
"""If value is empty, return default"""
|
||||
if value:
|
||||
return None, value
|
||||
else:
|
||||
return None, default
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Special settings
|
||||
##############################################################################
|
||||
@@ -139,11 +239,13 @@ nzb_key = OptionStr("misc", "nzb_key", create_api_key())
|
||||
##############################################################################
|
||||
# Config - Folders
|
||||
##############################################################################
|
||||
umask = OptionStr("misc", "permissions", validation=validate_octal)
|
||||
download_dir = OptionDir("misc", "download_dir", DEF_DOWNLOAD_DIR, create=False, validation=validate_safedir)
|
||||
permissions = OptionStr("misc", "permissions", validation=validate_permissions)
|
||||
download_dir = OptionDir(
|
||||
"misc", "download_dir", DEF_DOWNLOAD_DIR, create=False, apply_permissions=True, validation=validate_safedir
|
||||
)
|
||||
download_free = OptionStr("misc", "download_free")
|
||||
complete_dir = OptionDir(
|
||||
"misc", "complete_dir", DEF_COMPLETE_DIR, create=False, apply_umask=True, validation=validate_notempty
|
||||
"misc", "complete_dir", DEF_COMPLETE_DIR, create=False, apply_permissions=True, validation=validate_notempty
|
||||
)
|
||||
complete_free = OptionStr("misc", "complete_free")
|
||||
fulldisk_autoresume = OptionBool("misc", "fulldisk_autoresume", False)
|
||||
@@ -233,7 +335,7 @@ rating_filter_pause_keywords = OptionStr("misc", "rating_filter_pause_keywords")
|
||||
##############################################################################
|
||||
enable_tv_sorting = OptionBool("misc", "enable_tv_sorting", False)
|
||||
tv_sort_string = OptionStr("misc", "tv_sort_string")
|
||||
tv_categories = OptionList("misc", "tv_categories", "")
|
||||
tv_categories = OptionList("misc", "tv_categories", ["tv"])
|
||||
|
||||
enable_movie_sorting = OptionBool("misc", "enable_movie_sorting", False)
|
||||
movie_sort_string = OptionStr("misc", "movie_sort_string")
|
||||
@@ -260,6 +362,7 @@ rss_rate = OptionNumber("misc", "rss_rate", 60, 15, 24 * 60)
|
||||
ampm = OptionBool("misc", "ampm", False)
|
||||
replace_illegal = OptionBool("misc", "replace_illegal", True)
|
||||
start_paused = OptionBool("misc", "start_paused", False)
|
||||
preserve_paused_state = OptionBool("misc", "preserve_paused_state", False)
|
||||
enable_par_cleanup = OptionBool("misc", "enable_par_cleanup", True)
|
||||
process_unpacked_par2 = OptionBool("misc", "process_unpacked_par2", True)
|
||||
enable_unrar = OptionBool("misc", "enable_unrar", True)
|
||||
@@ -278,7 +381,7 @@ html_login = OptionBool("misc", "html_login", True)
|
||||
osx_menu = OptionBool("misc", "osx_menu", True)
|
||||
osx_speed = OptionBool("misc", "osx_speed", True)
|
||||
warn_dupl_jobs = OptionBool("misc", "warn_dupl_jobs", True)
|
||||
helpfull_warnings = OptionBool("misc", "helpfull_warnings", True)
|
||||
helpful_warnings = OptionBool("misc", "helpful_warnings", True)
|
||||
keep_awake = OptionBool("misc", "keep_awake", True)
|
||||
win_menu = OptionBool("misc", "win_menu", True)
|
||||
allow_incomplete_nzb = OptionBool("misc", "allow_incomplete_nzb", False)
|
||||
@@ -289,7 +392,7 @@ api_warnings = OptionBool("misc", "api_warnings", True, protect=True)
|
||||
disable_key = OptionBool("misc", "disable_api_key", False, protect=True)
|
||||
no_penalties = OptionBool("misc", "no_penalties", False)
|
||||
x_frame_options = OptionBool("misc", "x_frame_options", True)
|
||||
require_modern_tls = OptionBool("misc", "require_modern_tls", False)
|
||||
allow_old_ssl_tls = OptionBool("misc", "allow_old_ssl_tls", False)
|
||||
num_decoders = OptionNumber("misc", "num_decoders", 3)
|
||||
|
||||
# Text values
|
||||
@@ -311,6 +414,7 @@ local_ranges = OptionList("misc", "local_ranges", protect=True)
|
||||
max_url_retries = OptionNumber("misc", "max_url_retries", 10, 1)
|
||||
downloader_sleep_time = OptionNumber("misc", "downloader_sleep_time", 10, 0)
|
||||
ssdp_broadcast_interval = OptionNumber("misc", "ssdp_broadcast_interval", 15, 1, 600)
|
||||
socks5_proxy_url = OptionStr("misc", "socks5_proxy_url")
|
||||
|
||||
|
||||
##############################################################################
|
||||
@@ -470,3 +574,51 @@ def set_root_folders2():
|
||||
https_cert.set_root(admin_dir.get_path())
|
||||
https_key.set_root(admin_dir.get_path())
|
||||
https_chain.set_root(admin_dir.get_path())
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Callbacks for settings
|
||||
##############################################################################
|
||||
def new_limit():
|
||||
"""Callback for article cache changes"""
|
||||
sabnzbd.ArticleCache.new_limit(cache_limit.get_int())
|
||||
|
||||
|
||||
def guard_restart():
|
||||
"""Callback for config options requiring a restart"""
|
||||
sabnzbd.RESTART_REQ = True
|
||||
|
||||
|
||||
def guard_top_only():
|
||||
"""Callback for change of top_only option"""
|
||||
sabnzbd.NzbQueue.set_top_only(top_only())
|
||||
|
||||
|
||||
def guard_pause_on_pp():
|
||||
"""Callback for change of pause-download-on-pp"""
|
||||
if pause_on_post_processing():
|
||||
pass # Not safe to idle downloader, because we don't know
|
||||
# if post-processing is active now
|
||||
else:
|
||||
sabnzbd.Downloader.resume_from_postproc()
|
||||
|
||||
|
||||
def guard_quota_size():
|
||||
"""Callback for change of quota_size"""
|
||||
sabnzbd.BPSMeter.change_quota()
|
||||
|
||||
|
||||
def guard_quota_dp():
|
||||
"""Callback for change of quota_day or quota_period"""
|
||||
sabnzbd.Scheduler.restart()
|
||||
|
||||
|
||||
def guard_language():
|
||||
"""Callback for change of the interface language"""
|
||||
sabnzbd.lang.set_language(language())
|
||||
sabnzbd.api.clear_trans_cache()
|
||||
|
||||
|
||||
def guard_https_ver():
|
||||
"""Callback for change of https verification"""
|
||||
sabnzbd.misc.set_https_verification(enable_https_verification())
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -18,7 +18,7 @@
|
||||
"""
|
||||
sabnzbd.config - Configuration Support
|
||||
"""
|
||||
import argparse
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
@@ -30,7 +30,7 @@ from urllib.parse import urlparse
|
||||
|
||||
import configobj
|
||||
|
||||
import sabnzbd.misc
|
||||
import sabnzbd
|
||||
from sabnzbd.constants import CONFIG_VERSION, NORMAL_PRIORITY, DEFAULT_PRIORITY
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.filesystem import clip_path, real_path, create_real_path, renamer, remove_file, is_writable
|
||||
@@ -192,7 +192,7 @@ class OptionDir(Option):
|
||||
section: str,
|
||||
keyword: str,
|
||||
default_val: str = "",
|
||||
apply_umask: bool = False,
|
||||
apply_permissions: bool = False,
|
||||
create: bool = True,
|
||||
validation: Optional[Callable] = None,
|
||||
writable: bool = True,
|
||||
@@ -200,7 +200,7 @@ class OptionDir(Option):
|
||||
):
|
||||
self.__validation: Optional[Callable] = validation
|
||||
self.__root: str = "" # Base directory for relative paths
|
||||
self.__apply_umask: bool = apply_umask
|
||||
self.__apply_permissions: bool = apply_permissions
|
||||
self.__create: bool = create
|
||||
self.__writable: bool = writable
|
||||
super().__init__(section, keyword, default_val, add=add)
|
||||
@@ -220,7 +220,9 @@ class OptionDir(Option):
|
||||
if value:
|
||||
path = real_path(self.__root, value)
|
||||
if self.__create and not os.path.exists(path):
|
||||
_, path, _ = create_real_path(self.ident()[1], self.__root, value, self.__apply_umask, self.__writable)
|
||||
_, path, _ = create_real_path(
|
||||
self.ident()[1], self.__root, value, self.__apply_permissions, self.__writable
|
||||
)
|
||||
return path
|
||||
|
||||
def get_clipped_path(self) -> str:
|
||||
@@ -253,7 +255,7 @@ class OptionDir(Option):
|
||||
if not error:
|
||||
if value and (self.__create or create):
|
||||
res, path, error = create_real_path(
|
||||
self.ident()[1], self.__root, value, self.__apply_umask, self.__writable
|
||||
self.ident()[1], self.__root, value, self.__apply_permissions, self.__writable
|
||||
)
|
||||
if not error:
|
||||
super().set(value)
|
||||
@@ -399,7 +401,7 @@ class ConfigServer:
|
||||
|
||||
self.displayname = OptionStr(name, "displayname", add=False)
|
||||
self.host = OptionStr(name, "host", add=False)
|
||||
self.port = OptionNumber(name, "port", 119, 0, 2 ** 16 - 1, add=False)
|
||||
self.port = OptionNumber(name, "port", 119, 0, 2**16 - 1, add=False)
|
||||
self.timeout = OptionNumber(name, "timeout", 60, 20, 240, add=False)
|
||||
self.username = OptionStr(name, "username", add=False)
|
||||
self.password = OptionPassword(name, "password", add=False)
|
||||
@@ -409,6 +411,7 @@ class ConfigServer:
|
||||
self.ssl_verify = OptionNumber(name, "ssl_verify", 2, add=False)
|
||||
self.ssl_ciphers = OptionStr(name, "ssl_ciphers", add=False)
|
||||
self.enable = OptionBool(name, "enable", True, add=False)
|
||||
self.required = OptionBool(name, "required", False, add=False)
|
||||
self.optional = OptionBool(name, "optional", False, add=False)
|
||||
self.retention = OptionNumber(name, "retention", 0, add=False)
|
||||
self.expire_date = OptionStr(name, "expire_date", add=False)
|
||||
@@ -442,6 +445,7 @@ class ConfigServer:
|
||||
"ssl_ciphers",
|
||||
"send_group",
|
||||
"enable",
|
||||
"required",
|
||||
"optional",
|
||||
"retention",
|
||||
"expire_date",
|
||||
@@ -476,6 +480,7 @@ class ConfigServer:
|
||||
output_dict["ssl_verify"] = self.ssl_verify()
|
||||
output_dict["ssl_ciphers"] = self.ssl_ciphers()
|
||||
output_dict["enable"] = self.enable()
|
||||
output_dict["required"] = self.required()
|
||||
output_dict["optional"] = self.optional()
|
||||
output_dict["retention"] = self.retention()
|
||||
output_dict["expire_date"] = self.expire_date()
|
||||
@@ -509,7 +514,7 @@ class ConfigCat:
|
||||
self.pp = OptionStr(name, "pp", add=False)
|
||||
self.script = OptionStr(name, "script", "Default", add=False)
|
||||
self.dir = OptionDir(name, "dir", add=False, create=False)
|
||||
self.newzbin = OptionList(name, "newzbin", add=False, validation=validate_single_tag)
|
||||
self.newzbin = OptionList(name, "newzbin", add=False, validation=sabnzbd.cfg.validate_single_tag)
|
||||
self.priority = OptionNumber(name, "priority", DEFAULT_PRIORITY, add=False)
|
||||
|
||||
self.set_dict(values)
|
||||
@@ -1011,19 +1016,9 @@ def get_filename():
|
||||
return CFG.filename
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Default Validation handlers
|
||||
##############################################################################
|
||||
__PW_PREFIX = "!!!encoded!!!"
|
||||
|
||||
|
||||
class ErrorCatchingArgumentParser(argparse.ArgumentParser):
|
||||
def error(self, status=0, message=None):
|
||||
# Need to override so it doesn't raise SystemExit
|
||||
if status:
|
||||
raise ValueError
|
||||
|
||||
|
||||
def encode_password(pw):
|
||||
"""Encode password in hexadecimal if needed"""
|
||||
enc = False
|
||||
@@ -1057,90 +1052,6 @@ def decode_password(pw, name):
|
||||
return pw
|
||||
|
||||
|
||||
def clean_nice_ionice_parameters(value):
|
||||
"""Verify that the passed parameters are not exploits"""
|
||||
if value:
|
||||
parser = ErrorCatchingArgumentParser()
|
||||
|
||||
# Nice parameters
|
||||
parser.add_argument("-n", "--adjustment", type=int)
|
||||
|
||||
# Ionice parameters, not supporting -p
|
||||
parser.add_argument("--classdata", type=int)
|
||||
parser.add_argument("-c", "--class", type=int)
|
||||
parser.add_argument("-t", "--ignore", action="store_true")
|
||||
|
||||
try:
|
||||
parser.parse_args(value.split())
|
||||
except ValueError:
|
||||
# Also log at start-up if invalid parameter was set in the ini
|
||||
msg = "%s: %s" % (T("Incorrect parameter"), value)
|
||||
logging.error(msg)
|
||||
return msg, None
|
||||
return None, value
|
||||
|
||||
|
||||
def all_lowercase(value):
|
||||
"""Lowercase everything!"""
|
||||
if isinstance(value, list):
|
||||
# If list, for each item
|
||||
return None, [item.lower() for item in value]
|
||||
return None, value.lower()
|
||||
|
||||
|
||||
def validate_octal(value):
|
||||
"""Check if string is valid octal number"""
|
||||
if not value:
|
||||
return None, value
|
||||
try:
|
||||
int(value, 8)
|
||||
return None, value
|
||||
except:
|
||||
return T("%s is not a correct octal value") % value, None
|
||||
|
||||
|
||||
def validate_no_unc(root, value, default):
|
||||
"""Check if path isn't a UNC path"""
|
||||
# Only need to check the 'value' part
|
||||
if value and not value.startswith(r"\\"):
|
||||
return validate_notempty(root, value, default)
|
||||
else:
|
||||
return T('UNC path "%s" not allowed here') % value, None
|
||||
|
||||
|
||||
def validate_safedir(root, value, default):
|
||||
"""Allow only when queues are empty and no UNC"""
|
||||
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
|
||||
return validate_no_unc(root, value, default)
|
||||
else:
|
||||
return T("Error: Queue not empty, cannot change folder."), None
|
||||
|
||||
|
||||
def validate_notempty(root, value, default):
|
||||
"""If value is empty, return default"""
|
||||
if value:
|
||||
return None, value
|
||||
else:
|
||||
return None, default
|
||||
|
||||
|
||||
def validate_strip_right_slash(value):
|
||||
"""Strips the right slash"""
|
||||
if value:
|
||||
return None, value.rstrip("/")
|
||||
return None, value
|
||||
|
||||
|
||||
def validate_single_tag(value: List[str]) -> Tuple[None, List[str]]:
|
||||
"""Don't split single indexer tags like "TV > HD"
|
||||
into ['TV', '>', 'HD']
|
||||
"""
|
||||
if len(value) == 3:
|
||||
if value[1] == ">":
|
||||
return None, [" ".join(value)]
|
||||
return None, value
|
||||
|
||||
|
||||
def create_api_key():
|
||||
"""Return a new randomized API_KEY"""
|
||||
return uuid.uuid4().hex
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
import os
|
||||
from collections import namedtuple
|
||||
from re import compile
|
||||
|
||||
CONFIG_VERSION = 19
|
||||
|
||||
@@ -42,9 +41,9 @@ ANFO = namedtuple("ANFO", "article_sum cache_size cache_limit")
|
||||
DEF_FOLDER_MAX = 256 - 10
|
||||
DEF_FILE_MAX = 255 - 10 # max filename length on modern filesystems, minus some room for extra chars later on
|
||||
|
||||
GIGI = float(2 ** 30)
|
||||
MEBI = float(2 ** 20)
|
||||
KIBI = float(2 ** 10)
|
||||
GIGI = float(2**30)
|
||||
MEBI = float(2**20)
|
||||
KIBI = float(2**10)
|
||||
|
||||
BYTES_FILE_NAME_OLD = "totals9.sab"
|
||||
BYTES_FILE_NAME = "totals10.sab"
|
||||
@@ -121,7 +120,8 @@ VALID_NZB_FILES = (".nzb", ".gz", ".bz2")
|
||||
|
||||
CHEETAH_DIRECTIVES = {"directiveStartToken": "<!--#", "directiveEndToken": "#-->", "prioritizeSearchListOverSelf": True}
|
||||
|
||||
IGNORED_FOLDERS = ("@eaDir", ".appleDouble")
|
||||
IGNORED_FILES_AND_FOLDERS = ("@eaDir", ".appleDouble", ".DS_Store")
|
||||
IGNORED_MOVIE_FOLDERS = ("video_ts", "audio_ts", "bdmv")
|
||||
|
||||
EXCLUDED_GUESSIT_PROPERTIES = [
|
||||
"part",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -453,7 +453,7 @@ _PP_LOOKUP = {0: "", 1: "R", 2: "U", 3: "D"}
|
||||
def build_history_info(nzo, workdir_complete="", postproc_time=0, script_output="", script_line="", series_info=False):
|
||||
"""Collects all the information needed for the database"""
|
||||
completed = int(time.time())
|
||||
pp = _PP_LOOKUP.get(opts_to_pp(*nzo.repair_opts), "X")
|
||||
pp = _PP_LOOKUP.get(opts_to_pp(nzo.repair, nzo.unpack, nzo.delete), "X")
|
||||
|
||||
if script_output:
|
||||
# Compress the output of the script
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -22,12 +22,15 @@ sabnzbd.decoder - article decoder
|
||||
import logging
|
||||
import hashlib
|
||||
import queue
|
||||
import binascii
|
||||
from io import BytesIO
|
||||
from threading import Thread
|
||||
from typing import Tuple, List, Optional
|
||||
|
||||
import sabnzbd
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.constants import SABYENC_VERSION_REQUIRED
|
||||
from sabnzbd.encoding import ubtou
|
||||
from sabnzbd.nzbstuff import Article
|
||||
from sabnzbd.misc import match_str
|
||||
|
||||
@@ -45,17 +48,18 @@ except ImportError:
|
||||
SABYENC_ENABLED = False
|
||||
|
||||
|
||||
class CrcError(Exception):
|
||||
def __init__(self, needcrc: int, gotcrc: int, data: bytes):
|
||||
class BadData(Exception):
|
||||
def __init__(self, data: bytes):
|
||||
super().__init__()
|
||||
self.needcrc = needcrc
|
||||
self.gotcrc = gotcrc
|
||||
self.data = data
|
||||
|
||||
|
||||
class BadYenc(Exception):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
pass
|
||||
|
||||
|
||||
class BadUu(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class Decoder:
|
||||
@@ -140,7 +144,11 @@ class DecoderWorker(Thread):
|
||||
if sabnzbd.LOG_ALL:
|
||||
logging.debug("Decoding %s", art_id)
|
||||
|
||||
decoded_data = decode(article, raw_data)
|
||||
if article.nzf.type == "uu":
|
||||
decoded_data = decode_uu(article, raw_data)
|
||||
else:
|
||||
decoded_data = decode_yenc(article, raw_data)
|
||||
|
||||
article_success = True
|
||||
|
||||
except MemoryError:
|
||||
@@ -154,15 +162,20 @@ class DecoderWorker(Thread):
|
||||
sabnzbd.NzbQueue.reset_try_lists(article)
|
||||
continue
|
||||
|
||||
except CrcError as crc_error:
|
||||
logging.info("CRC Error in %s" % art_id)
|
||||
|
||||
except BadData as error:
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
|
||||
# Store data, maybe par2 can still fix it
|
||||
decoded_data = crc_error.data
|
||||
decoded_data = error.data
|
||||
|
||||
except BadUu:
|
||||
logging.info("Badly formed uu article in %s", art_id)
|
||||
|
||||
# Try the next server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
|
||||
except (BadYenc, ValueError):
|
||||
# Handles precheck and badly formed articles
|
||||
@@ -170,25 +183,29 @@ class DecoderWorker(Thread):
|
||||
# STAT was used, so we only get a status code
|
||||
article_success = True
|
||||
else:
|
||||
# Examine headers (for precheck) or body (for download)
|
||||
# Look for DMCA clues (while skipping "X-" headers)
|
||||
# Detect potential UUencode
|
||||
for line in raw_data:
|
||||
lline = line.lower()
|
||||
if b"message-id:" in lline:
|
||||
# Try uu-decoding
|
||||
if (not nzo.precheck) and article.nzf.type != "yenc":
|
||||
try:
|
||||
decoded_data = decode_uu(article, raw_data)
|
||||
logging.debug("Found uu-encoded article %s in job %s", art_id, nzo.final_name)
|
||||
article_success = True
|
||||
if not lline.startswith(b"x-") and match_str(
|
||||
lline, (b"dmca", b"removed", b"cancel", b"blocked")
|
||||
):
|
||||
article_success = False
|
||||
logging.info("Article removed from server (%s)", art_id)
|
||||
break
|
||||
if lline.find(b"\nbegin ") >= 0:
|
||||
logme = T("UUencode detected, only yEnc encoding is supported [%s]") % nzo.final_name
|
||||
logging.error(logme)
|
||||
nzo.fail_msg = logme
|
||||
sabnzbd.NzbQueue.end_job(nzo)
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
# Only bother with further checks if uu-decoding didn't work out
|
||||
if not article_success:
|
||||
# Convert the initial chunks of raw socket data to article lines,
|
||||
# and examine the headers (for precheck) or body (for download).
|
||||
for line in b"".join(raw_data[:2]).split(b"\r\n"):
|
||||
lline = line.lower()
|
||||
if lline.startswith(b"message-id:"):
|
||||
article_success = True
|
||||
# Look for DMCA clues (while skipping "X-" headers)
|
||||
if not lline.startswith(b"x-") and match_str(
|
||||
lline, (b"dmca", b"removed", b"cancel", b"blocked")
|
||||
):
|
||||
article_success = False
|
||||
logging.info("Article removed from server (%s)", art_id)
|
||||
break
|
||||
|
||||
# Pre-check, proper article found so just register
|
||||
if nzo.precheck and article_success and sabnzbd.LOG_ALL:
|
||||
@@ -218,7 +235,7 @@ class DecoderWorker(Thread):
|
||||
sabnzbd.NzbQueue.register_article(article, article_success)
|
||||
|
||||
|
||||
def decode(article: Article, raw_data: List[bytes]) -> bytes:
|
||||
def decode_yenc(article: Article, raw_data: List[bytes]) -> bytes:
|
||||
# Let SABYenc do all the heavy lifting
|
||||
decoded_data, yenc_filename, crc, crc_expected, crc_correct = sabyenc3.decode_usenet_chunks(raw_data, article.bytes)
|
||||
|
||||
@@ -240,11 +257,135 @@ def decode(article: Article, raw_data: List[bytes]) -> bytes:
|
||||
|
||||
# CRC check
|
||||
if not crc_correct:
|
||||
raise CrcError(crc_expected, crc, decoded_data)
|
||||
logging.info("CRC Error in %s", article.article)
|
||||
raise BadData(decoded_data)
|
||||
|
||||
return decoded_data
|
||||
|
||||
|
||||
def decode_uu(article: Article, raw_data: List[bytes]) -> bytes:
|
||||
"""Try to uu-decode an article. The raw_data may or may not contain headers.
|
||||
If there are headers, they will be separated from the body by at least one
|
||||
empty line. In case of no headers, the first line seems to always be the nntp
|
||||
response code (222) directly followed by the msg body."""
|
||||
if not raw_data:
|
||||
logging.debug("No data to decode")
|
||||
raise BadUu
|
||||
|
||||
# Line up the raw_data
|
||||
with BytesIO() as encoded_data:
|
||||
for data in raw_data:
|
||||
encoded_data.write(data)
|
||||
raw_data = encoded_data.getvalue().split(b"\r\n")
|
||||
|
||||
# Index of the uu payload start in raw_data
|
||||
uu_start = 0
|
||||
|
||||
# Limit the number of lines to check for the onset of uu data
|
||||
limit = min(len(raw_data), 32) - 1
|
||||
if limit < 3:
|
||||
logging.debug("Article too short to contain valid uu-encoded data")
|
||||
raise BadUu
|
||||
|
||||
# Try to find an empty line separating the body from headers or response
|
||||
# code and set the expected payload start to the next line.
|
||||
try:
|
||||
uu_start = raw_data[:limit].index(b"") + 1
|
||||
except ValueError:
|
||||
# No empty line, look for a response code instead
|
||||
if raw_data[0].startswith(b"222 "):
|
||||
uu_start = 1
|
||||
else:
|
||||
# Invalid data?
|
||||
logging.debug("Failed to locate start of uu payload")
|
||||
raise BadUu
|
||||
|
||||
def is_uu_junk(line: bytes) -> bool:
|
||||
"""Determine if the line is empty or contains known junk data"""
|
||||
return (not line) or line == b"-- " or line.startswith(b"Posted via ")
|
||||
|
||||
# Check the uu 'begin' line
|
||||
if article.lowest_partnum:
|
||||
try:
|
||||
# Make sure the line after the uu_start one isn't empty as well or
|
||||
# detection of the 'begin' line won't work. For articles other than
|
||||
# lowest_partnum, filtering out empty lines (and other junk) can
|
||||
# wait until the actual decoding step.
|
||||
for index in range(uu_start, limit):
|
||||
if is_uu_junk(raw_data[index]):
|
||||
uu_start = index + 1
|
||||
else:
|
||||
# Bingo
|
||||
break
|
||||
else:
|
||||
# Search reached the limit
|
||||
raise IndexError
|
||||
|
||||
uu_begin_data = raw_data[uu_start].split(b" ")
|
||||
# Filename may contain spaces
|
||||
uu_filename = ubtou(b" ".join(uu_begin_data[2:]).strip())
|
||||
|
||||
# Sanity check the 'begin' line
|
||||
if (
|
||||
len(uu_begin_data) < 3
|
||||
or uu_begin_data[0].lower() != b"begin"
|
||||
or (not int(uu_begin_data[1], 8))
|
||||
or (not uu_filename)
|
||||
):
|
||||
raise ValueError
|
||||
|
||||
# Consider this enough proof to set the type, avoiding further
|
||||
# futile attempts at decoding articles in this nzf as yenc.
|
||||
article.nzf.type = "uu"
|
||||
|
||||
# Bump the pointer for the payload to the next line
|
||||
uu_start += 1
|
||||
except Exception:
|
||||
logging.debug("Missing or invalid uu 'begin' line: %s", raw_data[uu_start] if uu_start < limit else None)
|
||||
raise BadUu
|
||||
|
||||
# Do the actual decoding
|
||||
with BytesIO() as decoded_data:
|
||||
for line in raw_data[uu_start:]:
|
||||
# Ignore junk
|
||||
if is_uu_junk(line):
|
||||
continue
|
||||
|
||||
# End of the article
|
||||
if line in (b"`", b"end", b"."):
|
||||
break
|
||||
|
||||
try:
|
||||
decoded_line = binascii.a2b_uu(line)
|
||||
except binascii.Error as msg:
|
||||
try:
|
||||
# Workaround for broken uuencoders by Fredrik Lundh
|
||||
nbytes = (((ord(line[0]) - 32) & 63) * 4 + 5) / 3
|
||||
decoded_line = binascii.a2b_uu(line[:nbytes])
|
||||
except Exception as msg2:
|
||||
logging.info(
|
||||
"Error while uu-decoding %s: %s (line: %s; workaround: %s)", article.article, msg, line, msg2
|
||||
)
|
||||
raise BadData(decoded_data.getvalue())
|
||||
|
||||
# Store the decoded data
|
||||
decoded_data.write(decoded_line)
|
||||
|
||||
# Mark as decoded and set the type to uu; the latter is still needed in
|
||||
# case the lowest_partnum article was damaged or slow to download.
|
||||
article.decoded = True
|
||||
article.nzf.type = "uu"
|
||||
|
||||
if article.lowest_partnum:
|
||||
decoded_data.seek(0)
|
||||
article.nzf.md5of16k = hashlib.md5(decoded_data.read(16384)).digest()
|
||||
# Handle the filename
|
||||
if not article.nzf.filename_checked and uu_filename:
|
||||
article.nzf.nzo.verify_nzf_filename(article.nzf, uu_filename)
|
||||
|
||||
return decoded_data.getvalue()
|
||||
|
||||
|
||||
def search_new_server(article: Article) -> bool:
|
||||
"""Shorthand for searching new server or else increasing bad_articles"""
|
||||
# Continue to the next one if we found new server
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -36,6 +36,8 @@ import re
|
||||
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
|
||||
from sabnzbd.misc import match_str
|
||||
from sabnzbd.constants import IGNORED_MOVIE_FOLDERS
|
||||
from typing import List
|
||||
|
||||
# Files to exclude and minimal file size for renaming
|
||||
@@ -64,9 +66,9 @@ def decode_par2(parfile: str) -> List[str]:
|
||||
with open(filepath, "rb") as fileToMatch:
|
||||
first16k_data = fileToMatch.read(16384)
|
||||
|
||||
# Check if we have this hash
|
||||
# Check if we have this hash and the filename is different
|
||||
file_md5of16k = hashlib.md5(first16k_data).digest()
|
||||
if file_md5of16k in md5of16k:
|
||||
if file_md5of16k in md5of16k and fn != md5of16k[file_md5of16k]:
|
||||
new_path = os.path.join(dirname, md5of16k[file_md5of16k])
|
||||
# Make sure it's a unique name
|
||||
unique_filename = get_unique_filename(new_path)
|
||||
@@ -100,16 +102,16 @@ def recover_par2_names(filelist: List[str]) -> List[str]:
|
||||
|
||||
|
||||
def is_probably_obfuscated(myinputfilename: str) -> bool:
|
||||
"""Returns boolean if filename is likely obfuscated. Default: True
|
||||
"""Returns boolean if filename is likely obfuscated. Default: True, so obfuscated
|
||||
myinputfilename (string) can be a plain file name, or a full path"""
|
||||
|
||||
# Find filebasename
|
||||
path, filename = os.path.split(myinputfilename)
|
||||
filebasename, fileextension = os.path.splitext(filename)
|
||||
|
||||
# First fixed patterns that we know of:
|
||||
logging.debug("Checking: %s", filebasename)
|
||||
|
||||
# First: the patterns that are certainly obfuscated:
|
||||
|
||||
# ...blabla.H.264/b082fa0beaa644d3aa01045d5b8d0b36.mkv is certainly obfuscated
|
||||
if re.findall(r"^[a-f0-9]{32}$", filebasename):
|
||||
logging.debug("Obfuscated: 32 hex digit")
|
||||
@@ -121,12 +123,20 @@ def is_probably_obfuscated(myinputfilename: str) -> bool:
|
||||
logging.debug("Obfuscated: starting with 40+ lower case hex digits and/or dots")
|
||||
return True
|
||||
|
||||
# "[BlaBla] something [More] something 5937bc5e32146e.bef89a622e4a23f07b0d3757ad5e8a.a02b264e [Brrr]"
|
||||
# So: square brackets plus 30+ hex digit
|
||||
if re.findall(r"[a-f0-9]{30}", filebasename) and len(re.findall(r"\[\w+\]", filebasename)) >= 2:
|
||||
logging.debug("Obfuscated: square brackets plus a 30+ hex")
|
||||
return True
|
||||
|
||||
# /some/thing/abc.xyz.a4c567edbcbf27.BLA is certainly obfuscated
|
||||
if re.findall(r"^abc\.xyz", filebasename):
|
||||
logging.debug("Obfuscated: starts with 'abc.xyz'")
|
||||
# ... which we consider as obfuscated:
|
||||
return True
|
||||
|
||||
# Then: patterns that are not obfuscated but typical, clear names:
|
||||
|
||||
# these are signals for the obfuscation versus non-obfuscation
|
||||
decimals = sum(1 for c in filebasename if c.isnumeric())
|
||||
upperchars = sum(1 for c in filebasename if c.isupper())
|
||||
@@ -153,9 +163,9 @@ def is_probably_obfuscated(myinputfilename: str) -> bool:
|
||||
logging.debug("Not obfuscated: starts with a capital, and most letters are lower case")
|
||||
return False
|
||||
|
||||
# If we get here, no trigger for a clear name was found, so let's default to obfuscated
|
||||
# Finally: default to obfuscated:
|
||||
logging.debug("Obfuscated (default)")
|
||||
return True # default not obfuscated
|
||||
return True # default is obfuscated
|
||||
|
||||
|
||||
def deobfuscate_list(filelist: List[str], usefulname: str):
|
||||
@@ -166,9 +176,19 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
|
||||
# 2. if no meaningful extension, add it
|
||||
# 3. based on detecting obfuscated filenames
|
||||
|
||||
# to be sure, only keep really exsiting files:
|
||||
# to be sure, only keep really existing files:
|
||||
filelist = [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)
|
||||
match_ignored_movie_folders = [f for f in filelist if match_str(f, ignored_movie_folders_with_dir_sep)]
|
||||
if match_ignored_movie_folders:
|
||||
logging.info(
|
||||
"Skipping deobfuscation because of DVD/Bluray directory name(s), like: %s",
|
||||
str(match_ignored_movie_folders)[:200],
|
||||
)
|
||||
return # bail out of deobfuscate
|
||||
|
||||
# let's see if there are files with uncommon/unpopular (so: obfuscated) extensions
|
||||
# if so, let's give them a better extension based on their internal content/info
|
||||
# Example: if 'kjladsflkjadf.adsflkjads' is probably a PNG, rename to 'kjladsflkjadf.adsflkjads.png'
|
||||
@@ -176,7 +196,7 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
|
||||
for file in filelist:
|
||||
if file_extension.has_popular_extension(file):
|
||||
# common extension, like .doc or .iso, so assume OK and change nothing
|
||||
logging.debug("extension of %s looks common", file)
|
||||
logging.debug("Extension of %s looks common", file)
|
||||
newlist.append(file)
|
||||
else:
|
||||
# uncommon (so: obfuscated) extension
|
||||
@@ -220,6 +240,7 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
|
||||
# check that file is still there (and not renamed by the secondary renaming process below)
|
||||
if not os.path.isfile(filename):
|
||||
continue
|
||||
|
||||
logging.debug("Deobfuscate inspecting %s", filename)
|
||||
# Do we need to rename this file?
|
||||
# Criteria: big, not-excluded extension, obfuscated (in that order)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -25,7 +25,7 @@ import subprocess
|
||||
import time
|
||||
import threading
|
||||
import logging
|
||||
from typing import Optional
|
||||
from typing import Optional, Dict, List, Tuple
|
||||
|
||||
import sabnzbd
|
||||
import sabnzbd.cfg as cfg
|
||||
@@ -34,7 +34,7 @@ from sabnzbd.filesystem import long_path, remove_all, real_path, remove_file
|
||||
from sabnzbd.nzbstuff import NzbObject, NzbFile
|
||||
from sabnzbd.encoding import platform_btou
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.newsunpack import EXTRACTFROM_RE, EXTRACTED_RE, rar_volumelist
|
||||
from sabnzbd.newsunpack import RAR_EXTRACTFROM_RE, RAR_EXTRACTED_RE, rar_volumelist, add_time_left
|
||||
from sabnzbd.postproc import prepare_extraction_path
|
||||
from sabnzbd.utils.rarfile import RarFile
|
||||
from sabnzbd.utils.diskspeed import diskspeedmeasure
|
||||
@@ -54,20 +54,20 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
self.nzo: NzbObject = nzo
|
||||
self.active_instance: Optional[subprocess.Popen] = None
|
||||
self.killed = False
|
||||
self.killed: bool = False
|
||||
self.next_file_lock = threading.Condition(threading.RLock())
|
||||
|
||||
self.unpack_dir_info = None
|
||||
self.rarfile_nzf: Optional[NzbFile] = None
|
||||
self.cur_setname = None
|
||||
self.cur_volume = 0
|
||||
self.total_volumes = {}
|
||||
self.unpack_time = 0.0
|
||||
self.cur_setname: Optional[str] = None
|
||||
self.cur_volume: int = 0
|
||||
self.total_volumes: Dict[str, int] = {}
|
||||
self.unpack_time: float = 0.0
|
||||
|
||||
self.success_sets = {}
|
||||
self.next_sets = []
|
||||
self.success_sets: Dict[str, Tuple[List[str], List[str]]] = {}
|
||||
self.next_sets: List[NzbFile] = []
|
||||
|
||||
self.duplicate_lines = 0
|
||||
self.duplicate_lines: int = 0
|
||||
|
||||
nzo.direct_unpacker = self
|
||||
|
||||
@@ -108,6 +108,7 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
def set_volumes_for_nzo(self):
|
||||
"""Loop over all files to detect the names"""
|
||||
logging.debug("Parsing setname and volume information for %s" % self.nzo.final_name)
|
||||
none_counter = 0
|
||||
found_counter = 0
|
||||
for nzf in self.nzo.files + self.nzo.finished_files:
|
||||
@@ -270,12 +271,12 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
elif linebuf_encoded.startswith("Extracting from"):
|
||||
# List files we used
|
||||
filename = re.search(EXTRACTFROM_RE, linebuf_encoded).group(1)
|
||||
filename = re.search(RAR_EXTRACTFROM_RE, linebuf_encoded).group(1)
|
||||
if filename not in rarfiles:
|
||||
rarfiles.append(filename)
|
||||
else:
|
||||
# List files we extracted
|
||||
m = re.search(EXTRACTED_RE, linebuf_encoded)
|
||||
m = re.search(RAR_EXTRACTED_RE, linebuf_encoded)
|
||||
if m:
|
||||
# In case of flat-unpack, UnRar still prints the whole path (?!)
|
||||
unpacked_file = m.group(2)
|
||||
@@ -292,9 +293,13 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
# Possible that the instance was deleted while locked
|
||||
if not self.killed:
|
||||
# Sometimes the assembler is still working on the file, resulting in "Unexpected end of archive".
|
||||
# So we delay a tiny bit before we continue. This is not the cleanest solution, but it works.
|
||||
time.sleep(0.1)
|
||||
|
||||
# If unrar stopped or is killed somehow, writing will cause a crash
|
||||
try:
|
||||
# Give unrar some time to do it's thing
|
||||
# Give unrar some time to do its thing
|
||||
self.active_instance.stdin.write(b"C\n")
|
||||
start_time = time.time()
|
||||
time.sleep(0.1)
|
||||
@@ -306,7 +311,7 @@ class DirectUnpacker(threading.Thread):
|
||||
if not last_volume_linebuf or last_volume_linebuf != linebuf:
|
||||
# Next volume
|
||||
self.cur_volume += 1
|
||||
self.nzo.set_action_line(T("Direct Unpack"), self.get_formatted_stats())
|
||||
self.nzo.set_action_line(T("Direct Unpack"), self.get_formatted_stats(include_time_left=True))
|
||||
logging.info("DirectUnpacked volume %s for %s", self.cur_volume, self.cur_setname)
|
||||
|
||||
# If lines did not change and we don't have the next volume, this download is missing files!
|
||||
@@ -325,6 +330,7 @@ class DirectUnpacker(threading.Thread):
|
||||
# Add last line and write any new output
|
||||
if linebuf:
|
||||
unrar_log.append(platform_btou(linebuf.strip()))
|
||||
if unrar_log:
|
||||
logging.debug("DirectUnpack Unrar output %s", "\n".join(unrar_log))
|
||||
|
||||
# Make more space
|
||||
@@ -346,10 +352,10 @@ class DirectUnpacker(threading.Thread):
|
||||
return False
|
||||
|
||||
def wait_for_next_volume(self):
|
||||
"""Wait for the correct volume to appear
|
||||
But stop if it was killed or the NZB is done
|
||||
"""Wait for the correct volume to appear but stop if it was killed
|
||||
or the NZB is in post-processing and no new files will be downloaded.
|
||||
"""
|
||||
while not self.have_next_volume() and not self.killed and self.nzo.files:
|
||||
while not self.have_next_volume() and not self.killed and not self.nzo.pp_active:
|
||||
with self.next_file_lock:
|
||||
self.next_file_lock.wait()
|
||||
|
||||
@@ -384,7 +390,7 @@ class DirectUnpacker(threading.Thread):
|
||||
# The first NZF
|
||||
self.rarfile_nzf = self.have_next_volume()
|
||||
|
||||
# Ignore if maybe this set is not there any more
|
||||
# Ignore if maybe this set is not there anymore
|
||||
# This can happen due to race/timing issues when creating the sets
|
||||
if not self.rarfile_nzf:
|
||||
return
|
||||
@@ -500,12 +506,17 @@ class DirectUnpacker(threading.Thread):
|
||||
# Reset settings
|
||||
self.reset_active()
|
||||
|
||||
def get_formatted_stats(self):
|
||||
def get_formatted_stats(self, include_time_left: bool = False):
|
||||
"""Get percentage or number of rar's done"""
|
||||
if self.cur_setname and self.cur_setname in self.total_volumes:
|
||||
# This won't work on obfuscated posts
|
||||
if self.total_volumes[self.cur_setname] >= self.cur_volume and self.cur_volume:
|
||||
return "%02d/%02d" % (self.cur_volume, self.total_volumes[self.cur_setname])
|
||||
formatted_stats = "%02d/%02d" % (self.cur_volume, self.total_volumes[self.cur_setname])
|
||||
if include_time_left:
|
||||
formatted_stats += add_time_left(
|
||||
(self.cur_volume / self.total_volumes[self.cur_setname]) * 100, time_used=self.unpack_time
|
||||
)
|
||||
return formatted_stats
|
||||
return self.cur_volume
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -70,7 +70,7 @@ class DirScanner(threading.Thread):
|
||||
|
||||
self.newdir()
|
||||
try:
|
||||
dirscan_dir, self.ignored, self.suspected = sabnzbd.load_admin(SCAN_FILE_NAME)
|
||||
dirscan_dir, self.ignored, self.suspected = sabnzbd.filesystem.load_admin(SCAN_FILE_NAME)
|
||||
if dirscan_dir != self.dirscan_dir:
|
||||
self.ignored = {}
|
||||
self.suspected = {}
|
||||
@@ -110,7 +110,7 @@ class DirScanner(threading.Thread):
|
||||
|
||||
def save(self):
|
||||
"""Save dir scanner bookkeeping"""
|
||||
sabnzbd.save_admin((self.dirscan_dir, self.ignored, self.suspected), SCAN_FILE_NAME)
|
||||
sabnzbd.filesystem.save_admin((self.dirscan_dir, self.ignored, self.suspected), SCAN_FILE_NAME)
|
||||
|
||||
def run(self):
|
||||
"""Start the scanner"""
|
||||
@@ -178,7 +178,7 @@ class DirScanner(threading.Thread):
|
||||
continue
|
||||
|
||||
# Add the NZB's
|
||||
res, _ = sabnzbd.add_nzbfile(path, catdir=catdir, keep=False)
|
||||
res, _ = sabnzbd.nzbparser.add_nzbfile(path, catdir=catdir, keep=False)
|
||||
if res < 0:
|
||||
# Retry later, for example when we can't read the file
|
||||
self.suspected[path] = stat_tuple
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
@@ -28,15 +28,15 @@ from nntplib import NNTPPermanentError
|
||||
import socket
|
||||
import random
|
||||
import sys
|
||||
import ssl
|
||||
from typing import List, Dict, Optional, Union
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.decorators import synchronized, NzbQueueLocker, DOWNLOADER_CV
|
||||
from sabnzbd.newswrapper import NewsWrapper
|
||||
import sabnzbd.notifier
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.misc import from_units, nntp_to_msg, int_conv, get_server_addrinfo
|
||||
from sabnzbd.misc import from_units, nntp_to_msg, int_conv, get_server_addrinfo, helpful_warning
|
||||
from sabnzbd.utils.happyeyeballs import happyeyeballs
|
||||
|
||||
|
||||
@@ -73,6 +73,8 @@ class Server:
|
||||
"ssl",
|
||||
"ssl_verify",
|
||||
"ssl_ciphers",
|
||||
"ssl_context",
|
||||
"required",
|
||||
"optional",
|
||||
"retention",
|
||||
"send_group",
|
||||
@@ -103,12 +105,13 @@ class Server:
|
||||
timeout,
|
||||
threads,
|
||||
priority,
|
||||
ssl,
|
||||
use_ssl,
|
||||
ssl_verify,
|
||||
ssl_ciphers,
|
||||
send_group,
|
||||
username=None,
|
||||
password=None,
|
||||
required=False,
|
||||
optional=False,
|
||||
retention=0,
|
||||
):
|
||||
@@ -122,9 +125,11 @@ class Server:
|
||||
self.timeout: int = timeout
|
||||
self.threads: int = threads
|
||||
self.priority: int = priority
|
||||
self.ssl: bool = ssl
|
||||
self.ssl: bool = use_ssl
|
||||
self.ssl_verify: int = ssl_verify
|
||||
self.ssl_ciphers: str = ssl_ciphers
|
||||
self.ssl_context: Optional[ssl.SSLContext] = None
|
||||
self.required: bool = required
|
||||
self.optional: bool = optional
|
||||
self.retention: int = retention
|
||||
self.send_group: bool = send_group
|
||||
@@ -183,7 +188,7 @@ class Server:
|
||||
logging.debug("%s: Connecting to address %s", self.host, ip)
|
||||
elif cfg.load_balancing() == 2:
|
||||
# RFC6555 / Happy Eyeballs:
|
||||
ip = happyeyeballs(self.host, port=self.port, ssl=self.ssl)
|
||||
ip = happyeyeballs(self.host, port=self.port)
|
||||
if ip:
|
||||
logging.debug("%s: Connecting to address %s", self.host, ip)
|
||||
else:
|
||||
@@ -312,6 +317,7 @@ class Downloader(Thread):
|
||||
ssl_ciphers = srv.ssl_ciphers()
|
||||
username = srv.username()
|
||||
password = srv.password()
|
||||
required = srv.required()
|
||||
optional = srv.optional()
|
||||
retention = int(srv.retention() * 24 * 3600) # days ==> seconds
|
||||
send_group = srv.send_group()
|
||||
@@ -344,6 +350,7 @@ class Downloader(Thread):
|
||||
send_group,
|
||||
username,
|
||||
password,
|
||||
required,
|
||||
optional,
|
||||
retention,
|
||||
)
|
||||
@@ -363,8 +370,11 @@ class Downloader(Thread):
|
||||
|
||||
@NzbQueueLocker
|
||||
def set_paused_state(self, state: bool):
|
||||
"""Set downloader to specified paused state"""
|
||||
self.paused = state
|
||||
"""Set downloader to new paused state if it is changed"""
|
||||
if self.paused != state:
|
||||
if cfg.preserve_paused_state():
|
||||
cfg.start_paused.set(state)
|
||||
self.paused = state
|
||||
|
||||
@NzbQueueLocker
|
||||
def resume(self):
|
||||
@@ -372,6 +382,8 @@ class Downloader(Thread):
|
||||
if self.paused and sabnzbd.WEB_DIR:
|
||||
logging.info("Resuming")
|
||||
sabnzbd.notifier.send_notification("SABnzbd", T("Resuming"), "pause_resume")
|
||||
if cfg.preserve_paused_state():
|
||||
cfg.start_paused.set(False)
|
||||
self.paused = False
|
||||
|
||||
@NzbQueueLocker
|
||||
@@ -381,6 +393,8 @@ class Downloader(Thread):
|
||||
self.paused = True
|
||||
logging.info("Pausing")
|
||||
sabnzbd.notifier.send_notification("SABnzbd", T("Paused"), "pause_resume")
|
||||
if cfg.preserve_paused_state():
|
||||
cfg.start_paused.set(True)
|
||||
if self.is_paused():
|
||||
sabnzbd.BPSMeter.reset()
|
||||
if cfg.autodisconnect():
|
||||
@@ -413,7 +427,7 @@ class Downloader(Thread):
|
||||
if mx:
|
||||
self.bandwidth_limit = mx * self.bandwidth_perc / 100
|
||||
else:
|
||||
logging.warning_helpful(T("You must set a maximum bandwidth before you can set a bandwidth limit"))
|
||||
helpful_warning(T("You must set a maximum bandwidth before you can set a bandwidth limit"))
|
||||
else:
|
||||
self.bandwidth_limit = from_units(value)
|
||||
if mx:
|
||||
@@ -473,12 +487,16 @@ class Downloader(Thread):
|
||||
if server.errormsg != errormsg:
|
||||
server.errormsg = errormsg
|
||||
logging.warning(errormsg)
|
||||
logging.warning(T("Server %s will be ignored for %s minutes"), server.host, _PENALTY_TIMEOUT)
|
||||
if not server.required:
|
||||
logging.warning(T("Server %s will be ignored for %s minutes"), server.host, _PENALTY_TIMEOUT)
|
||||
|
||||
# Not fully the same as the code below for optional servers
|
||||
server.bad_cons = 0
|
||||
server.deactivate()
|
||||
self.plan_server(server, _PENALTY_TIMEOUT)
|
||||
if server.required:
|
||||
sabnzbd.Scheduler.plan_required_server_resume()
|
||||
else:
|
||||
server.deactivate()
|
||||
self.plan_server(server, _PENALTY_TIMEOUT)
|
||||
|
||||
# Optional and active server had too many problems.
|
||||
# Disable it now and send a re-enable plan to the scheduler
|
||||
@@ -528,11 +546,11 @@ class Downloader(Thread):
|
||||
|
||||
def run(self):
|
||||
# First check IPv6 connectivity
|
||||
sabnzbd.EXTERNAL_IPV6 = sabnzbd.test_ipv6()
|
||||
sabnzbd.EXTERNAL_IPV6 = sabnzbd.misc.test_ipv6()
|
||||
logging.debug("External IPv6 test result: %s", sabnzbd.EXTERNAL_IPV6)
|
||||
|
||||
# Then we check SSL certificate checking
|
||||
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.test_cert_checking()
|
||||
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.misc.test_cert_checking()
|
||||
logging.debug("SSL verification test: %s", sabnzbd.CERTIFICATE_VALIDATION)
|
||||
|
||||
# Kick BPS-Meter to check quota
|
||||
@@ -835,12 +853,17 @@ class Downloader(Thread):
|
||||
penalty = _PENALTY_UNKNOWN
|
||||
block = True
|
||||
if block or (penalty and server.optional):
|
||||
retry_article = False
|
||||
if server.active:
|
||||
server.deactivate()
|
||||
if penalty and (block or server.optional):
|
||||
self.plan_server(server, penalty)
|
||||
# Note that the article is discard for this server
|
||||
self.__reset_nw(nw, retry_article=False, send_quit=True)
|
||||
if server.required:
|
||||
sabnzbd.Scheduler.plan_required_server_resume()
|
||||
retry_article = True
|
||||
else:
|
||||
server.deactivate()
|
||||
if penalty and (block or server.optional):
|
||||
self.plan_server(server, penalty)
|
||||
# Note that the article is discard for this server if the server is not required
|
||||
self.__reset_nw(nw, retry_article=retry_article, send_quit=True)
|
||||
continue
|
||||
except:
|
||||
logging.error(
|
||||
@@ -929,7 +952,7 @@ class Downloader(Thread):
|
||||
# Make sure it is not in the readable sockets
|
||||
self.remove_socket(nw)
|
||||
|
||||
if nw.article:
|
||||
if nw.article and not nw.article.nzf.nzo.removed_from_queue:
|
||||
# Only some errors should count towards the total tries for each server
|
||||
if count_article_try:
|
||||
nw.article.tries += 1
|
||||
@@ -1127,3 +1150,17 @@ def check_server_quota():
|
||||
logging.warning(T("Server %s has used the specified quota"), server.displayname())
|
||||
server.quota.set("")
|
||||
config.save_config()
|
||||
|
||||
|
||||
def pause_all():
|
||||
"""Pause all activities than cause disk access"""
|
||||
sabnzbd.PAUSED_ALL = True
|
||||
sabnzbd.Downloader.pause()
|
||||
logging.debug("PAUSED_ALL active")
|
||||
|
||||
|
||||
def unpause_all():
|
||||
"""Resume all activities"""
|
||||
sabnzbd.PAUSED_ALL = False
|
||||
sabnzbd.Downloader.resume()
|
||||
logging.debug("PAUSED_ALL inactive")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2022 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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user