mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2025-12-27 01:28:10 -05:00
Compare commits
254 Commits
4.0.3
...
feature/pr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8bd39e4c12 | ||
|
|
987032b384 | ||
|
|
d516cbf363 | ||
|
|
824274ac5e | ||
|
|
82b1c784f4 | ||
|
|
232512b860 | ||
|
|
223fa421c7 | ||
|
|
2e5e72bfcf | ||
|
|
9bdb986382 | ||
|
|
901ff30e11 | ||
|
|
5e04599212 | ||
|
|
d3c9b7ead3 | ||
|
|
361770c34b | ||
|
|
5168f3fa97 | ||
|
|
94d307e198 | ||
|
|
eba6236ad2 | ||
|
|
d0128bd989 | ||
|
|
fbd7c0ec36 | ||
|
|
55abac97ea | ||
|
|
740b94170e | ||
|
|
c6a1a09213 | ||
|
|
cd84d52398 | ||
|
|
cdbad1b397 | ||
|
|
67e227008a | ||
|
|
23cf43cac5 | ||
|
|
62a057dbfb | ||
|
|
f2ff9ae557 | ||
|
|
9ed4e46919 | ||
|
|
faa71bae40 | ||
|
|
bbd5d2cd6d | ||
|
|
221e135c07 | ||
|
|
956904c0b3 | ||
|
|
8590481022 | ||
|
|
2171d0139e | ||
|
|
71d6aca9f8 | ||
|
|
0125e279c0 | ||
|
|
b8e46ccf10 | ||
|
|
787fef1c03 | ||
|
|
98b7a6171f | ||
|
|
210f254f63 | ||
|
|
ecdccda1ce | ||
|
|
ed66ac91e0 | ||
|
|
e571165c15 | ||
|
|
1513664b5f | ||
|
|
0132d81c43 | ||
|
|
8d32da8b27 | ||
|
|
b5fbc8af86 | ||
|
|
d0166b5a5c | ||
|
|
ada77d6970 | ||
|
|
9f8758b242 | ||
|
|
5ca629ebea | ||
|
|
f9f3820652 | ||
|
|
08e61ecf19 | ||
|
|
d15f0cafce | ||
|
|
1b85253940 | ||
|
|
b329ff007e | ||
|
|
f6918d598a | ||
|
|
0cdfdd82d4 | ||
|
|
de3649dba4 | ||
|
|
9ba975ac44 | ||
|
|
2b0ea92da8 | ||
|
|
b79a1e973d | ||
|
|
1be4cf986d | ||
|
|
18c4226b90 | ||
|
|
07a5ba6857 | ||
|
|
6252d02498 | ||
|
|
11cf8c5397 | ||
|
|
1f3f4a4c85 | ||
|
|
5bfe5967db | ||
|
|
476fa25a12 | ||
|
|
792bd20fa2 | ||
|
|
26f3cd064e | ||
|
|
0556a84cbc | ||
|
|
090871625a | ||
|
|
12dedb7cff | ||
|
|
d4187e93b2 | ||
|
|
1beb1aafd8 | ||
|
|
67c4703bab | ||
|
|
d850c9c6e3 | ||
|
|
38e07b0859 | ||
|
|
ea10785160 | ||
|
|
16803b9f17 | ||
|
|
b9a0cf3f76 | ||
|
|
71ff6b14da | ||
|
|
a98b3c7e85 | ||
|
|
7259c25ece | ||
|
|
5e7154530b | ||
|
|
d501cc0a23 | ||
|
|
45606285ec | ||
|
|
a5e860a60f | ||
|
|
d93333f9ef | ||
|
|
3bd68b630a | ||
|
|
97c93a0858 | ||
|
|
8b15fe0d6a | ||
|
|
2d22a5f5b9 | ||
|
|
be63fbaada | ||
|
|
dc6b338266 | ||
|
|
9e36971151 | ||
|
|
9dc08d16b6 | ||
|
|
182a5412a5 | ||
|
|
cb15c79e4b | ||
|
|
06e6e81779 | ||
|
|
938b833954 | ||
|
|
596f069e46 | ||
|
|
e16a7f06d6 | ||
|
|
2947f2c2ff | ||
|
|
0d33039b72 | ||
|
|
682f8227fd | ||
|
|
dc1675073d | ||
|
|
d71f4eb802 | ||
|
|
e55756469d | ||
|
|
3764b705a8 | ||
|
|
1e4ef9c381 | ||
|
|
8188d8256a | ||
|
|
5fb2fcb059 | ||
|
|
0bb2f677b2 | ||
|
|
4d324de343 | ||
|
|
8e2972edae | ||
|
|
550ff83781 | ||
|
|
db793810eb | ||
|
|
1fb24c5705 | ||
|
|
cbbdfce5cd | ||
|
|
8576e377fa | ||
|
|
0d500f443f | ||
|
|
bed6dacff2 | ||
|
|
8643c6b260 | ||
|
|
71e529ebe9 | ||
|
|
fc951b964f | ||
|
|
900d3d6b71 | ||
|
|
2b3b5e02f5 | ||
|
|
b1b75dcad2 | ||
|
|
b558b1c6b4 | ||
|
|
9e58b97362 | ||
|
|
1f4f4f1a5f | ||
|
|
bc705b5563 | ||
|
|
677850e18a | ||
|
|
1f2c3af660 | ||
|
|
667ffec667 | ||
|
|
9837c23daf | ||
|
|
ab3bef3d2f | ||
|
|
58cb710d38 | ||
|
|
afbb340f8d | ||
|
|
f378741152 | ||
|
|
9f88bda8e5 | ||
|
|
33ebb1593f | ||
|
|
b0b91bd002 | ||
|
|
77518cf1f5 | ||
|
|
8b329ed602 | ||
|
|
0b27b21e75 | ||
|
|
d7da55c823 | ||
|
|
e6c15e2f73 | ||
|
|
c3dbd77c17 | ||
|
|
f7901711a9 | ||
|
|
ec8fee0a75 | ||
|
|
ca6ce3af09 | ||
|
|
65eaf0fc76 | ||
|
|
bfba8d10cf | ||
|
|
6cd89a5614 | ||
|
|
16163c7c5f | ||
|
|
0482fbed05 | ||
|
|
d0f1574893 | ||
|
|
e64167bb99 | ||
|
|
22098c5424 | ||
|
|
273c56aa0b | ||
|
|
a951361fa6 | ||
|
|
2795c3718b | ||
|
|
1a365bdefd | ||
|
|
d3db70baab | ||
|
|
20324ad88b | ||
|
|
80f34bdf3e | ||
|
|
f2dbdb95dc | ||
|
|
0e3893122d | ||
|
|
831ff6e3ae | ||
|
|
b62d17cbee | ||
|
|
b95d6cfca0 | ||
|
|
d0d1876783 | ||
|
|
df23bf21ea | ||
|
|
934561e551 | ||
|
|
de6c560027 | ||
|
|
9c582fccc8 | ||
|
|
cab5c26e3e | ||
|
|
cca6dda9e6 | ||
|
|
77aea23007 | ||
|
|
42c5403bbe | ||
|
|
b14dacd44d | ||
|
|
abd47ddcf7 | ||
|
|
8611e65fc6 | ||
|
|
8663fe39e3 | ||
|
|
4891213a88 | ||
|
|
828ea8e61a | ||
|
|
f6fae7c0b8 | ||
|
|
b4b446e770 | ||
|
|
9ff4fdaab8 | ||
|
|
d3bfbb0642 | ||
|
|
57ab0a05f7 | ||
|
|
296aee9757 | ||
|
|
3d8c408627 | ||
|
|
11cdb24558 | ||
|
|
589cc69498 | ||
|
|
6f17ab1f02 | ||
|
|
7cbbff727f | ||
|
|
daa07ed2d2 | ||
|
|
b3ced3bb40 | ||
|
|
20127e5bcd | ||
|
|
f7a5e462b7 | ||
|
|
728bc723c2 | ||
|
|
b1f75ec35b | ||
|
|
1709c778a6 | ||
|
|
769e110ffb | ||
|
|
a0808d2d4c | ||
|
|
59bd38ddc7 | ||
|
|
000ecb5669 | ||
|
|
8525f60488 | ||
|
|
24329faf5c | ||
|
|
4a72c6fdf9 | ||
|
|
8235c3048e | ||
|
|
209e9f0573 | ||
|
|
9455121647 | ||
|
|
fa7a11617e | ||
|
|
a6c62bc118 | ||
|
|
dbf4073da4 | ||
|
|
552ca12bc1 | ||
|
|
e13968eec1 | ||
|
|
2ce56c8581 | ||
|
|
8d6cc8c86a | ||
|
|
488719de1e | ||
|
|
8cb4011a44 | ||
|
|
9ff0bab873 | ||
|
|
3331738f2b | ||
|
|
e768ceea96 | ||
|
|
cb4215910c | ||
|
|
b9e014b8bd | ||
|
|
96f0743ce5 | ||
|
|
560766dfa0 | ||
|
|
a2bbccd3ea | ||
|
|
5570b804ba | ||
|
|
3ff1d4b68c | ||
|
|
d19d3c382c | ||
|
|
05a68a7506 | ||
|
|
9aacf4c780 | ||
|
|
0390dc14c5 | ||
|
|
1ee1ef836a | ||
|
|
bf1080ac5a | ||
|
|
ee4fdb9563 | ||
|
|
a179f2a895 | ||
|
|
b4c3a4b19f | ||
|
|
71e203f19c | ||
|
|
07283ba9ab | ||
|
|
decfb2c168 | ||
|
|
71778656da | ||
|
|
517d6e3e1a | ||
|
|
e11e9e7201 | ||
|
|
135b9336a4 | ||
|
|
e0d4d4abbd |
30
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
30
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
name: Bug report
|
||||
description: >
|
||||
Did you discover a bug in SABnzbd? Report it here!
|
||||
If you are not 100% certain this is a bug please go to our forums, Reddit or Discord server first.
|
||||
labels:
|
||||
- Bug
|
||||
body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: SABnzbd version
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating system
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Using Docker image
|
||||
options:
|
||||
- linuxserver
|
||||
- hotio
|
||||
- Other
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: Include error logs directly or link to extended logs on https://pastebin.com/
|
||||
validations:
|
||||
required: true
|
||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Support forum
|
||||
url: https://forums.sabnzbd.org/
|
||||
about: Support questions can be asked on our forums, Reddit or Discord server.
|
||||
- name: Discord
|
||||
url: https://discord.gg/KQzDe7fvNU
|
||||
about: Support questions can be asked on our forums, Reddit or Discord server.
|
||||
- name: Reddit - r/sabnzbd
|
||||
url: https://www.reddit.com/r/sabnzbd
|
||||
about: Support questions can be asked on our forums, Reddit or Discord server.
|
||||
10
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
10
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
name: Feature request
|
||||
description: What new feature would you like to have added to SABnzbd?
|
||||
labels:
|
||||
- Feature request
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
validations:
|
||||
required: true
|
||||
5
.github/renovate.json
vendored
5
.github/renovate.json
vendored
@@ -8,12 +8,12 @@
|
||||
"before 8am on Monday"
|
||||
],
|
||||
"ignorePaths": [
|
||||
"tests/**",
|
||||
".github/workflows/**"
|
||||
],
|
||||
"pip_requirements": {
|
||||
"fileMatch": [
|
||||
"requirements.txt",
|
||||
"tests/requirements.txt",
|
||||
"builder/requirements.txt",
|
||||
"builder/release-requirements.txt",
|
||||
"builder/osx/requirements.txt"
|
||||
@@ -21,7 +21,8 @@
|
||||
},
|
||||
"ignoreDeps": [
|
||||
"jaraco.text",
|
||||
"sabctools"
|
||||
"sabctools",
|
||||
"werkzeug"
|
||||
],
|
||||
"packageRules": [
|
||||
{
|
||||
|
||||
26
.github/workflows/build_release.yml
vendored
26
.github/workflows/build_release.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python 3.11 (64bit)
|
||||
- name: Set up Python 3.12 (64bit)
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.11"
|
||||
python-version: "3.12"
|
||||
architecture: "x64"
|
||||
- name: Cache Python virtualenv (64bit)
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
@@ -63,8 +63,8 @@ jobs:
|
||||
run: |
|
||||
python --version
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r builder/requirements.txt
|
||||
pip install --upgrade -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r builder/requirements.txt --no-dependencies
|
||||
- name: Build Windows standalone binary (32bit and legacy)
|
||||
run: python builder/package.py binary
|
||||
- name: Upload Windows standalone binary (32bit and legacy)
|
||||
@@ -81,7 +81,7 @@ jobs:
|
||||
# We need the official Python, because the GA ones only support newer macOS versions
|
||||
# The deployment target is picked up by the Python build tools automatically
|
||||
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
|
||||
PYTHON_VERSION: "3.11.3"
|
||||
PYTHON_VERSION: "3.12.0"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.9"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch x86_64 -arch arm64
|
||||
@@ -98,10 +98,7 @@ jobs:
|
||||
if: steps.cache-python-download.outputs.cache-hit != 'true'
|
||||
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 /
|
||||
unlink /usr/local/bin/python
|
||||
ln -s /usr/local/bin/python3 /usr/local/bin/python
|
||||
run: sudo installer -pkg ~/python.pkg -target /
|
||||
- name: Cache Python virtualenv
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv
|
||||
@@ -112,19 +109,18 @@ jobs:
|
||||
# We have to manually take a few steps:
|
||||
# 1. Because building cryptography is hard, and we cannot force pip to fetch universal2 version we
|
||||
# first install the x86 version (and it's dependencies) and then manually fetch the universal2 build
|
||||
# https://github.com/pyca/cryptography/issues/5918
|
||||
# 2. Due to PyObjC we cannot run pip on the main requirements without installing dependencies
|
||||
# 3. We need to build the PyInstaller bootloader:
|
||||
# https://github.com/pypa/pip/issues/5453
|
||||
# 2. We need to build the PyInstaller bootloader:
|
||||
# https://github.com/pyinstaller/pyinstaller/issues/6235
|
||||
if: steps.cache-virtualenv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
python3 --version
|
||||
pip3 install --upgrade pip wheel
|
||||
|
||||
pip3 install --upgrade -r requirements.txt --no-binary cffi
|
||||
|
||||
pip3 install --upgrade -r requirements.txt --no-binary cffi --no-dependencies
|
||||
|
||||
pip3 uninstall cryptography -y
|
||||
pip3 download -r builder/osx/requirements.txt --platform macosx_10_12_universal2 --only-binary :all: --no-deps --dest .
|
||||
pip3 download -r builder/osx/requirements.txt --platform macosx_10_12_universal2 --only-binary :all: --no-dependencies --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 --no-dependencies
|
||||
|
||||
6
.github/workflows/integration_testing.yml
vendored
6
.github/workflows/integration_testing.yml
vendored
@@ -31,18 +31,18 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: ["3.8", "3.9", "3.10", "3.11"]
|
||||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||
python-architecture: ["x64"]
|
||||
name: ["Linux"]
|
||||
os: [ubuntu-20.04]
|
||||
include:
|
||||
- name: macOS
|
||||
os: macos-latest
|
||||
python-version: "3.11"
|
||||
python-version: "3.12"
|
||||
python-architecture: "x64"
|
||||
- name: Windows
|
||||
os: windows-latest
|
||||
python-version: "3.11"
|
||||
python-version: "3.12"
|
||||
python-architecture: "x64"
|
||||
- name: Windows (32bit)
|
||||
os: windows-latest
|
||||
|
||||
13
.github/workflows/stale.yml
vendored
13
.github/workflows/stale.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: "Close stale issues"
|
||||
name: "Close and lock old issues"
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
@@ -20,3 +20,14 @@ jobs:
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
exempt-issue-labels: "Feature request, Work in progress, Bug"
|
||||
|
||||
lock:
|
||||
name: "Lock old issues"
|
||||
if: github.repository_owner == 'sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v4
|
||||
with:
|
||||
log-output: true
|
||||
issue-inactive-days: 60
|
||||
pr-inactive-days: 60
|
||||
|
||||
4
.github/workflows/translations.yml
vendored
4
.github/workflows/translations.yml
vendored
@@ -21,10 +21,10 @@ jobs:
|
||||
- name: Push/pull Transifex translations
|
||||
if: env.TX_TOKEN
|
||||
# Add --translation to the push command in order to update Transifex using local translation edits
|
||||
# However, this prevents modifying existing translations in Transifex as they will be overwritten by the push!
|
||||
# However, this prevents modifying existing translations in Transifex as they will be overwritten by the push!
|
||||
run: |
|
||||
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
|
||||
./tx push --source
|
||||
./tx push --source
|
||||
./tx pull --all --force
|
||||
- name: Compile translations to validate them
|
||||
run: |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
The SABnzbd-team is:
|
||||
The SABnzbd-Team is:
|
||||
|
||||
Active team:
|
||||
Safihre
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-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
|
||||
@@ -55,7 +55,7 @@ Specific guides to install from source are available for Windows and macOS:
|
||||
Only Python 3.8 and above is supported.
|
||||
|
||||
On Linux systems you need to install:
|
||||
par2 unrar unzip python3-setuptools python3-pip
|
||||
par2 unrar python3-setuptools python3-pip
|
||||
|
||||
On non-X86 platforms, for which PyPI does not provide all pre-compiled packages,
|
||||
you also need to install these development libraries (exact names might differ per platform):
|
||||
|
||||
@@ -48,11 +48,3 @@
|
||||
You can make SABnzbd wait for a mount of the "temporary download folder" by setting
|
||||
Config->Special->wait_for_dfolder to 1.
|
||||
SABnzbd will appear to hang until the drive is mounted.
|
||||
|
||||
- If you experience speed-drops to KB/s when using a VPN, try setting the number of connections
|
||||
to your servers to a total of 7. There is a CPU-usage reduction feature in SABnzbd that
|
||||
gets confused by the way some VPN's handle the state of a connection. Below 8 connections
|
||||
this feature is not active.
|
||||
|
||||
- If the queue is paused but one or more jobs have the Force priority, SABnzbd might still
|
||||
download some data from other jobs in the queue if active servers have unused connections.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-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
|
||||
|
||||
47
README.mkd
47
README.mkd
@@ -1,37 +1,24 @@
|
||||
Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
Release Notes - SABnzbd 4.2.0 Alpha 2
|
||||
=========================================================
|
||||
|
||||
## Changes since 3.7.2
|
||||
- In this major update we replaced a core part of Python's SSL handling
|
||||
with our own improved version. This results in large performance increases
|
||||
when downloading from news servers with SSL enabled.
|
||||
In addition, the general connection handling was overhauled, resulting in
|
||||
performance improvements for all news servers.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
We are trying to find the most optimal default settings, so you
|
||||
can help us by letting us know the results on your system!
|
||||
- When adding a new news server, SSL is enabled by default.
|
||||
- File assembly performance significantly improved by relying on the
|
||||
CRC32 instead of the MD5 to perform QuickCheck of files.
|
||||
- Slowdown more gracefully when the cache fills up.
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
- HTTPS files are included in the `Backup`.
|
||||
- Improved `Watched Folder` scanning and processing.
|
||||
- Ignore resource fork files created by macOS.
|
||||
- `Deobfuscate final filenames` is enabled for new installations.
|
||||
- Dropped support for Python 3.7.
|
||||
## Changes since 4.1.0
|
||||
- Numerous smaller performance improvements were made.
|
||||
- Reduced recursive unpacking to 2 levels, instead of 5.
|
||||
- IPv6 addresses are preferred during server address selection.
|
||||
- Stricter check if `Complete Folder` is inside `Download Folder`.
|
||||
- Windows: Reduced size of installer.
|
||||
- Windows/macOS: Updated to Python 3.12.
|
||||
|
||||
## Bugfixes since 3.7.2
|
||||
- Restore applying `History Retention` setting at startup.
|
||||
- Windows: Not all invalid characters were removed from filenames.
|
||||
- Windows: Firewall rules were not removed by uninstaller.
|
||||
## Bugfixes since 4.1.0
|
||||
- Multi-select in the queue was broken for some users.
|
||||
- Prevent crash during saving of configuration.
|
||||
- Removing a failed download from the history could break active downloads.
|
||||
|
||||
## Upgrade notices
|
||||
- The download statistics file `totals10.sab` is updated in 3.2.x
|
||||
version. If you downgrade to 3.1.x or lower, detailed download
|
||||
statistics will be lost.
|
||||
- Direct upgrade is possible from version 3.0.0 and newer.
|
||||
Upgrading from older versions will require `Queue repair`.
|
||||
- Downgrading from version 4.2.0 or newer to 3.7.2 or older will
|
||||
require `Queue repair` due to changes in the internal data format.
|
||||
|
||||
## Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
@@ -43,4 +30,4 @@ Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
46
README.txt
46
README.txt
@@ -1,46 +0,0 @@
|
||||
Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
=========================================================
|
||||
|
||||
## Changes since 3.7.2
|
||||
- In this major update we replaced a core part of Python's SSL handling
|
||||
with our own improved version. This results in large performance increases
|
||||
when downloading from news servers with SSL enabled.
|
||||
In addition, the general connection handling was overhauled, resulting in
|
||||
performance improvements for all news servers.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
We are trying to find the most optimal default settings, so you
|
||||
can help us by letting us know the results on your system!
|
||||
- When adding a new news server, SSL is enabled by default.
|
||||
- File assembly performance significantly improved by relying on the
|
||||
CRC32 instead of the MD5 to perform QuickCheck of files.
|
||||
- Slowdown more gracefully when the cache fills up.
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
- HTTPS files are included in the `Backup`.
|
||||
- Improved `Watched Folder` scanning and processing.
|
||||
- Ignore resource fork files created by macOS.
|
||||
- `Deobfuscate final filenames` is enabled for new installations.
|
||||
- Dropped support for Python 3.7.
|
||||
|
||||
## Bugfixes since 3.7.2
|
||||
- Restore applying `History Retention` setting at startup.
|
||||
- Windows: Not all invalid characters were removed from filenames.
|
||||
- Windows: Firewall rules were not removed by uninstaller.
|
||||
|
||||
## Upgrade notices
|
||||
- The download statistics file `totals10.sab` is updated in 3.2.x
|
||||
version. If you downgrade to 3.1.x or lower, detailed download
|
||||
statistics will be lost.
|
||||
|
||||
## Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
|
||||
## About
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically, thanks
|
||||
to its web-based user interface and advanced built-in post-processing options
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
53
SABnzbd.py
53
SABnzbd.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2007-2023 The SABnzbd-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
|
||||
@@ -244,7 +244,7 @@ def print_version():
|
||||
"""
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2007-2023 The SABnzbd-Team <team@sabnzbd.org>
|
||||
Copyright (C) 2007-2023 The SABnzbd-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
|
||||
@@ -448,7 +448,8 @@ def print_modules():
|
||||
|
||||
if sabnzbd.WIN32 and sabnzbd.newsunpack.MULTIPAR_COMMAND:
|
||||
logging.info("MultiPar binary... found (%s)", sabnzbd.newsunpack.MULTIPAR_COMMAND)
|
||||
elif sabnzbd.newsunpack.PAR2_COMMAND:
|
||||
|
||||
if sabnzbd.newsunpack.PAR2_COMMAND:
|
||||
logging.info("par2 binary... found (%s)", sabnzbd.newsunpack.PAR2_COMMAND)
|
||||
else:
|
||||
logging.error(T("par2 binary... NOT found!"))
|
||||
@@ -470,18 +471,12 @@ def print_modules():
|
||||
# Do not allow downloading
|
||||
sabnzbd.NO_DOWNLOADING = True
|
||||
|
||||
# If available, we prefer 7zip over unzip
|
||||
if sabnzbd.newsunpack.SEVENZIP_COMMAND:
|
||||
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVENZIP_COMMAND)
|
||||
if not (sabnzbd.WIN32 or sabnzbd.MACOS):
|
||||
logging.info("7za binary version %s", sabnzbd.newsunpack.SEVENZIP_VERSION)
|
||||
else:
|
||||
logging.info(T("7za binary... NOT found!"))
|
||||
|
||||
if sabnzbd.newsunpack.ZIP_COMMAND:
|
||||
logging.info("unzip binary... found (%s)", sabnzbd.newsunpack.ZIP_COMMAND)
|
||||
else:
|
||||
logging.info(T("unzip binary... NOT found!"))
|
||||
logging.warning(T("7za binary... NOT found!"))
|
||||
|
||||
if not sabnzbd.WIN32:
|
||||
if sabnzbd.newsunpack.NICE_COMMAND:
|
||||
@@ -629,10 +624,6 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
except socket.error:
|
||||
cherryhost = cherryhost.strip("[]")
|
||||
|
||||
if ipv6 and ipv4 and not is_localhost(browserhost):
|
||||
sabnzbd.AMBI_LOCALHOST = True
|
||||
logging.info("IPV6 has priority on this system, potential Firefox issue")
|
||||
|
||||
if ipv6 and ipv4 and cherryhost == "" and sabnzbd.WIN32:
|
||||
helpful_warning(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
|
||||
|
||||
@@ -761,26 +752,9 @@ def commandline_handler():
|
||||
serv_opts = [os.path.normpath(os.path.abspath(sys.argv[0]))]
|
||||
upload_nzbs = []
|
||||
|
||||
# macOS binary: get rid of the weird -psn_0_123456 parameter
|
||||
for arg in sys.argv:
|
||||
if arg.startswith("-psn_"):
|
||||
sys.argv.remove(arg)
|
||||
break
|
||||
|
||||
# Ugly hack to remove the extra "SABnzbd*" parameter the Windows binary
|
||||
# gets when it's restarted
|
||||
if len(sys.argv) > 1 and "sabnzbd" in sys.argv[1].lower() and not sys.argv[1].startswith("-"):
|
||||
slice_start = 2
|
||||
else:
|
||||
slice_start = 1
|
||||
|
||||
# Prepend options from env-variable to options
|
||||
info = os.environ.get("SABnzbd", "").split()
|
||||
info.extend(sys.argv[slice_start:])
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(
|
||||
info,
|
||||
sys.argv[1:],
|
||||
"phdvncwl:s:f:t:b:2:",
|
||||
[
|
||||
"pause",
|
||||
@@ -863,7 +837,7 @@ def main():
|
||||
|
||||
autobrowser = None
|
||||
autorestarted = False
|
||||
sabnzbd.MY_FULLNAME = sys.argv[0]
|
||||
sabnzbd.MY_FULLNAME = __file__
|
||||
sabnzbd.MY_NAME = os.path.basename(sabnzbd.MY_FULLNAME)
|
||||
fork = False
|
||||
pause = False
|
||||
@@ -931,6 +905,7 @@ def main():
|
||||
exit_sab(1)
|
||||
elif opt == "--console":
|
||||
console_logging = True
|
||||
sabnzbd.RESTART_ARGS.append(opt)
|
||||
elif opt in ("-v", "--version"):
|
||||
print_version()
|
||||
exit_sab(0)
|
||||
@@ -975,7 +950,7 @@ def main():
|
||||
org_dir = os.getcwd()
|
||||
|
||||
# Need console logging if requested, for SABnzbd.py and SABnzbd-console.exe
|
||||
console_logging = console_logging or sabnzbd.MY_NAME.lower().find("-console") > 0 or not hasattr(sys, "frozen")
|
||||
console_logging = console_logging or sys.executable.endswith("console.exe") or not hasattr(sys, "frozen")
|
||||
console_logging = console_logging and not sabnzbd.DAEMON
|
||||
|
||||
LOGLEVELS = (logging.FATAL, logging.WARNING, logging.INFO, logging.DEBUG)
|
||||
@@ -1374,7 +1349,6 @@ def main():
|
||||
"server.socket_host": cherryhost,
|
||||
"server.socket_port": cherryport,
|
||||
"server.shutdown_timeout": 0,
|
||||
"log.screen": False,
|
||||
"engine.autoreload.on": False,
|
||||
"tools.encode.on": True,
|
||||
"tools.gzip.on": True,
|
||||
@@ -1386,13 +1360,11 @@ def main():
|
||||
)
|
||||
|
||||
# Do we want CherryPy Logging? Cannot be done via the config
|
||||
cherrypy.log.screen = False
|
||||
cherrypy.log.access_log.propagate = False
|
||||
if cherrypylogging:
|
||||
sabnzbd.WEBLOGFILE = os.path.join(logdir, DEF_LOG_CHERRY)
|
||||
cherrypy.log.screen = True
|
||||
cherrypy.log.access_log.propagate = True
|
||||
cherrypy.log.access_file = str(sabnzbd.WEBLOGFILE)
|
||||
else:
|
||||
cherrypy.log.access_log.propagate = False
|
||||
|
||||
# Force mimetypes (OS might overwrite them)
|
||||
forced_mime_types = {"css": "text/css", "js": "application/javascript"}
|
||||
@@ -1605,9 +1577,8 @@ def main():
|
||||
if hasattr(sys, "frozen"):
|
||||
if sabnzbd.MACOS:
|
||||
# On macOS restart of app instead of embedded python
|
||||
my_name = sabnzbd.MY_FULLNAME.replace("/Contents/MacOS/SABnzbd", "")
|
||||
my_args = " ".join(sys.argv[1:])
|
||||
cmd = 'kill -9 %s && open "%s" --args %s' % (os.getpid(), my_name, my_args)
|
||||
cmd = 'kill -9 %s && open "%s" --args %s' % (os.getpid(), sys.executable, my_args)
|
||||
logging.info("Launching: %s", cmd)
|
||||
os.system(cmd)
|
||||
elif sabnzbd.WIN_SERVICE:
|
||||
|
||||
@@ -41,7 +41,7 @@ else:
|
||||
|
||||
# Windows
|
||||
extra_hiddenimports.append("win32timezone")
|
||||
EXTRA_FOLDERS += ["win/multipar/", "win/unrar/", "win/7zip/"]
|
||||
EXTRA_FOLDERS += ["win/multipar/", "win/par2/", "win/unrar/", "win/7zip/"]
|
||||
EXTRA_FILES += ["portable.cmd"]
|
||||
|
||||
# Parse the version info
|
||||
@@ -96,7 +96,7 @@ pyi_analysis = Analysis(
|
||||
["SABnzbd.py"],
|
||||
datas=extra_pyinstaller_files,
|
||||
hiddenimports=extra_hiddenimports,
|
||||
excludes=["ujson", "FixTk", "tcl", "tk", "_tkinter", "tkinter", "Tkinter"],
|
||||
excludes=["ujson", "FixTk", "tcl", "tk", "_tkinter", "tkinter", "Tkinter", "pydoc", "pydoc_data.topics"],
|
||||
)
|
||||
|
||||
pyz = PYZ(pyi_analysis.pure, pyi_analysis.zipped_data)
|
||||
@@ -113,10 +113,10 @@ exe = EXE(
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name="SABnzbd",
|
||||
upx=True,
|
||||
console=False,
|
||||
append_pkg=False,
|
||||
icon="icons/sabnzbd.ico",
|
||||
contents_directory=".",
|
||||
version=version_info,
|
||||
target_arch="universal2",
|
||||
entitlements_file="builder/osx/entitlements.plist",
|
||||
@@ -134,9 +134,9 @@ if sys.platform == "win32":
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name="SABnzbd-console",
|
||||
upx=True,
|
||||
append_pkg=False,
|
||||
icon="icons/sabnzbd.ico",
|
||||
contents_directory=".",
|
||||
version=version_info,
|
||||
)
|
||||
|
||||
@@ -145,7 +145,6 @@ if sys.platform == "win32":
|
||||
pyi_analysis.binaries,
|
||||
pyi_analysis.zipfiles,
|
||||
pyi_analysis.datas,
|
||||
upx=True,
|
||||
name="SABnzbd-console",
|
||||
)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2017 The SABnzbd-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
|
||||
@@ -19,6 +19,7 @@ import os
|
||||
|
||||
# Constants
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
APPDATA_FILE = "linux/org.sabnzbd.sabnzbd.appdata.xml"
|
||||
|
||||
# To draft a release or not to draft a release?
|
||||
ON_GITHUB_ACTIONS = os.environ.get("CI", False)
|
||||
@@ -29,6 +30,9 @@ with open(VERSION_FILE) as version_file:
|
||||
exec(version_file.read())
|
||||
RELEASE_VERSION = __version__
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
PRERELEASE = len(RELEASE_VERSION) > 5
|
||||
|
||||
# Define release name
|
||||
RELEASE_NAME = "SABnzbd-%s" % RELEASE_VERSION
|
||||
RELEASE_TITLE = "SABnzbd %s" % RELEASE_VERSION
|
||||
@@ -41,7 +45,8 @@ RELEASE_README = "README.mkd"
|
||||
|
||||
# Used in package.py and SABnzbd.spec
|
||||
EXTRA_FILES = [
|
||||
"README.mkd",
|
||||
RELEASE_README,
|
||||
"README.txt",
|
||||
"INSTALL.txt",
|
||||
"LICENSE.txt",
|
||||
"GPL2.txt",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2017 The SABnzbd-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,3 +1,3 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==40.0.2
|
||||
cryptography==41.0.5
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2017 The SABnzbd-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
|
||||
@@ -58,11 +58,16 @@ def safe_remove(path):
|
||||
os.remove(path)
|
||||
|
||||
|
||||
def delete_files_glob(name):
|
||||
"""Delete one file or set of files from wild-card spec"""
|
||||
for f in glob.glob(name):
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
def delete_files_glob(glob_pattern: str, allow_no_matches: bool = False):
|
||||
"""Delete one file or set of files from wild-card spec.
|
||||
We expect to match at least 1 file, to force expected behavior"""
|
||||
if files_to_remove := glob.glob(glob_pattern):
|
||||
for path in files_to_remove:
|
||||
if os.path.exists(path):
|
||||
os.remove(path)
|
||||
else:
|
||||
if not allow_no_matches:
|
||||
raise FileNotFoundError(f"No files found that match '{glob_pattern}'")
|
||||
|
||||
|
||||
def run_external_command(command: List[str], print_output: bool = True):
|
||||
@@ -157,10 +162,13 @@ def test_sab_binary(binary_path: str):
|
||||
|
||||
# Print logs for verification
|
||||
with open(os.path.join(config_dir, "logs", "sabnzbd.log"), "r") as log_file:
|
||||
print(log_file.read())
|
||||
# Wait after printing so the output is nicely displayed in case of problems
|
||||
print(log_text := log_file.read())
|
||||
time.sleep(5)
|
||||
|
||||
# So we have time to print the file before the directory is removed
|
||||
time.sleep(5)
|
||||
# Make sure no extra errors/warnings were reported
|
||||
if "ERROR" in log_text or "WARNING" in log_text:
|
||||
raise RuntimeError("Warning or error reported during execution")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -208,8 +216,10 @@ if __name__ == "__main__":
|
||||
|
||||
# Check what architecture we are on
|
||||
RELEASE_BINARY = RELEASE_BINARY_32
|
||||
BUILDING_64BIT = False
|
||||
if platform.architecture()[0] == "64bit":
|
||||
RELEASE_BINARY = RELEASE_BINARY_64
|
||||
BUILDING_64BIT = True
|
||||
|
||||
# Remove any leftovers
|
||||
safe_remove(RELEASE_BINARY)
|
||||
@@ -221,17 +231,20 @@ if __name__ == "__main__":
|
||||
safe_remove("dist/SABnzbd-console")
|
||||
|
||||
# Remove unwanted DLL's
|
||||
delete_files_glob("dist/SABnzbd/api-ms-win*.dll")
|
||||
delete_files_glob("dist/SABnzbd/mfc140u.dll")
|
||||
delete_files_glob("dist/SABnzbd/ucrtbase.dll")
|
||||
shutil.rmtree("dist/SABnzbd/Pythonwin")
|
||||
if BUILDING_64BIT:
|
||||
# These are only present on 64bit (Python 3.9+)
|
||||
delete_files_glob("dist/SABnzbd/api-ms-win*.dll", allow_no_matches=True)
|
||||
delete_files_glob("dist/SABnzbd/ucrtbase.dll", allow_no_matches=True)
|
||||
|
||||
# Remove other files we don't need
|
||||
delete_files_glob("dist/SABnzbd/win32ui.pyd")
|
||||
delete_files_glob("dist/SABnzbd/winxpgui.pyd")
|
||||
# Remove 32bit external executables
|
||||
delete_files_glob("dist/SABnzbd/win/par2/par2.exe")
|
||||
delete_files_glob("dist/SABnzbd/win/multipar/par2j.exe")
|
||||
delete_files_glob("dist/SABnzbd/win/unrar/UnRAR.exe")
|
||||
|
||||
if "installer" in sys.argv:
|
||||
# Needs to be run on 64 bit
|
||||
if RELEASE_BINARY != RELEASE_BINARY_64:
|
||||
if not BUILDING_64BIT:
|
||||
raise RuntimeError("Installer should be created on 64bit Python")
|
||||
|
||||
# Compile NSIS translations
|
||||
@@ -240,10 +253,6 @@ if __name__ == "__main__":
|
||||
shutil.copyfile("builder/win/NSIS_Installer.nsi", "NSIS_Installer.nsi")
|
||||
run_external_command([sys.executable, "tools/make_mo.py", "nsis"])
|
||||
|
||||
# Remove 32bit external executables
|
||||
delete_files_glob("dist/SABnzbd/win/par2/multipar/par2j.exe")
|
||||
delete_files_glob("dist/SABnzbd/win/unrar/UnRAR.exe")
|
||||
|
||||
# Run NSIS to build installer
|
||||
run_external_command(
|
||||
[
|
||||
@@ -279,9 +288,8 @@ if __name__ == "__main__":
|
||||
# Otherwise the signature of the main application becomes invalid
|
||||
if authority:
|
||||
files_to_sign = [
|
||||
"osx/par2/par2-sl64",
|
||||
"osx/par2/arm64/par2",
|
||||
"osx/par2/arm64/libomp.dylib",
|
||||
"osx/par2/par2-turbo",
|
||||
"osx/par2/arm64/par2-turbo",
|
||||
"osx/unrar/unrar",
|
||||
"osx/unrar/arm64/unrar",
|
||||
"osx/7zip/7zz",
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
PyGithub==1.58.2
|
||||
praw==7.7.0
|
||||
PyGithub==2.1.1
|
||||
praw==7.7.1
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2017 The SABnzbd-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
|
||||
@@ -19,12 +19,14 @@ import hashlib
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
import github
|
||||
import praw
|
||||
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
PRERELEASE,
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
@@ -33,6 +35,7 @@ from constants import (
|
||||
RELEASE_README,
|
||||
RELEASE_THIS,
|
||||
RELEASE_TITLE,
|
||||
APPDATA_FILE,
|
||||
)
|
||||
|
||||
# Verify we have all assets
|
||||
@@ -49,6 +52,11 @@ for file_to_check in files_to_check:
|
||||
raise RuntimeError("Not all release files are present!")
|
||||
print("All release files are present")
|
||||
|
||||
# Verify that appdata file is updated
|
||||
if not PRERELEASE:
|
||||
if not isinstance(ET.parse(APPDATA_FILE).find(f"./releases/release[@version='{RELEASE_VERSION}']"), ET.Element):
|
||||
raise RuntimeError(f"Could not find {RELEASE_VERSION} in {APPDATA_FILE}")
|
||||
|
||||
# Calculate hashes for Synology release
|
||||
with open(RELEASE_SRC, "rb") as inp_file:
|
||||
source_data = inp_file.read()
|
||||
@@ -69,9 +77,6 @@ if RELEASE_THIS and gh_token:
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_data = readme_file.read()
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
prerelease = len(RELEASE_VERSION) > 5
|
||||
|
||||
# We have to manually check if we already created this release
|
||||
for release in gh_repo.get_releases():
|
||||
if release.tag_name == RELEASE_VERSION:
|
||||
@@ -86,7 +91,7 @@ if RELEASE_THIS and gh_token:
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=True,
|
||||
prerelease=prerelease,
|
||||
prerelease=PRERELEASE,
|
||||
)
|
||||
|
||||
# Fetch existing assets, as overwriting is not allowed by GitHub
|
||||
@@ -119,7 +124,7 @@ if RELEASE_THIS and gh_token:
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=False,
|
||||
prerelease=prerelease,
|
||||
prerelease=PRERELEASE,
|
||||
)
|
||||
|
||||
# Update the website
|
||||
@@ -146,7 +151,7 @@ if RELEASE_THIS and gh_token:
|
||||
latest_txt_items = latest_txt.decoded_content.split()
|
||||
new_latest_txt_items = latest_txt_items[:2]
|
||||
config_yml = gh_repo_web.get_contents("_config.yml")
|
||||
if prerelease:
|
||||
if PRERELEASE:
|
||||
# If it's a pre-release, we append to current version in latest.txt
|
||||
new_latest_txt_items.extend([RELEASE_VERSION_BYTES, latest_txt_items[1]])
|
||||
# And replace in _config.yml
|
||||
@@ -205,7 +210,7 @@ if RELEASE_THIS and gh_token:
|
||||
|
||||
# Merge pull-request
|
||||
print("Merging pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
update_pr.merge(method="squash")
|
||||
update_pr.merge(merge_method="squash")
|
||||
|
||||
# Only with GitHub success we proceed to Reddit
|
||||
if reddit_token := os.environ.get("REDDIT_TOKEN", ""):
|
||||
@@ -227,18 +232,31 @@ if RELEASE_THIS and gh_token:
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_lines = readme_file.readlines()
|
||||
|
||||
# Put the download link after the title
|
||||
readme_lines[2] = "## https://sabnzbd.org/downloads\n"
|
||||
|
||||
# Use the header in the readme as title
|
||||
title = readme_lines[0]
|
||||
release_notes_text = "".join(readme_lines[3:])
|
||||
|
||||
# Post always to r/SABnzbd
|
||||
print("Posting release notes to Reddit: r/sabnzbd")
|
||||
submission = subreddit_sabnzbd.submit(title, selftext=release_notes_text)
|
||||
release_notes_text = "".join(readme_lines[2:])
|
||||
print("Posting release notes to Reddit")
|
||||
|
||||
# Only stable releases to r/usenet
|
||||
if not prerelease:
|
||||
print("Cross-posting release notes to Reddit: r/usenet")
|
||||
submission.crosspost(subreddit_usenet)
|
||||
if not PRERELEASE:
|
||||
# Get correct flair-id (required by r/usenet)
|
||||
for flair in subreddit_usenet.flair.link_templates.user_selectable():
|
||||
if flair["flair_text"] == "News":
|
||||
print("Posting to r/usenet")
|
||||
submission = subreddit_usenet.submit(
|
||||
title, selftext=release_notes_text, flair_id=flair["flair_template_id"]
|
||||
)
|
||||
break
|
||||
else:
|
||||
raise ValueError("Could not locate flair_text for posting to r/usenet")
|
||||
|
||||
# Post always to r/SABnzbd
|
||||
print("Posting to r/sabnzbd")
|
||||
subreddit_sabnzbd.submit(title, selftext=release_notes_text)
|
||||
|
||||
else:
|
||||
print("Missing REDDIT_TOKEN")
|
||||
|
||||
|
||||
@@ -1,23 +1,28 @@
|
||||
# Basic build requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
pyinstaller==5.11.0
|
||||
pyinstaller-hooks-contrib==2023.3
|
||||
altgraph==0.17.3
|
||||
wrapt==1.15.0
|
||||
setuptools==67.8.0
|
||||
pyinstaller==6.2.0
|
||||
packaging==23.2
|
||||
pyinstaller-hooks-contrib==2023.10
|
||||
altgraph==0.17.4
|
||||
wrapt==1.16.0
|
||||
setuptools==68.2.2
|
||||
certifi
|
||||
|
||||
# orjson does not support 32bit Windows, exclude it based on Python-version
|
||||
# This way we also test ujson on Python 3.8 in the CI-tests
|
||||
orjson==3.8.14; python_version > '3.8'
|
||||
# Required on 32bit Windows, exclude it based on Python-version
|
||||
importlib_metadata==6.8.0; python_version < '3.10'
|
||||
importlib_resources==6.1.1; python_version < '3.10'
|
||||
zipp==3.17.0; python_version < '3.10'
|
||||
|
||||
# orjson does not support 32bit Windows, also exclude based on Python-version
|
||||
orjson==3.9.10; python_version > '3.8'
|
||||
|
||||
# For the Windows build
|
||||
pefile==2023.2.7; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.0; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.2; sys_platform == 'win32'
|
||||
|
||||
# For the macOS build
|
||||
dmgbuild==1.6.1; sys_platform == 'darwin'
|
||||
mac-alias==2.2.2; sys_platform == 'darwin'
|
||||
macholib==1.16.2; sys_platform == 'darwin'
|
||||
macholib==1.16.3; sys_platform == 'darwin'
|
||||
ds-store==1.3.1; sys_platform == 'darwin'
|
||||
PyNaCl==1.5.0; sys_platform == 'darwin'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; -*- coding: utf-8 -*-
|
||||
;
|
||||
; Copyright 2008-2015 The SABnzbd-Team <team@sabnzbd.org>
|
||||
; Copyright 2008-2015 The SABnzbd-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
|
||||
@@ -32,7 +32,7 @@ Unicode true
|
||||
|
||||
;------------------------------------------------------------------
|
||||
;
|
||||
; Marco for removing existing and the current installation
|
||||
; Macro for removing existing and the current installation
|
||||
; It shared by the installer and the uninstaller.
|
||||
;
|
||||
!define RemovePrev "!insertmacro RemovePrev"
|
||||
@@ -66,7 +66,6 @@ Unicode true
|
||||
RequestExecutionLevel admin
|
||||
FileErrorText "If you have no admin rights, try to install into a user directory."
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
;Variables
|
||||
Var MUI_TEMP
|
||||
@@ -169,6 +168,7 @@ Unicode true
|
||||
Section "SABnzbd" SecDummy
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
SetShellVarContext all
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Make sure old versions are gone (reg-key already read in onInt)
|
||||
@@ -194,7 +194,7 @@ Section "SABnzbd" SecDummy
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayName" "SABnzbd ${SAB_VERSION}"
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayVersion" '${SAB_VERSION}'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Publisher" 'The SABnzbd Team'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Publisher" 'The SABnzbd-Team'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "HelpLink" 'https://forums.sabnzbd.org/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLInfoAbout" 'https://sabnzbd.org/wiki/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLUpdateInfo" 'https://sabnzbd.org/'
|
||||
@@ -251,7 +251,7 @@ Function .onInit
|
||||
; Change settings based on if SAB was already installed
|
||||
ReadRegStr $PREV_INST_DIR HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
StrCmp $PREV_INST_DIR "" noPrevInstall
|
||||
; We want to use the user's costom dir if he used one
|
||||
; We want to use the user's custom dir if he used one
|
||||
StrCmp $PREV_INST_DIR "$PROGRAMFILES\SABnzbd" noSpecialDir
|
||||
StrCmp $PREV_INST_DIR "$PROGRAMFILES64\SABnzbd" noSpecialDir
|
||||
; Set what the user had before
|
||||
@@ -260,10 +260,18 @@ Function .onInit
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Check what the user has currently set for install options
|
||||
SetShellVarContext current
|
||||
IfFileExists "$SMPROGRAMS\Startup\SABnzbd.lnk" 0 endCheckStartup
|
||||
SectionSetFlags ${startup} 1
|
||||
SetShellVarContext all
|
||||
IfFileExists "$SMPROGRAMS\Startup\SABnzbd.lnk" 0 endCheckStartup
|
||||
SectionSetFlags ${startup} 1
|
||||
endCheckStartup:
|
||||
|
||||
SetShellVarContext current
|
||||
IfFileExists "$DESKTOP\SABnzbd.lnk" endCheckDesktop 0
|
||||
SectionSetFlags ${desktop} 0 ; SAB is installed but desktop-icon not, so uncheck it
|
||||
SetShellVarContext all
|
||||
IfFileExists "$DESKTOP\SABnzbd.lnk" endCheckDesktop 0
|
||||
SectionSetFlags ${desktop} 0 ; SAB is installed but desktop-icon not, so uncheck it
|
||||
endCheckDesktop:
|
||||
@@ -347,6 +355,22 @@ Section "un.$(MsgDelProgram)" Uninstall
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd.exe" "SABnzbd"
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd-console.exe" "SABnzbd-console"
|
||||
|
||||
SetShellVarContext all
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url"
|
||||
RMDir "$SMPROGRAMS\$MUI_TEMP"
|
||||
|
||||
Delete "$SMPROGRAMS\Startup\SABnzbd.lnk"
|
||||
|
||||
Delete "$DESKTOP\SABnzbd.lnk"
|
||||
|
||||
SetShellVarContext current
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/bootstrap/css/bootstrap.min.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/chartist.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/style.css?v=$version" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/${color_scheme}.css?v=$version"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<link rel="shortcut icon" href="${root}staticcfg/ico/favicon.ico?v=$version" />
|
||||
|
||||
@@ -67,14 +70,14 @@
|
||||
<script type="text/javascript" src="${root}staticcfg/js/script.js?v=$version"></script>
|
||||
<script type="text/javascript">
|
||||
// Set default functions for the autocomplete everywhere
|
||||
\$.extend(\$.fn.typeahead.defaults, {
|
||||
jQuery.extend(jQuery.fn.typeahead.defaults, {
|
||||
source: function (query, process) {
|
||||
// If there's no separator, it must be a relative path
|
||||
if(query.split(folderSeperator).length < 2 && this.\$element.data('initialdir')) {
|
||||
query = this.\$element.data('initialdir') + folderSeperator + query;
|
||||
}
|
||||
// Get info from the API
|
||||
return \$.get(folderBrowseUrl + '&compact=1&term=' + query, function (data) {
|
||||
return jQuery.get(folderBrowseUrl + '&compact=1&term=' + query, function (data) {
|
||||
return process(data);
|
||||
});
|
||||
},
|
||||
|
||||
@@ -43,35 +43,17 @@
|
||||
<!--#end if#-->
|
||||
<!--#if not $windows and not $macos#-->
|
||||
<tr>
|
||||
<th scope="row">$T('opt-multicore-par2')</th>
|
||||
<th scope="row">Par2cmdline-turbo:</th>
|
||||
<td>
|
||||
<!--#if $have_mt_par2#-->
|
||||
<!--#if $have_par2_turbo#-->
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
<!--#else#-->
|
||||
<span class="label label-warning">$T('notAvailable')</span> $T('explain-getpar2mt')
|
||||
<a href="https://sabnzbd.org/wiki/installation/multicore-par2" target="_blank">https://sabnzbd.org/wiki/installation/multicore-par2</a>
|
||||
<span class="label label-warning">$T('notAvailable')</span> $T('explain-getpar2turbo')<br>
|
||||
<a href="https://sabnzbd.org/wiki/installation/par2cmdline-turbo" target="_blank">https://sabnzbd.org/wiki/installation/par2cmdline-turbo</a>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if not $have_sabctools#-->
|
||||
<tr>
|
||||
<th scope="row">SABCTools:</th>
|
||||
<td>
|
||||
<span class="label label-danger">$T('notAvailable')</span>
|
||||
<a href="$help_uri#no_sabctools" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if not $have_unzip and not $have_7zip #-->
|
||||
<tr>
|
||||
<th scope="row">$T('opt-enable_unzip'):</th>
|
||||
<td>
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="https://sabnzbd.org/wiki/installation/install-off-modules#toc8" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if not $have_7zip #-->
|
||||
<tr>
|
||||
<th scope="row">$T('opt-enable_7zip'):</th>
|
||||
@@ -123,8 +105,8 @@
|
||||
</div>
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2007-2023 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<div class="padding">
|
||||
<h5 class="copyright">Copyright © 2007-2023 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -105,29 +105,29 @@
|
||||
</div>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function() {
|
||||
\$('.delCat').click(function() {
|
||||
var theForm = \$(this).closest("form");
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.delCat').click(function() {
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
});
|
||||
|
||||
// Add autocomplete and file-browser
|
||||
\$('.fileBrowserSmall').typeahead({appendTo: 'body'}).fileBrowser();
|
||||
jQuery('.fileBrowserSmall').typeahead({appendTo: 'body'}).fileBrowser();
|
||||
|
||||
// Make categories sortable
|
||||
\$('.padTable').sortable({
|
||||
jQuery('.padTable').sortable({
|
||||
items: '.sorting-row',
|
||||
containment: '.colmask',
|
||||
axis: 'y',
|
||||
update: function(event, ui) {
|
||||
\$('.Categories form.sorting-row').each(function(index, elm) {
|
||||
jQuery('.Categories form.sorting-row').each(function(index, elm) {
|
||||
// Update order of all elements
|
||||
if(index != elm.order.value) {
|
||||
if(index !== elm.order.value) {
|
||||
elm.order.value = index
|
||||
// Submit changed order
|
||||
var data = {}
|
||||
\$(elm).extractFormDataTo(data);
|
||||
\$.ajax({
|
||||
jQuery(elm).extractFormDataTo(data);
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: window.location.pathname + 'save',
|
||||
data: data,
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="log_dir">$T('opt-log_dir')</label>
|
||||
<input type="text" name="log_dir" id="log_dir" value="$log_dir" data-initialdir="$my_lcldata" />
|
||||
<a class="btn btn-default" id="purge_log_files" href="${root}"><span class="glyphicon glyphicon-trash"></span> $T('purge_log_files')</a>
|
||||
<span class="desc">$T('explain-log_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -132,7 +133,19 @@
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
// Add autocomplete and file-browser
|
||||
\$('.col1 input[name$="_dir"]').typeahead().fileBrowser();
|
||||
jQuery('.col1 input[name$="_dir"]').typeahead().fileBrowser();
|
||||
|
||||
jQuery('#purge_log_files').click(function () {
|
||||
if ( confirm("$T('confirm')") ) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode: 'config', name: 'purge_log_files', output: 'json', apikey: jQuery('#apikey').val()}
|
||||
})
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -264,41 +264,41 @@
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
jQuery(document).ready(function(){
|
||||
// Show the message about translating when it's non-English
|
||||
function hideOrShowTranslate() {
|
||||
if(\$('#language').val() == 'en') {
|
||||
\$('.alert-translate').hide()
|
||||
if(jQuery('#language').val() === 'en') {
|
||||
jQuery('.alert-translate').hide()
|
||||
} else {
|
||||
\$('.alert-translate').show()
|
||||
jQuery('.alert-translate').show()
|
||||
}
|
||||
}
|
||||
\$('#language').on('change', function() {
|
||||
jQuery('#language').on('change', function() {
|
||||
// Show message
|
||||
hideOrShowTranslate()
|
||||
// Re-load page on submit
|
||||
\$('.fullform').submit(function() {
|
||||
jQuery('.fullform').submit(function() {
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
// No JSON response
|
||||
\$('#ajax').val('')
|
||||
jQuery('#ajax').val('')
|
||||
})
|
||||
hideOrShowTranslate()
|
||||
|
||||
// Highlight in case user is not safe
|
||||
// So when exposed to internet and no password, no external limit or no username/password
|
||||
var safeCheck = \$('#host, #inet_exposure, #${pid}_wu, #${pid}_wp')
|
||||
var safeCheck = jQuery('#host, #inet_exposure, #${pid}_wu, #${pid}_wp')
|
||||
function checkSafety() {
|
||||
if(\$('#host').val() != 'localhost' && \$('#host').val() != '127.0.0.1') {
|
||||
if(jQuery('#host').val() !== 'localhost' && jQuery('#host').val() !== '127.0.0.1') {
|
||||
// No limitation on local-network
|
||||
if(\$('#inet_exposure').val() > 3) {
|
||||
if(jQuery('#inet_exposure').val() > 3) {
|
||||
// And no username and password?
|
||||
if(!\$('#${pid}_wu').val() || !\$('#${pid}_wp').val()) {
|
||||
if(!jQuery('#${pid}_wu').val() || !jQuery('#${pid}_wp').val()) {
|
||||
// Add warning icon if not there already
|
||||
if(!\$('.host-warning').length) {
|
||||
if(!jQuery('.host-warning').length) {
|
||||
safeCheck.after('<span class="glyphicon glyphicon-alert host-warning"></span>')
|
||||
\$('.host-warning').tooltip({'title': '$T('checkSafety')'})
|
||||
jQuery('.host-warning').tooltip({'title': '$T('checkSafety')'})
|
||||
safeCheck.addClass('host-warning-highlight')
|
||||
}
|
||||
return
|
||||
@@ -306,57 +306,57 @@
|
||||
}
|
||||
}
|
||||
// Remove warnings
|
||||
\$('.host-warning').remove()
|
||||
jQuery('.host-warning').remove()
|
||||
safeCheck.removeClass('host-warning-highlight')
|
||||
}
|
||||
checkSafety()
|
||||
safeCheck.on('change', checkSafety)
|
||||
|
||||
// Click functions
|
||||
\$('#apikey, #nzbkey').click(function () { \$(this).select() });
|
||||
jQuery('#apikey, #nzbkey').click(function () { jQuery(this).select() });
|
||||
|
||||
\$('#generate_new_apikey').click(function () {
|
||||
jQuery('#generate_new_apikey').click(function () {
|
||||
if (confirm("$T('confirm')")) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode:'config', name:'set_apikey', apikey: \$('#apikey').val()},
|
||||
data: {mode:'config', name:'set_apikey', apikey: jQuery('#apikey').val()},
|
||||
success: function(msg){
|
||||
\$('#apikey').val(msg);
|
||||
jQuery('#apikey').val(msg);
|
||||
document.location = document.location;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
\$('#generate_new_nzbkey').click(function () {
|
||||
jQuery('#generate_new_nzbkey').click(function () {
|
||||
if (confirm("$T('confirm')")) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: { mode:'config', name:'set_nzbkey', apikey: \$('#apikey').val() },
|
||||
data: { mode:'config', name:'set_nzbkey', apikey: jQuery('#apikey').val() },
|
||||
success: function(msg){
|
||||
\$('#nzbkey').val(msg);
|
||||
jQuery('#nzbkey').val(msg);
|
||||
document.location = document.location;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
\$('.show_qrcode').click(function (e) {
|
||||
jQuery('.show_qrcode').click(function (e) {
|
||||
// Show in modal
|
||||
\$('#modal_qr .modal-dialog').width(330)
|
||||
\$('#modal_qr .modal-body').html('').qrcode({
|
||||
jQuery('#modal_qr .modal-dialog').width(330)
|
||||
jQuery('#modal_qr .modal-body').html('').qrcode({
|
||||
"size": 280,
|
||||
"color": "#3a3",
|
||||
"text": \$(this).attr('rel')
|
||||
"text": jQuery(this).attr('rel')
|
||||
});
|
||||
\$('#modal_qr').modal('show');
|
||||
jQuery('#modal_qr').modal('show');
|
||||
|
||||
// No save on this button click
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
\$('.generate_cert').click(function(e) {
|
||||
jQuery('.generate_cert').click(function(e) {
|
||||
if(!confirm('$T('explain-new-cert')')) {
|
||||
return;
|
||||
}
|
||||
@@ -365,7 +365,7 @@
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: { mode: 'config', name: 'regenerate_certs', apikey: \$('#apikey').val() },
|
||||
data: { mode: 'config', name: 'regenerate_certs', apikey: jQuery('#apikey').val() },
|
||||
success: function(msg) {
|
||||
do_restart()
|
||||
}
|
||||
@@ -375,35 +375,35 @@
|
||||
})
|
||||
|
||||
// Only allow re-generate if default certs
|
||||
if(\$('#https_cert').val() != '$def_https_cert_file') {
|
||||
\$('.generate_cert').attr('disabled', 'disabled')
|
||||
if(jQuery('#https_cert').val() !== '$def_https_cert_file') {
|
||||
jQuery('.generate_cert').attr('disabled', 'disabled')
|
||||
}
|
||||
|
||||
// Parse the text
|
||||
var bandwidthLimit = \$('#bandwidth_max').val()
|
||||
var bandwidthLimit = jQuery('#bandwidth_max').val()
|
||||
if(bandwidthLimit) {
|
||||
var bandwithLimitNumber = parseFloat(bandwidthLimit)
|
||||
var bandwithLimitText = bandwidthLimit.replace(/[^a-zA-Z]+/g, '');
|
||||
if(bandwithLimitNumber) {
|
||||
\$('#bandwidth_max_value').val(bandwithLimitNumber)
|
||||
\$('#bandwidth_max_dropdown').val(bandwithLimitText)
|
||||
jQuery('#bandwidth_max_value').val(bandwithLimitNumber)
|
||||
jQuery('#bandwidth_max_dropdown').val(bandwithLimitText)
|
||||
}
|
||||
}
|
||||
|
||||
// Update the value
|
||||
\$('#bandwidth_max_value, #bandwidth_max_dropdown').on('change', function() {
|
||||
if(\$('#bandwidth_max_value').val()) {
|
||||
\$('#bandwidth_max').val(\$('#bandwidth_max_value').val() + \$('#bandwidth_max_dropdown').val())
|
||||
jQuery('#bandwidth_max_value, #bandwidth_max_dropdown').on('change', function() {
|
||||
if(jQuery('#bandwidth_max_value').val()) {
|
||||
jQuery('#bandwidth_max').val(jQuery('#bandwidth_max_value').val() + jQuery('#bandwidth_max_dropdown').val())
|
||||
} else {
|
||||
\$('#bandwidth_max').val('')
|
||||
jQuery('#bandwidth_max').val('')
|
||||
}
|
||||
})
|
||||
|
||||
\$('#create_backup').click(function () {
|
||||
jQuery('#create_backup').click(function () {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode:'config', name:'create_backup', output:'json', apikey: \$('#apikey').val()},
|
||||
data: {mode:'config', name:'create_backup', output:'json', apikey: jQuery('#apikey').val()},
|
||||
success: function(data) {
|
||||
if(data.value.result) {
|
||||
alert("$T('backup'):\n" + data.value.message)
|
||||
|
||||
@@ -367,24 +367,24 @@
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
jQuery(document).ready(function(){
|
||||
// Expand on enable
|
||||
\$('.col2 input[name$="enable"]').change(function() {
|
||||
jQuery('.col2 input[name$="enable"]').change(function() {
|
||||
if(this.checked) {
|
||||
\$(this).parents('.section').find('.col1').show()
|
||||
\$(this).parents('.col2').find('.col2-cats').show()
|
||||
jQuery(this).parents('.section').find('.col1').show()
|
||||
jQuery(this).parents('.col2').find('.col2-cats').show()
|
||||
} else {
|
||||
\$(this).parents('.section').find('.col1').hide()
|
||||
\$(this).parents('.col2').find('.col2-cats').hide()
|
||||
jQuery(this).parents('.section').find('.col1').hide()
|
||||
jQuery(this).parents('.col2').find('.col2-cats').hide()
|
||||
}
|
||||
\$('form').submit()
|
||||
jQuery('form').submit()
|
||||
addRowColor()
|
||||
})
|
||||
\$('#email_endjob').change(function() {
|
||||
if(\$(this).val() > 0) {
|
||||
\$(this).parents('.section').find('.col2-cats').show()
|
||||
jQuery('#email_endjob').change(function() {
|
||||
if(jQuery(this).val() > 0) {
|
||||
jQuery(this).parents('.section').find('.col2-cats').show()
|
||||
} else {
|
||||
\$(this).parents('.section').find('.col2-cats').hide()
|
||||
jQuery(this).parents('.section').find('.col2-cats').hide()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -393,27 +393,27 @@
|
||||
**/
|
||||
function testNotification(buttonObj) {
|
||||
// Confirm?
|
||||
if(\$(buttonObj).attr('rel')) {
|
||||
if(!confirm(\$(buttonObj).attr('rel'))) return false;
|
||||
if(jQuery(buttonObj).attr('rel')) {
|
||||
if(!confirm(jQuery(buttonObj).attr('rel'))) return false;
|
||||
}
|
||||
// Disable button and get the data
|
||||
\$(buttonObj).attr("disabled", "disabled")
|
||||
\$(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
jQuery(buttonObj).attr("disabled", "disabled")
|
||||
jQuery(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
var data = { mode: buttonObj.id, apikey: '$apikey', output: 'json' };
|
||||
\$(buttonObj).parents('.section').extractFormDataTo(data);
|
||||
jQuery(buttonObj).parents('.section').extractFormDataTo(data);
|
||||
|
||||
// Clear up the box
|
||||
resultBox = \$(buttonObj).parents('.section').find('.result-box .alert');
|
||||
resultBox = jQuery(buttonObj).parents('.section').find('.result-box .alert');
|
||||
|
||||
// Get the request
|
||||
\$.ajax({
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
data: data
|
||||
}).then(function(data) {
|
||||
// Remove disabled and make the box
|
||||
\$(buttonObj).removeAttr("disabled")
|
||||
\$(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
jQuery(buttonObj).removeAttr("disabled")
|
||||
jQuery(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
resultBox.removeClass('alert-success alert-danger').show()
|
||||
if(data.status) {
|
||||
resultBox.addClass('alert-success')
|
||||
@@ -426,7 +426,7 @@
|
||||
}
|
||||
})
|
||||
}
|
||||
\$('#test_email, #test_notif, #test_windows, #test_pushbullet, #test_pushover, #test_prowl, #test_osd, #test_nscript').click(function () {
|
||||
jQuery('#test_email, #test_notif, #test_windows, #test_pushbullet, #test_pushover, #test_prowl, #test_osd, #test_nscript').click(function () {
|
||||
testNotification(this)
|
||||
})
|
||||
});
|
||||
|
||||
@@ -551,43 +551,43 @@ function urlencode(str) {
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
}
|
||||
|
||||
\$(document).ready(function(){
|
||||
\$('.favicon').each(function(i, theContainer) {
|
||||
jQuery(document).ready(function(){
|
||||
jQuery('.favicon').each(function(i, theContainer) {
|
||||
// Easy favicon grabber
|
||||
var favUrl = '//' + \$(theContainer).data('domain') + '/favicon.ico'
|
||||
var favUrl = '//' + jQuery(theContainer).data('domain') + '/favicon.ico'
|
||||
|
||||
// Does the image exist? Otherwise place a glyphicon
|
||||
var testFavImg = new Image();
|
||||
testFavImg.src = favUrl;
|
||||
testFavImg.onerror = function (evt){
|
||||
\$(theContainer).append('<span class="glyphicon glyphicon-list"></span>')
|
||||
jQuery(theContainer).append('<span class="glyphicon glyphicon-list"></span>')
|
||||
}
|
||||
})
|
||||
|
||||
\$('.tabs a').click(function (e) {
|
||||
jQuery('.tabs a').click(function (e) {
|
||||
e.preventDefault()
|
||||
\$(this).tab('show')
|
||||
jQuery(this).tab('show')
|
||||
})
|
||||
|
||||
\$('.editFeed').click(function(){
|
||||
var oldURI = \$(this).prev().val();
|
||||
var whichFeed = \$(this).attr("rel");
|
||||
jQuery('.editFeed').click(function(){
|
||||
var oldURI = jQuery(this).prev().val();
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
|
||||
// Fill the values
|
||||
\$('#feed_edit_name_label').text(whichFeed)
|
||||
\$('#feed_edit_old_name').val(whichFeed)
|
||||
\$('#feed_edit_new_name').val(whichFeed)
|
||||
\$('#feed_edit_url').val(oldURI)
|
||||
jQuery('#feed_edit_name_label').text(whichFeed)
|
||||
jQuery('#feed_edit_old_name').val(whichFeed)
|
||||
jQuery('#feed_edit_new_name').val(whichFeed)
|
||||
jQuery('#feed_edit_url').val(oldURI)
|
||||
|
||||
// Show the modal
|
||||
\$('#rss_edit_modal').modal('show');
|
||||
jQuery('#rss_edit_modal').modal('show');
|
||||
});
|
||||
|
||||
\$('.delFeed').click(function(e){
|
||||
jQuery('.delFeed').click(function(e){
|
||||
e.preventDefault();
|
||||
if ( confirm("$T('confirm')") ) {
|
||||
var whichFeed = \$(this).attr("rel");
|
||||
\$.ajax({
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "del_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
@@ -600,9 +600,9 @@ function urlencode(str) {
|
||||
}
|
||||
});
|
||||
|
||||
\$('.toggleFeedCheckbox').click(function(){
|
||||
var whichFeed = \$(this).attr("rel");
|
||||
\$.ajax({
|
||||
jQuery('.toggleFeedCheckbox').click(function(){
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggle_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
@@ -615,34 +615,34 @@ function urlencode(str) {
|
||||
});
|
||||
|
||||
// Only the Accept filter needs all the options
|
||||
\$('form[action="upd_rss_filter"]').find('select[name="filter_type"]').change(function() {
|
||||
\$(this).parent().parent().find('select:not([name="filter_type"])').attr('disabled', \$(this).val() != "A" && \$(this).val() != "S")
|
||||
jQuery('form[action="upd_rss_filter"]').find('select[name="filter_type"]').change(function() {
|
||||
jQuery(this).parent().parent().find('select:not([name="filter_type"])').attr('disabled', jQuery(this).val() !== "A" && jQuery(this).val() !== "S")
|
||||
})
|
||||
// Trigger on-load for all
|
||||
\$('.disabled_options_rule').find('td select:not([name="filter_type"])').attr('disabled', true)
|
||||
jQuery('.disabled_options_rule').find('td select:not([name="filter_type"])').attr('disabled', true)
|
||||
|
||||
function setActiveIcon(objButton) {
|
||||
// Let's make it look like things are happening!
|
||||
\$(objButton).attr('disabled', true)
|
||||
\$(objButton).find('span').remove()
|
||||
\$(objButton).prepend('<span class="glyphicon glyphicon-transfer"></span>')
|
||||
jQuery(objButton).attr('disabled', true)
|
||||
jQuery(objButton).find('span').remove()
|
||||
jQuery(objButton).prepend('<span class="glyphicon glyphicon-transfer"></span>')
|
||||
}
|
||||
|
||||
// Enable sorting and set default
|
||||
if (\$('#rss-tab-matched table').length) {
|
||||
\$('#rss-tab-matched table').tablesort().data('tablesort').sort(\$('#rss-tab-matched th.default-sort'), 'desc');
|
||||
if (jQuery('#rss-tab-matched table').length) {
|
||||
jQuery('#rss-tab-matched table').tablesort().data('tablesort').sort(jQuery('#rss-tab-matched th.default-sort'), 'desc');
|
||||
}
|
||||
if (\$('#rss-tab-not-matched table').length) {
|
||||
\$('#rss-tab-not-matched table').tablesort().data('tablesort').sort(\$('#rss-tab-not-matched th.default-sort'), 'desc');
|
||||
if (jQuery('#rss-tab-not-matched table').length) {
|
||||
jQuery('#rss-tab-not-matched table').tablesort().data('tablesort').sort(jQuery('#rss-tab-not-matched th.default-sort'), 'desc');
|
||||
}
|
||||
if (\$('#rss-tab-done table').length) {
|
||||
\$('#rss-tab-done table').tablesort().data('tablesort').sort(\$('#rss-tab-done th.default-sort'), 'desc');
|
||||
if (jQuery('#rss-tab-done table').length) {
|
||||
jQuery('#rss-tab-done table').tablesort().data('tablesort').sort(jQuery('#rss-tab-done th.default-sort'), 'desc');
|
||||
}
|
||||
|
||||
\$('.testFeed').click(function(){
|
||||
jQuery('.testFeed').click(function(){
|
||||
setActiveIcon(this)
|
||||
var whichFeed = \$(this).attr("rel");
|
||||
\$.ajax({
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "test_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
@@ -654,34 +654,34 @@ function urlencode(str) {
|
||||
});
|
||||
});
|
||||
|
||||
\$('.cleanFeed').click(function(){
|
||||
jQuery('.cleanFeed').click(function(){
|
||||
setActiveIcon(this)
|
||||
var theForm = \$(this).closest("form");
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "clean_rss_jobs").submit();
|
||||
});
|
||||
|
||||
\$('.evalFeed').click(function(){
|
||||
jQuery('.evalFeed').click(function(){
|
||||
setActiveIcon(this)
|
||||
var theForm = \$(this).closest("form");
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "eval_rss_feed").submit();
|
||||
});
|
||||
|
||||
\$('.delFilter').click(function(){
|
||||
var theForm = \$(this).closest("form");
|
||||
jQuery('.delFilter').click(function(){
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "del_rss_filter").submit();
|
||||
});
|
||||
|
||||
\$('form[action="download"]').ajaxForm({
|
||||
jQuery('form[action="download"]').ajaxForm({
|
||||
datatype: 'json',
|
||||
beforeSubmit: function (_, form) {
|
||||
\$(form).find('button').attr("disabled", "disabled")
|
||||
jQuery(form).find('button').attr("disabled", "disabled")
|
||||
// Remove icon and add new one
|
||||
\$(form).find('button span').remove()
|
||||
\$(form).find('button').prepend('<span class="glyphicon glyphicon-transfer"></span>')
|
||||
jQuery(form).find('button span').remove()
|
||||
jQuery(form).find('button').prepend('<span class="glyphicon glyphicon-transfer"></span>')
|
||||
},
|
||||
success: function (_, _, _, form) {
|
||||
// Set success
|
||||
\$(form).find('button').html('<span class="glyphicon glyphicon-ok"></span> $T('rss-added')')
|
||||
jQuery(form).find('button').html('<span class="glyphicon glyphicon-ok"></span> $T('rss-added')')
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -112,32 +112,32 @@ else:
|
||||
</div><!-- /section -->
|
||||
</div><!-- /colmask -->
|
||||
<script type="text/javascript">
|
||||
\$('#action').on('change', function() {
|
||||
jQuery('#action').on('change', function() {
|
||||
// Set the action
|
||||
\$('#arguments').val((\$(this).find('option:selected').data('action')))
|
||||
jQuery('#arguments').val((jQuery(this).find('option:selected').data('action')))
|
||||
|
||||
// Is it speedlimit?
|
||||
if(\$(this).find('option:selected').val() == 'speedlimit') {
|
||||
\$('#hidden_arguments').show()
|
||||
\$('#hidden_arguments input').attr('placeholder', 'Bytes/s, "1M" = 1 MB/s, "500K" = 500 KB/s')
|
||||
if(jQuery(this).find('option:selected').val() === 'speedlimit') {
|
||||
jQuery('#hidden_arguments').show()
|
||||
jQuery('#hidden_arguments input').attr('placeholder', 'Bytes/s, "1M" = 1 MB/s, "500K" = 500 KB/s')
|
||||
} else {
|
||||
\$('#hidden_arguments').hide()
|
||||
\$('#hidden_arguments input').attr('placeholder', '')
|
||||
jQuery('#hidden_arguments').hide()
|
||||
jQuery('#hidden_arguments input').attr('placeholder', '')
|
||||
}
|
||||
|
||||
/* Arguments - since we only have speedlimit with arguments, disabled for now
|
||||
if(\$(this).find('option:selected').data('noarg')) {
|
||||
\$('#hidden_arguments').hide()
|
||||
if(jQuery(this).find('option:selected').data('noarg')) {
|
||||
jQuery('#hidden_arguments').hide()
|
||||
} else {
|
||||
\$('#hidden_arguments').show()
|
||||
jQuery('#hidden_arguments').show()
|
||||
}*/
|
||||
})
|
||||
|
||||
\$('[name="schedenabled"]').click(function() {
|
||||
\$.ajax({
|
||||
jQuery('[name="schedenabled"]').click(function() {
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggleSchedule",
|
||||
data: {line: \$(this).val(), apikey: "$apikey" }
|
||||
data: {line: jQuery(this).val(), apikey: "$apikey" }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
|
||||
@@ -10,8 +10,16 @@
|
||||
var serverBandwithData = {}
|
||||
var serverArticleTries = {}
|
||||
var serverArticleFailed = {}
|
||||
|
||||
// Keep track of all used hostnames
|
||||
var hostnames = ""
|
||||
</script>
|
||||
|
||||
<div class="server-frame">
|
||||
<a href="#">×</a>
|
||||
<iframe></iframe>
|
||||
</div>
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt section">
|
||||
<button type="button" class="btn btn-default" id="addServerButton"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
@@ -69,7 +77,7 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections" min="1" max="1000" value="8" required />
|
||||
<input type="number" name="connections" id="connections" min="1" max="500" value="8" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority">$T('srv-priority')</label>
|
||||
@@ -200,7 +208,7 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections$cur">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections$cur" value="$server['connections']" min="1" max="1000" required />
|
||||
<input type="number" name="connections" id="connections$cur" value="$server['connections']" min="1" max="500" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority$cur">$T('srv-priority')</label>
|
||||
@@ -301,6 +309,9 @@
|
||||
serverBandwithData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
|
||||
serverArticleTries[${cur}] = <!--#echo json.dumps($server['amounts'][5])#-->
|
||||
serverArticleFailed[${cur}] = <!--#echo json.dumps($server['amounts'][6])#-->
|
||||
<!--#if int($server['enable']) != 0#-->
|
||||
hostnames += ",$server['host']"
|
||||
<!--#end if#-->
|
||||
</script>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
@@ -338,8 +349,8 @@
|
||||
|
||||
function showCharts() {
|
||||
// Get the constants
|
||||
const startDate = new Date(\$('#chart-start').val())
|
||||
const endDate = new Date(\$('#chart-end').val())
|
||||
const startDate = new Date(jQuery('#chart-start').val())
|
||||
const endDate = new Date(jQuery('#chart-end').val())
|
||||
const oneDay = 24 * 60 * 60 * 1000
|
||||
const nrDays = Math.round((endDate-startDate)/oneDay)
|
||||
|
||||
@@ -350,8 +361,8 @@
|
||||
var maxBandwith = 0
|
||||
|
||||
// For each chart
|
||||
\$('.server-chart').each(function(j, elemn) {
|
||||
const server_id = \$(elemn).data('serverid')
|
||||
jQuery('.server-chart').each(function(j, elemn) {
|
||||
const server_id = jQuery(elemn).data('serverid')
|
||||
var totalBandwithThisRange = 0
|
||||
var totalArticlesTriedThisRange = 0
|
||||
var totalArticlesFailedThisRange = 0
|
||||
@@ -394,7 +405,7 @@
|
||||
}
|
||||
|
||||
// Update the text value
|
||||
\$('#server-bandwith-value-' + server_id).text(filesize(totalBandwithThisRange, {round: 1}))
|
||||
jQuery('#server-bandwith-value-' + server_id).text(filesize(totalBandwithThisRange, {round: 1}))
|
||||
|
||||
// Calculate article success ratio, if available
|
||||
var articleRatio = Math.round(100 * (1 - totalArticlesFailedThisRange/totalArticlesTriedThisRange))
|
||||
@@ -402,17 +413,17 @@
|
||||
// If values were missing
|
||||
if(!isNaN(articleRatio)) {
|
||||
// Use filesize to convert to unit-display
|
||||
\$('#server-article-value-' + server_id).text('$T("srv-articles-tried")'.replace('%f', articleRatio).replace('%d', filesize(totalArticlesTriedThisRange, {unix: true, round: 0, spacer: "", base: 1})))
|
||||
jQuery('#server-article-value-' + server_id).text('$T("srv-articles-tried")'.replace('%f', articleRatio).replace('%d', filesize(totalArticlesTriedThisRange, {unix: true, round: 0, spacer: "", base: 1})))
|
||||
// If we have a low value, we link them to the website
|
||||
if(articleRatio > 60) \$('#server-article-not-complete-' + server_id).hide()
|
||||
if(articleRatio > 60) jQuery('#server-article-not-complete-' + server_id).hide()
|
||||
} else {
|
||||
\$('#server-article-value-' + server_id).text('$T("notAvailable")')
|
||||
\$('#server-article-not-complete-' + server_id).hide()
|
||||
jQuery('#server-article-value-' + server_id).text('$T("notAvailable")')
|
||||
jQuery('#server-article-not-complete-' + server_id).hide()
|
||||
}
|
||||
|
||||
// Save bandwidth data in a very ugly way, but we need to do this
|
||||
// so we can calculate the maximum Y-axis for all graphs
|
||||
\$(elemn).data("chart-data", data)
|
||||
jQuery(elemn).data("chart-data", data)
|
||||
})
|
||||
|
||||
// Set the maximum
|
||||
@@ -420,11 +431,11 @@
|
||||
chartOptions.axisY.low = 0
|
||||
|
||||
// Update all the axis with the largest value and draw the graph
|
||||
\$('.server-chart').each(function(j, elemn) {
|
||||
const server_id = \$(elemn).data('serverid')
|
||||
jQuery('.server-chart').each(function(j, elemn) {
|
||||
const server_id = jQuery(elemn).data('serverid')
|
||||
|
||||
// Show the chart
|
||||
chart = new Chartist.Line('#server-chart-'+server_id, \$(elemn).data("chart-data"), chartOptions)
|
||||
chart = new Chartist.Line('#server-chart-'+server_id, jQuery(elemn).data("chart-data"), chartOptions)
|
||||
chart.on('created', function(context) {
|
||||
// Make sure to add this as the first child so it's at the bottom
|
||||
context.svg.elem('rect', {
|
||||
@@ -436,15 +447,15 @@
|
||||
stroke: '#b9b9b9',
|
||||
'stroke-width': '1px'
|
||||
}, '', context.svg, true)
|
||||
\$('#server-chart-'+server_id+' .ct-label.ct-vertical').each(function(index, elmn) {
|
||||
jQuery('#server-chart-'+server_id+' .ct-label.ct-vertical').each(function(index, elmn) {
|
||||
elmn.innerHTML = filesize(elmn.innerHTML, {round: 1}).replace(' ','')
|
||||
})
|
||||
});
|
||||
})
|
||||
|
||||
// Limit input to sensible values
|
||||
\$('#chart-start').attr("max", \$('#chart-end').val())
|
||||
\$('#chart-end').attr("min", \$('#chart-start').val())
|
||||
jQuery('#chart-start').attr("max", jQuery('#chart-end').val())
|
||||
jQuery('#chart-end').attr("min", jQuery('#chart-start').val())
|
||||
}
|
||||
|
||||
// Need to mitigate timezone effects!
|
||||
@@ -457,12 +468,12 @@
|
||||
/**
|
||||
When finished loading
|
||||
**/
|
||||
\$(document).ready(function(){
|
||||
jQuery(document).ready(function(){
|
||||
// Exception when change of priority, reload
|
||||
\$('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
\$('.fullform').submit(function() {
|
||||
jQuery('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
jQuery('.fullform').submit(function() {
|
||||
// No ajax this time
|
||||
\$('input[name="ajax"]').val('')
|
||||
jQuery('input[name="ajax"]').val('')
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
@@ -471,7 +482,7 @@
|
||||
/**
|
||||
Update charts when changed
|
||||
**/
|
||||
\$('#chart-start, #chart-end').on('change', function(elemn) {
|
||||
jQuery('#chart-start, #chart-end').on('change', function(elemn) {
|
||||
showCharts()
|
||||
|
||||
// Lets us leave (needs to be called after the change event)
|
||||
@@ -486,16 +497,16 @@
|
||||
/**
|
||||
Click events
|
||||
**/
|
||||
\$('.showserver').click(function () {
|
||||
if(\$(this).parent().hasClass('server-disabled')) {
|
||||
\$(this).parent().parent().toggleClass('server-disabled')
|
||||
jQuery('.showserver').click(function () {
|
||||
if(jQuery(this).parent().hasClass('server-disabled')) {
|
||||
jQuery(this).parent().parent().toggleClass('server-disabled')
|
||||
}
|
||||
\$(this).parent().next().toggle();
|
||||
\$(this).parent().next().next().toggle();
|
||||
if (\$(this).text().indexOf("$T('showDetails')") > 0) {
|
||||
\$(this).html(\$(this).html().replace("$T('showDetails')", "$T('hideDetails')"));
|
||||
jQuery(this).parent().next().toggle();
|
||||
jQuery(this).parent().next().next().toggle();
|
||||
if (jQuery(this).text().indexOf("$T('showDetails')") > 0) {
|
||||
jQuery(this).html(jQuery(this).html().replace("$T('showDetails')", "$T('hideDetails')"));
|
||||
} else {
|
||||
\$(this).html(\$(this).html().replace("$T('hideDetails')", "$T('showDetails')"));
|
||||
jQuery(this).html(jQuery(this).html().replace("$T('hideDetails')", "$T('showDetails')"));
|
||||
// Recalculate the charts if changed while details were open
|
||||
showCharts()
|
||||
}
|
||||
@@ -503,24 +514,24 @@
|
||||
addRowColor()
|
||||
});
|
||||
|
||||
\$('#addServerButton').click(function(){
|
||||
\$('#addServerContent').show();
|
||||
jQuery('#addServerButton').click(function(){
|
||||
jQuery('#addServerContent').show();
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
});
|
||||
|
||||
\$('[name="ssl"]').click(function() {
|
||||
jQuery('[name="ssl"]').click(function() {
|
||||
// Use CSS transitions to do some highlighting
|
||||
var portBox = \$(this).parent().parent().find('[name="port"]')
|
||||
var portBox = jQuery(this).parent().parent().find('[name="port"]')
|
||||
if(this.checked) {
|
||||
// Enabled SSL change port when not already a custom port
|
||||
if(portBox.val() == '119') {
|
||||
if(portBox.val() === '119') {
|
||||
portBox.val('563')
|
||||
portBox.addClass('port-highlight')
|
||||
}
|
||||
} else {
|
||||
// Remove SSL port
|
||||
if(portBox.val() == '563') {
|
||||
if(portBox.val() === '563') {
|
||||
portBox.val('119')
|
||||
portBox.addClass('port-highlight')
|
||||
}
|
||||
@@ -529,16 +540,16 @@
|
||||
})
|
||||
|
||||
// Testing servers
|
||||
\$('.testServer').click(function(event){
|
||||
jQuery('.testServer').click(function(event){
|
||||
removeObfuscation()
|
||||
var theButton = \$(this)
|
||||
var theButton = jQuery(this)
|
||||
var resultBox = theButton.parents('.col1').find('.result-box .alert');
|
||||
theButton.attr("disabled", "disabled")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
\$.ajax({
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: "mode=config&name=test_server&" + \$(this).parents('form:first').serialize()
|
||||
data: "mode=config&name=test_server&" + jQuery(this).parents('form:first').serialize()
|
||||
}).then(function(data) {
|
||||
// Let's replace the link
|
||||
msg = data.value.message.replace('https://sabnzbd.org/certificate-errors', '<a href="https://sabnzbd.org/certificate-errors" class="alert-link" target="_blank">https://sabnzbd.org/certificate-errors</a>')
|
||||
@@ -560,9 +571,9 @@
|
||||
});
|
||||
});
|
||||
|
||||
\$('.delServer').click(function(){
|
||||
jQuery('.delServer').click(function(){
|
||||
if( confirm("$T('confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','delServer').submit();
|
||||
jQuery(this).parents('form:first').attr('action','delServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
@@ -571,9 +582,9 @@
|
||||
return false;
|
||||
});
|
||||
|
||||
\$('.clrServer').click(function(){
|
||||
jQuery('.clrServer').click(function(){
|
||||
if( confirm("$T('confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','clrServer').submit();
|
||||
jQuery(this).parents('form:first').attr('action','clrServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
@@ -582,9 +593,9 @@
|
||||
return false;
|
||||
});
|
||||
|
||||
\$('.toggleServerCheckbox').click(function(){
|
||||
var whichServer = \$(this).attr("name");
|
||||
\$.ajax({
|
||||
jQuery('.toggleServerCheckbox').click(function(){
|
||||
var whichServer = jQuery(this).attr("name");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggleServer",
|
||||
data: {server: whichServer, apikey: "$apikey" }
|
||||
@@ -595,6 +606,35 @@
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
});
|
||||
});
|
||||
|
||||
// Show text-ad if there is space
|
||||
if((jQuery("body").width() - jQuery("#content").width())/2 > (jQuery('.Servers .server-frame').width() + 40)) {
|
||||
// Do not show if dismissed previously
|
||||
if(localStorage.getItem("server-frame-hide-$version") === null) {
|
||||
// Let the page on the server tell us if we need to show
|
||||
function receiveMessage(event) {
|
||||
// Check origin of message for security reasons
|
||||
if(event.origin === 'https://sabnzbd.org') {
|
||||
if(event.data === 'show_server') {
|
||||
jQuery('.Servers .server-frame').show()
|
||||
jQuery('.Servers .server-frame a').click(function () {
|
||||
localStorage.setItem("server-frame-hide-$version", "hide")
|
||||
jQuery('.Servers .server-frame').hide()
|
||||
})
|
||||
}
|
||||
if(event.data === 'hide_server') {
|
||||
// Hide and don't load anymore untill the next release
|
||||
jQuery('.Servers .server-frame').hide()
|
||||
localStorage.setItem("server-frame-hide-$version", "hide")
|
||||
}
|
||||
}
|
||||
}
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
// NOTE: The hash-part cannot be seen by the server, so we don't know which hostnames you use!
|
||||
jQuery('.Servers .server-frame iframe').attr("src", "https://sabnzbd.org/servers#$active_lang" + hostnames)
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "sorting"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="padTable section explain-sorting">
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
$T('explain-sorting')
|
||||
</div>
|
||||
<div class="colmask">
|
||||
<div class="padTable section">
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
$T('explain-sorting')
|
||||
</div>
|
||||
<div class="padding alt section">
|
||||
<button type="button" class="btn btn-default addSorter"><span class="glyphicon glyphicon-plus"></span> $T('add-sorter')</button>
|
||||
<label for="advanced-settings-button" class="form-control advanced-button ">
|
||||
@@ -345,7 +344,7 @@
|
||||
</div>
|
||||
|
||||
<!--#if len($slotinfo) == 1 and ("tv" in $categories or "movies" in $categories)#-->
|
||||
<div class="section align-center alt sorting-quick-setup">
|
||||
<div class="section align-center sorting-quick-setup">
|
||||
<h3>$T('sort-quick-add'):</h3>
|
||||
<!--#if "tv" in $categories#-->
|
||||
<form action="save_sorter" method="post" autocomplete="off">
|
||||
@@ -402,53 +401,53 @@
|
||||
|
||||
// Put preset values into form fields
|
||||
function set_preset(sort_nr, sort_string, multipart_label, sample_data) {
|
||||
\$('#field_sort_string_' + sort_nr).val(sort_string);
|
||||
\$('#multipart_label_' + sort_nr).val(multipart_label);
|
||||
\$('#preview_name_' + sort_nr).val(sample_data);
|
||||
jQuery('#field_sort_string_' + sort_nr).val(sort_string);
|
||||
jQuery('#multipart_label_' + sort_nr).val(multipart_label);
|
||||
jQuery('#preview_name_' + sort_nr).val(sample_data);
|
||||
new_preview(sort_nr);
|
||||
}
|
||||
|
||||
// Handle preview
|
||||
function new_preview(sort_nr) {
|
||||
var preview_sort_string = \$('#field_sort_string_' + sort_nr).val();
|
||||
var preview_sort_string = jQuery('#field_sort_string_' + sort_nr).val();
|
||||
if(preview_sort_string.length > 2) {
|
||||
typewatch(function () {
|
||||
\$.ajax({
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
data: {
|
||||
mode: 'eval_sort',
|
||||
job_name: \$('#preview_name_' + sort_nr).val(),
|
||||
job_name: jQuery('#preview_name_' + sort_nr).val(),
|
||||
sort_string: preview_sort_string,
|
||||
multipart_label: \$('#multipart_label_' + sort_nr).val(),
|
||||
multipart_label: jQuery('#multipart_label_' + sort_nr).val(),
|
||||
apikey: '$apikey',
|
||||
output: 'json'
|
||||
},
|
||||
success: function(data) {
|
||||
\$('#preview_result_' + sort_nr).html(data.result);
|
||||
jQuery('#preview_result_' + sort_nr).html(data.result);
|
||||
},
|
||||
error: function(data) {
|
||||
\$('#preview_result_' + sort_nr).html('$T('button-failed')');
|
||||
jQuery('#preview_result_' + sort_nr).html('$T('button-failed')');
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
\$(document).ready(function() {
|
||||
\$('.delSorter').click(function() {
|
||||
var theForm = \$(this).closest("form");
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.delSorter').click(function() {
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
});
|
||||
|
||||
\$('.addSorter').click(function(){
|
||||
\$('#sorter_0').toggle();
|
||||
jQuery('.addSorter').click(function(){
|
||||
jQuery('#sorter_0').toggle();
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
});
|
||||
|
||||
\$('.showSorter').click(function () {
|
||||
var theParent = \$(this).closest("form")
|
||||
jQuery('.showSorter').click(function () {
|
||||
var theParent = jQuery(this).closest("form")
|
||||
var theSwitch = theParent.find("button.showSorter")
|
||||
theParent.find(".col1").toggle();
|
||||
if (theSwitch.text().indexOf("$T('showDetails')") > 0) {
|
||||
@@ -462,7 +461,7 @@
|
||||
|
||||
// Make the configured sorters sortable
|
||||
var hExtra = 8;
|
||||
\$(".sortables").sortable({
|
||||
jQuery(".sortables").sortable({
|
||||
items: ".sorter",
|
||||
placeholder: "sorter-placeholder",
|
||||
axis: "y",
|
||||
@@ -470,35 +469,35 @@
|
||||
start: function(event, ui){
|
||||
hPlaceholder = ui.item.outerHeight();
|
||||
ui.placeholder.height(hPlaceholder + hExtra);
|
||||
\$('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
jQuery('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
},
|
||||
cancel: ".pattern-table",
|
||||
cancel: "input,textarea,button,select,option,.pattern-table",
|
||||
change: function(event, ui) {
|
||||
ui.placeholder.stop().height(0).animate({
|
||||
height: ui.item.outerHeight() + hExtra
|
||||
}, 250);
|
||||
hPlaceholderAnim = parseInt(\$(".sorter-placeholder-anim").attr("data-height"));
|
||||
\$(".sorter-placeholder-anim").stop().height(hPlaceholderAnim + hExtra).animate({
|
||||
hPlaceholderAnim = parseInt(jQuery(".sorter-placeholder-anim").attr("data-height"));
|
||||
jQuery(".sorter-placeholder-anim").stop().height(hPlaceholderAnim + hExtra).animate({
|
||||
height: 0
|
||||
}, 250, function() {
|
||||
\$(this).remove();
|
||||
jQuery(this).remove();
|
||||
hPlaceholder = ui.item.outerHeight();
|
||||
\$('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
jQuery('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
});
|
||||
},
|
||||
stop: function(event, ui) {
|
||||
\$(".sorter-placeholder-anim").remove();
|
||||
jQuery(".sorter-placeholder-anim").remove();
|
||||
},
|
||||
// Save the config after re-ordering
|
||||
update: function(event, ui) {
|
||||
\$('.Sorting form.sorting-row').each(function(index, elm) {
|
||||
jQuery('.Sorting form.sorting-row').each(function(index, elm) {
|
||||
// Update order of all elements
|
||||
if(index != elm.order.value) {
|
||||
if(index !== elm.order.value) {
|
||||
elm.order.value = index
|
||||
// Submit changed order
|
||||
var data = {}
|
||||
\$(elm).extractFormDataTo(data);
|
||||
\$.ajax({
|
||||
jQuery(elm).extractFormDataTo(data);
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: window.location.pathname + 'save_sorter',
|
||||
data: data,
|
||||
@@ -510,9 +509,9 @@
|
||||
})
|
||||
|
||||
// On|Off switch for a configured sorter
|
||||
\$('.toggleSorterCheckbox').click(function(){
|
||||
var whichSorter = \$(this).attr("rel");
|
||||
\$.ajax({
|
||||
jQuery('.toggleSorterCheckbox').click(function(){
|
||||
var whichSorter = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggle_sorter",
|
||||
data: {sorter: whichSorter, apikey: "$apikey" }
|
||||
@@ -525,14 +524,14 @@
|
||||
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
// Preview the result of the sort string against a sample jobname
|
||||
\$('#field_sort_string_$cur, #field_sort_type_$cur, #multipart_label_$cur, #preview_name_$cur').bind("keyup focus", function() {
|
||||
jQuery('#field_sort_string_$cur, #field_sort_type_$cur, #multipart_label_$cur, #preview_name_$cur').bind("keyup focus", function() {
|
||||
new_preview($cur);
|
||||
});
|
||||
new_preview($cur);
|
||||
<!--#end for#-->
|
||||
|
||||
\$('.clearBtn').click(function(){
|
||||
\$(this).prev().val('').focus();
|
||||
jQuery('.clearBtn').click(function(){
|
||||
jQuery(this).prev().val('').focus();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -18,15 +18,6 @@
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="load_balancing">$T('opt-load_balancing')</label>
|
||||
<select name="load_balancing" id="load_balancing">
|
||||
<option value="0" <!--#if $load_balancing == 0 then 'selected="selected"' else ""#--> >$T('no-load-balancing')</option>
|
||||
<option value="1" <!--#if $load_balancing == 1 then 'selected="selected"' else ""#--> >$T('load-balancing')</option>
|
||||
<option value="2" <!--#if $load_balancing == 2 then 'selected="selected"' else ""#--> >$T('load-balancing-happy-eyeballs')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-load_balancing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="max_art_tries">$T('opt-max_art_tries')</label>
|
||||
<input type="number" name="max_art_tries" id="max_art_tries" value="$max_art_tries" min="2" max="2000" />
|
||||
@@ -50,7 +41,7 @@
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="pre_script">$T('opt-pre_script')</label>
|
||||
<select name="pre_script" id="pre_script">
|
||||
<!--#for $sc in $scripts#-->
|
||||
@@ -63,6 +54,19 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-pre_script')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="end_queue_script">$T('opt-end_queue_script')</label>
|
||||
<select name="end_queue_script" id="end_queue_script">
|
||||
<!--#for $sc in $scripts#-->
|
||||
<!--#if $sc.lower() == $end_queue_script.lower()#-->
|
||||
<option value="$sc" selected="selected">$Tspec($sc)</option>
|
||||
<!--#else#-->
|
||||
<option value="$sc">$Tspec($sc)</option>
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-end_queue_script')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="propagation_delay">$T('opt-propagation_delay')</label>
|
||||
<input type="number" name="propagation_delay" id="propagation_delay" value="$propagation_delay" /> <i>$T('minutes')</i>
|
||||
@@ -233,11 +237,6 @@
|
||||
<input type="checkbox" name="script_can_fail" id="script_can_fail" value="1" <!--#if int($script_can_fail) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-script_can_fail')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="new_nzb_on_failure">$T('opt-new_nzb_on_failure')</label>
|
||||
<input type="checkbox" name="new_nzb_on_failure" id="new_nzb_on_failure" value="1" <!--#if int($new_nzb_on_failure) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-new_nzb_on_failure')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ignore_samples">$T('opt-ignore_samples')</label>
|
||||
<input type="checkbox" name="ignore_samples" id="ignore_samples" value="1" <!--#if int($ignore_samples) > 0 then 'checked="checked"' else ""#--> />
|
||||
@@ -353,14 +352,14 @@
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function() {
|
||||
\$('#history_retention_select, #history_retention_number').on('change', updateHistoryRetention)
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#history_retention_select, #history_retention_number').on('change', updateHistoryRetention)
|
||||
function updateHistoryRetention() {
|
||||
var retention_setting = \$('#history_retention')
|
||||
var retention_select = \$('#history_retention_select').val()
|
||||
var retention_number = \$('#history_retention_number')
|
||||
var retention_setting = jQuery('#history_retention')
|
||||
var retention_select = jQuery('#history_retention_select').val()
|
||||
var retention_number = jQuery('#history_retention_number')
|
||||
// Keep all or keep none
|
||||
if(retention_select == "0" || retention_select == "-1") {
|
||||
if(retention_select === "0" || retention_select === "-1") {
|
||||
retention_number.hide()
|
||||
retention_number.val('')
|
||||
retention_number.attr('placeholder', '')
|
||||
@@ -386,24 +385,24 @@
|
||||
}
|
||||
}
|
||||
// Set the history-retention settig
|
||||
var retention_setting_value = \$('#history_retention').val()
|
||||
var retention_setting_value = jQuery('#history_retention').val()
|
||||
if(parseInt(retention_setting_value) > 0) {
|
||||
// Days or number?
|
||||
if(retention_setting_value.indexOf("d") !== -1) {
|
||||
\$('#history_retention_select').val("d")
|
||||
jQuery('#history_retention_select').val("d")
|
||||
} else {
|
||||
\$('#history_retention_select').val("n")
|
||||
jQuery('#history_retention_select').val("n")
|
||||
}
|
||||
\$('#history_retention_number').val(parseInt(retention_setting_value))
|
||||
jQuery('#history_retention_number').val(parseInt(retention_setting_value))
|
||||
} else {
|
||||
// Keep all or keep none
|
||||
\$('#history_retention_select').val(retention_setting_value)
|
||||
\$('#history_retention_number').hide()
|
||||
jQuery('#history_retention_select').val(retention_setting_value)
|
||||
jQuery('#history_retention_number').hide()
|
||||
}
|
||||
|
||||
\$('.restoreDefaults').click(function(e) {
|
||||
jQuery('.restoreDefaults').click(function(e) {
|
||||
// Get section name
|
||||
var sectionName = \$(this).parents('.section').find('.col2 h3').text().trim()
|
||||
var sectionName = jQuery(this).parents('.section').find('.col2 h3').text().trim()
|
||||
|
||||
// Confirm?
|
||||
if(!confirm("$T('explain-restoreDefaults') \""+sectionName+"\"\n$T('confirm')")) return false
|
||||
@@ -411,11 +410,11 @@
|
||||
|
||||
// Need to get all the input values, so same way as saving normally
|
||||
var key_container = {}
|
||||
\$(this).parents('.section').extractFormDataTo(key_container);
|
||||
jQuery(this).parents('.section').extractFormDataTo(key_container);
|
||||
key_container = Object.keys(key_container)
|
||||
|
||||
// Send request
|
||||
\$.ajax({
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
data: "mode=set_config_default&apikey=${apikey}&output=json&keyword=" + key_container.join('&keyword=')
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/login.css?v=$version" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/${color_scheme}.css?v=$version"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$version"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$version"></script>
|
||||
@@ -47,14 +50,14 @@
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// Tooltip
|
||||
\$('[data-toggle="tooltip"]').tooltip()
|
||||
jQuery('[data-toggle="tooltip"]').tooltip()
|
||||
// Try-catch in case somebody disabled localstorage
|
||||
try {
|
||||
// Set what was done previously
|
||||
\$('input[type="checkbox"]').prop('checked', localStorage.getItem("remember_me") === 'true')
|
||||
jQuery('input[type="checkbox"]').prop('checked', localStorage.getItem("remember_me") === 'true')
|
||||
// Store if we change something
|
||||
\$('input[type="checkbox"]').on('change', function() {
|
||||
localStorage.setItem("remember_me", \$(this).is(':checked'));
|
||||
jQuery('input[type="checkbox"]').on('change', function() {
|
||||
localStorage.setItem("remember_me", jQuery(this).is(':checked'));
|
||||
})
|
||||
} catch(err) { }
|
||||
</script>
|
||||
|
||||
1
interfaces/Config/templates/staticcfg/css/Auto.css
Normal file
1
interfaces/Config/templates/staticcfg/css/Auto.css
Normal file
@@ -0,0 +1 @@
|
||||
@import url('Night.css') screen and (prefers-color-scheme: dark);
|
||||
319
interfaces/Config/templates/staticcfg/css/Night.css
Normal file
319
interfaces/Config/templates/staticcfg/css/Night.css
Normal file
@@ -0,0 +1,319 @@
|
||||
body {
|
||||
background-color: black;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
a:not(.btn) {
|
||||
color: #63a7e1;
|
||||
}
|
||||
|
||||
.btn {
|
||||
box-shadow: 1px 1px 1px rgba(255, 255, 255, .1) !important;
|
||||
}
|
||||
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
.advanced-button,
|
||||
.list-group-item {
|
||||
border-color: #252525 !important;
|
||||
}
|
||||
|
||||
#addFeed,
|
||||
#addFeedContent,
|
||||
.section {
|
||||
border-bottom: 1px solid #555555;
|
||||
}
|
||||
|
||||
.col2 p,
|
||||
.col2-cats {
|
||||
color: #AAA;
|
||||
}
|
||||
|
||||
.col2 h3 {
|
||||
background: none repeat scroll 0 0 #555555;
|
||||
}
|
||||
|
||||
.catTable,
|
||||
.dropdown-menu,
|
||||
.dropdown-menu .divider,
|
||||
.even,
|
||||
.Key tr:nth-child(odd),
|
||||
.language:hover,
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.selected,
|
||||
.server-disabled,
|
||||
#serverResponse,
|
||||
.table>tbody>tr:nth-child(odd),
|
||||
.table-striped>tbody>tr:nth-child(odd),
|
||||
ul.tabs li.active a,
|
||||
select[disabled],
|
||||
select:hover {
|
||||
background-color: #444444 !important;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
.correct {
|
||||
border: 2px solid #00cc22 !important;
|
||||
}
|
||||
|
||||
.failed,
|
||||
.required-star,
|
||||
.error-text {
|
||||
color: #ff3333 !important;
|
||||
}
|
||||
|
||||
.unselected,
|
||||
.selected {
|
||||
border: 1px solid #EBEBEB !important;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
.incorrect {
|
||||
border: 2px solid #ff3333 !important;
|
||||
}
|
||||
|
||||
.disabled-text {
|
||||
color: #777 !important;
|
||||
}
|
||||
|
||||
#rightGreyText,
|
||||
small {
|
||||
color: #c7c7c7 !important;
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr,
|
||||
.advanced-button,
|
||||
.advanced-buttonSeperator,
|
||||
.alt,
|
||||
.infoTableSeperator.alt,
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled:hover,
|
||||
a.btn.btn-default,
|
||||
select.form-control,
|
||||
.form-control[disabled],
|
||||
.input-group-addon,
|
||||
#inner,
|
||||
.navbar-default,
|
||||
.search-box input,
|
||||
.select,
|
||||
.table-striped>tbody>tr:nth-child(even),
|
||||
.table>tbody>tr:nth-child(even),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
textarea,
|
||||
ul.tabs a.active,
|
||||
a.list-group-item,
|
||||
.dropdown-menu>li>a,
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="date"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[disabled],
|
||||
textarea,
|
||||
select {
|
||||
background-color: #555555;
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.btn:hover:not(.btn-danger),
|
||||
.btn-default:hover,
|
||||
.tab-content .catTable tr:hover td,
|
||||
input:hover,
|
||||
textarea:hover,
|
||||
a.list-group-item:hover,
|
||||
select:hover,
|
||||
textarea:hover,
|
||||
input[type="date"]:hover,
|
||||
input[type="datetime"]:hover,
|
||||
input[type="datetime-local"]:hover,
|
||||
input[type="email"]:hover,
|
||||
input[type="month"]:hover,
|
||||
input[type="number"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="search"]:hover,
|
||||
input[type="tel"]:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="time"]:hover,
|
||||
input[type="url"]:hover,
|
||||
input[type="week"]:hover,
|
||||
textarea:focus,
|
||||
select:focus,
|
||||
input[type="date"]:focus,
|
||||
input[type="datetime"]:focus,
|
||||
input[type="datetime-local"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="month"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="time"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="week"]:focus {
|
||||
background-color: #666;
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
.modal-backdrop {
|
||||
background-color: #262626 !important;
|
||||
}
|
||||
|
||||
.Key tr {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table>tbody>tr>td,
|
||||
.table>tbody>tr>th,
|
||||
.infoTableSeperator,
|
||||
.modal-footer,
|
||||
.data-row {
|
||||
border-top: 1px solid #555555;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-top: 1px solid #555555;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
border-color: #7b2b28;
|
||||
}
|
||||
|
||||
.tab-content .catTable tbody,
|
||||
ul.tabs a,
|
||||
.colmask,
|
||||
#subscriptions,
|
||||
.RSS form[action="add_rss_feed"] tr:nth-child(even),
|
||||
.Config .table {
|
||||
border: 1px solid #555555 !important;
|
||||
}
|
||||
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
.default,
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: #696969;
|
||||
}
|
||||
|
||||
.activeRSS,
|
||||
.activeRSS a,
|
||||
.activeRSS a:visited,
|
||||
.btn-default,
|
||||
.checkbox label,
|
||||
.feed-row td,
|
||||
.help-block,
|
||||
#content,
|
||||
.navbar-default .navbar-nav>li>a,
|
||||
.navbar-default .navbar-nav>li>a>.glyphicon,
|
||||
.path,
|
||||
.Servers .ct-label,
|
||||
.time,
|
||||
.main-restarting.in,
|
||||
#search-dropdown .dropdown-header,
|
||||
ul.tabs a,
|
||||
a.wizard-advanced-settings,
|
||||
.quoteBlock a,
|
||||
a.main-helplink,
|
||||
col2 h3 a,
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.container,
|
||||
#content {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
#content>div.colmask>div:nth-child(3) {
|
||||
border-bottom: 1px solid #555555 !important;
|
||||
}
|
||||
|
||||
.Servers .ct-series-a .ct-line,
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: #EBEBEB;
|
||||
}
|
||||
|
||||
#inner,
|
||||
.colmask {
|
||||
background-color: #303030;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
background-color: #3C3C3C;
|
||||
}
|
||||
|
||||
.modal-content,
|
||||
.modal-body,
|
||||
.modal-footer {
|
||||
background-color: #727272;
|
||||
}
|
||||
|
||||
#modal_qr .modal-body {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
.form-signin .btn.btn-default {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.rss-icon-svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.rss-symbol {
|
||||
fill: #555555;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
/* for login */
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
/* config>general - host-warning */
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.Special .glyphicon-asterisk {
|
||||
color: #E4E4E4 !important;
|
||||
}
|
||||
@@ -7,7 +7,10 @@ body {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.btn, .btn:hover, .btn:active, .btn:focus {
|
||||
.btn,
|
||||
.btn:hover,
|
||||
.btn:active,
|
||||
.btn:focus {
|
||||
box-shadow: 1px 1px 1px rgba(0,0,0,.1) !important;
|
||||
background-color: white !important;
|
||||
}
|
||||
@@ -38,7 +41,7 @@ body {
|
||||
}
|
||||
|
||||
.text-center a:hover {
|
||||
color: black !important;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.form-signin .alert {
|
||||
|
||||
@@ -89,7 +89,7 @@ body {
|
||||
display: block;
|
||||
position: static;
|
||||
float: right;
|
||||
color: black !important;
|
||||
color: black;
|
||||
padding: 0px;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
@@ -177,8 +177,8 @@ input[type="checkbox"]+.desc {
|
||||
background-color: #F8F8F8;
|
||||
}
|
||||
.field-pair:last-child,
|
||||
.no-field-pair-bg {
|
||||
background-color: transparent;
|
||||
.field-pair.no-field-pair-bg {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.alt,
|
||||
.infoTableSeperator.alt {
|
||||
@@ -225,10 +225,38 @@ input[type='checkbox'] {
|
||||
padding: 0;
|
||||
margin-left: 5px;
|
||||
}
|
||||
textarea:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="email"]:hover, input[type="month"]:hover, input[type="number"]:hover, input[type="password"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="text"]:hover, input[type="time"]:hover, input[type="url"]:hover, input[type="week"]:hover, textarea:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="email"]:focus, input[type="month"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="time"]:focus, input[type="url"]:focus, input[type="week"]:focus {
|
||||
textarea:hover,
|
||||
input[type="date"]:hover,
|
||||
input[type="datetime"]:hover,
|
||||
input[type="datetime-local"]:hover,
|
||||
input[type="email"]:hover,
|
||||
input[type="month"]:hover,
|
||||
input[type="number"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="search"]:hover,
|
||||
input[type="tel"]:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="time"]:hover,
|
||||
input[type="url"]:hover,
|
||||
input[type="week"]:hover,
|
||||
textarea:focus,
|
||||
input[type="date"]:focus,
|
||||
input[type="datetime"]:focus,
|
||||
input[type="datetime-local"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="month"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="time"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="week"]:focus {
|
||||
background-color: #fffff0;
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.col1 input[type='checkbox'] {
|
||||
position: absolute;
|
||||
top: auto!important;
|
||||
@@ -331,10 +359,6 @@ tr.separator {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.Sorting .explain-sorting {
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
.Sorting .explain-pattern {
|
||||
border: none;
|
||||
width: 100%;
|
||||
@@ -986,7 +1010,7 @@ input[type="checkbox"] {
|
||||
}
|
||||
*/
|
||||
.navbar-default .navbar-nav>li>a {
|
||||
color: black !important;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
@@ -1023,6 +1047,32 @@ input[type="checkbox"] {
|
||||
margin: 10px 0px;
|
||||
}
|
||||
|
||||
.Servers .server-frame {
|
||||
position: relative;
|
||||
width: 220px;
|
||||
height: 325px;
|
||||
margin-bottom: -325px;
|
||||
left: -240px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.Servers .server-frame a {
|
||||
color: black !important;
|
||||
text-decoration: none !important;
|
||||
opacity: 0.8;
|
||||
font-size: 2em;
|
||||
font-family: arial, sans-serif !important;
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: -5px;
|
||||
}
|
||||
|
||||
.Servers .server-frame iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.Servers .col2 .label {
|
||||
margin-top: 8px;
|
||||
font-size: 0.85em;
|
||||
|
||||
@@ -109,13 +109,13 @@
|
||||
// Remove start
|
||||
self.currentBrowserPath = self.currentBrowserPath.replace(self.element.data('initialdir')+folderSeperator, '');
|
||||
// If it's identical to the initial dir the replacement won't work
|
||||
if(self.currentBrowserPath == self.element.data('initialdir')) {
|
||||
if(self.currentBrowserPath === self.element.data('initialdir')) {
|
||||
self.currentBrowserPath = '';
|
||||
}
|
||||
}
|
||||
|
||||
// Changed?
|
||||
if(self.element.val() != self.currentBrowserPath) {
|
||||
if(self.element.val() !== self.currentBrowserPath) {
|
||||
self.element.val(self.currentBrowserPath);
|
||||
formHasChanged = true;
|
||||
}
|
||||
@@ -157,7 +157,7 @@
|
||||
var list = $('<div class="list-group">').appendTo(self.fileBrowserDialog);
|
||||
$.each(data.paths, function (i, entry) {
|
||||
// Title for first one
|
||||
if(i == 0) {
|
||||
if(i === 0) {
|
||||
self.fileBrowserDialog.prepend($('<h4>').text(entry.current_path))
|
||||
return
|
||||
}
|
||||
@@ -166,7 +166,7 @@
|
||||
self.browse(entry.path, endpoint); }
|
||||
).text(entry.name);
|
||||
// Back image
|
||||
if(entry.name == '..') {
|
||||
if(entry.name === '..') {
|
||||
$('<span class="glyphicon glyphicon-arrow-left"></span> ').prependTo(link);
|
||||
} else {
|
||||
$('<span class="glyphicon glyphicon-folder-open"></span> ').prependTo(link);
|
||||
@@ -239,8 +239,8 @@ function do_restart() {
|
||||
$('.main-restarting').show()
|
||||
|
||||
// What template
|
||||
var switchedHTTPS = ($('#enable_https').is(':checked') == ($('#enable_https').data('original') === undefined))
|
||||
var portsUnchanged = ($('#port').val() == $('#port').data('original')) && ($('#https_port').val() == $('#https_port').data('original'))
|
||||
var switchedHTTPS = ($('#enable_https').is(':checked') === ($('#enable_https').data('original') === undefined))
|
||||
var portsUnchanged = ($('#port').val() === $('#port').data('original')) && ($('#https_port').val() === $('#https_port').data('original'))
|
||||
|
||||
// Are we on settings page or did nothing change?
|
||||
if(!$('body').hasClass('General') || (!switchedHTTPS && portsUnchanged)) {
|
||||
@@ -248,7 +248,7 @@ function do_restart() {
|
||||
var urlTotal = window.location.origin + urlBase
|
||||
} else {
|
||||
// Protocol and port depend on http(s) setting
|
||||
if($('#enable_https').is(':checked') && (window.location.protocol == 'https:' || !$('#https_port').val())) {
|
||||
if($('#enable_https').is(':checked') && (window.location.protocol === 'https:' || !$('#https_port').val())) {
|
||||
// Https on and we visited this page from HTTPS
|
||||
var urlProtocol = 'https:';
|
||||
var urlPort = $('#https_port').val() ? $('#https_port').val() : $('#port').val();
|
||||
@@ -297,7 +297,7 @@ function do_restart() {
|
||||
|
||||
// Exception if we go from HTTPS to HTTP
|
||||
// (this is not allowed by browsers and all of the above will be ignored)
|
||||
if(window.location.protocol != urlProtocol) {
|
||||
if(window.location.protocol !== urlProtocol) {
|
||||
// Saftey redirect after 20 sec
|
||||
setTimeout(function() {
|
||||
location.href = urlTotal;
|
||||
@@ -429,7 +429,7 @@ $(document).ready(function () {
|
||||
$('.advanced-settings').toggle()
|
||||
addRowColor()
|
||||
})
|
||||
if(localStorage.getItem('advanced-settings') == 'true') {
|
||||
if(localStorage.getItem('advanced-settings') === 'true') {
|
||||
$('.advanced-settings').show()
|
||||
$('#advanced-settings-button').prop('checked', true)
|
||||
addRowColor()
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<div class="history" id="history-tab" data-bind="visible: hasHistory() || displayTabbed()" style="display: none">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<div class="history-header">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<a href="#" data-bind="click: history.showMultiEdit">
|
||||
<span class="glyphicon glyphicon-tasks" data-tooltip="true" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
</div>
|
||||
<table class="table table-hover history-table paginated">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -55,7 +60,10 @@
|
||||
<!-- /ko -->
|
||||
<td class="history-completedon row-wrap-text" data-bind="text: completedOn(), attr: { 'data-timestamp': completed }" onclick="showDetails(this)"></td>
|
||||
<td class="delete">
|
||||
<div class="dropdown">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<div class="dropdown" data-bind="visible: !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: updateAllHistoryInfo">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
@@ -124,7 +132,20 @@
|
||||
<div class="multioperations-selector" id="history-options">
|
||||
<a href="#" class="hover-button" title="$T('link-retryAll')" data-tooltip="true" data-placement="left" data-bind="click: history.retryAllFailed"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('showAllHis') / $T('showFailedHis')" data-tooltip="true" data-placement="left" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-toggle="modal" data-tooltip="true" data-placement="left"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
|
||||
<div data-bind="visible: history.isMultiEditing()">
|
||||
<span class="label label-default" data-bind="text: history.multiEditItems().length">0</span>
|
||||
<label for="multiedit-checkall-history">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-history" title="$T('Glitter-checkAll')" data-bind="click: history.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<a href="#" class="hover-button" data-bind="visible: history.isMultiEditing(), click: history.doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-bind="visible: !history.isMultiEditing()" data-toggle="modal" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="info-container history-info">
|
||||
|
||||
@@ -102,26 +102,15 @@
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header"><span class="glyphicon glyphicon-off"></span> $T('Glitter-onFinish'):</li>
|
||||
<li>
|
||||
<!-- ko if: queue.scriptsListLoaded -->
|
||||
<select data-bind="value: finishaction, event: { change: setOnQueueFinish }" class="form-control">
|
||||
<option value=""></option>
|
||||
<optgroup label="$T('eoq-actions')">
|
||||
<option value="shutdown_program">$T('shutdownSab')</option>
|
||||
<!--#if $power_options#-->
|
||||
<option value="shutdown_pc">$T('shutdownPc')</option>
|
||||
<option value="standby_pc">$T('standbyPc')</option>
|
||||
<option value="hibernate_pc">$T('hibernatePc')</option>
|
||||
<!--#end if#-->
|
||||
</optgroup>
|
||||
<optgroup label="$T('eoq-scripts')" data-bind="visible: queue.scriptsList().length > 1">
|
||||
<!-- ko foreach: queue.scriptsList -->
|
||||
<!-- ko if: \$data.scriptValue != 'None' -->
|
||||
<option data-bind="text: \$data.scriptText, attr: { value: 'script_'+\$data.scriptValue } " ></option>
|
||||
<!-- /ko -->
|
||||
<!-- /ko -->
|
||||
</optgroup>
|
||||
<option value="shutdown_program">$T('shutdownSab')</option>
|
||||
<!--#if $power_options#-->
|
||||
<option value="shutdown_pc">$T('shutdownPc')</option>
|
||||
<option value="standby_pc">$T('standbyPc')</option>
|
||||
<option value="hibernate_pc">$T('hibernatePc')</option>
|
||||
<!--#end if#-->
|
||||
</select>
|
||||
<!-- /ko -->
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -225,15 +225,20 @@
|
||||
</div>
|
||||
<div class="row" data-bind="visible: serverssl">
|
||||
<div class="col-sm-6">$T('srv-ssl')</div>
|
||||
<div class="col-sm-6">
|
||||
<span class="glyphicon glyphicon-ok"></span> <span data-bind="text: serversslinfo"></span>
|
||||
<div class="col-sm-6 col-dot-overflow">
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
<span data-bind="text: serversslinfo"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6"># $T('connections')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: serverconnections().length"></span> /
|
||||
<span data-bind="text: servertotalconn"></span>
|
||||
<span data-bind="text: servertotalconn"></span><br>
|
||||
<!-- ko if: serveripaddress() -->
|
||||
<span data-bind="text: servercanonname"></span><br>
|
||||
<span data-bind="text: serveripaddress"></span>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -249,11 +254,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: !isFinite(serveractiveconn())">
|
||||
<div class="row" data-bind="visible: serverwarning()">
|
||||
<div class="col-sm-12">
|
||||
<div class="alert alert-warning">
|
||||
<span class="glyphicon glyphicon-info-sign"></span>
|
||||
<span data-bind="text: serveractiveconn()"></span>
|
||||
<span data-bind="text: serverwarning()"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -713,7 +718,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p><small>Copyright (C) 2007-2021 The SABnzbd Team <team@sabnzbd.org><br/>$T('yourRights') </small></p>
|
||||
<p><small>Copyright (C) 2007-2021 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -171,8 +171,8 @@
|
||||
|
||||
<form class="multioperations-selector" data-bind="visible: (hasQueue() && queue.isMultiEditing())" style="display: none;">
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small add-nzb-inputbox-options">
|
||||
<label for="multiedit-checkall">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
<label for="multiedit-checkall-queue">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hover-button" data-bind="click: queue.doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
glitterTranslate.fetch = "$T('Glitter-fetch')";
|
||||
glitterTranslate.checking = "$T('post-Checking')";
|
||||
glitterTranslate.misingArt = "$T('missingArt')";
|
||||
glitterTranslate.fetchingURL = "$T('Glitter-addFromURL')"
|
||||
glitterTranslate.chooseFile = "$T('Glitter-chooseFile')";
|
||||
glitterTranslate.orphanedJobsMsg = "$T('explain-orphans')";
|
||||
glitterTranslate.useCache = "$T('explain-cache_limitstr').replace("64M", "256M").replace("128M", "512M")";
|
||||
@@ -145,10 +146,10 @@
|
||||
<a href="#queue-tab" data-toggle="tab">$T('menu-queue') <span class="badge" data-bind="text: queue.totalItems"></span></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#history-tab" data-toggle="tab">$T('menu-history')<span class="badge" data-bind="text: history.totalItems"></span></a>
|
||||
<a href="#history-tab" data-toggle="tab">$T('menu-history') <span class="badge badge-info" data-bind="text: history.ppItems, visible: history.ppItems"></span><span class="badge" data-bind="text: history.totalItems"></span></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#queue-messages" data-toggle="tab">$T('warnings')<span class="badge" data-bind="text: hasMessages, css: { 'badge-warning': hasMessages() }"></span></a>
|
||||
<a href="#queue-messages" data-toggle="tab">$T('warnings') <span class="badge" data-bind="text: hasMessages, css: { 'badge-warning': hasMessages() }"></span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -58,11 +58,11 @@ function convertHTMLtoText(htmltxt) {
|
||||
// Function to re-write 0:09:21=>9:21, 0:10:10=>10:10, 0:00:30=>0:30
|
||||
function rewriteTime(timeString) {
|
||||
// Remove "0:0" from start
|
||||
if(timeString.substring(0,3) == '0:0') {
|
||||
if(timeString.substring(0,3) === '0:0') {
|
||||
timeString = timeString.substring(3)
|
||||
}
|
||||
// Remove "0:" from start
|
||||
else if(timeString.substring(0,2) == '0:') {
|
||||
else if(timeString.substring(0,2) === '0:') {
|
||||
timeString = timeString.substring(2)
|
||||
}
|
||||
return timeString
|
||||
@@ -71,13 +71,13 @@ function rewriteTime(timeString) {
|
||||
// How to display the date-time?
|
||||
function displayDateTime(inDate, outFormat, inFormat) {
|
||||
// What input?
|
||||
if(inDate == '') {
|
||||
if(inDate === '') {
|
||||
var theMoment = moment()
|
||||
} else {
|
||||
var theMoment = moment.utc(inDate, inFormat)
|
||||
}
|
||||
// Special format or regular format?
|
||||
if(outFormat == 'fromNow') {
|
||||
if(outFormat === 'fromNow') {
|
||||
return theMoment.fromNow()
|
||||
} else {
|
||||
return theMoment.local().format(outFormat)
|
||||
@@ -155,7 +155,7 @@ function setCheckAllState(checkSelector, rangeSelector) {
|
||||
var nrChecks = allChecks.filter(":checked");
|
||||
if(nrChecks.length === 0) {
|
||||
$(checkSelector).prop({'checked': false, 'indeterminate': false})
|
||||
} else if(nrChecks.length == allChecks.length) {
|
||||
} else if(nrChecks.length === allChecks.length) {
|
||||
$(checkSelector).prop({'checked': true, 'indeterminate': false})
|
||||
} else {
|
||||
$(checkSelector).prop({'checked': false, 'indeterminate': true})
|
||||
|
||||
@@ -57,7 +57,7 @@ function Fileslisting(parent) {
|
||||
$.each(response.files, function(index, slot) {
|
||||
// Existing or updating?
|
||||
var existingItem = ko.utils.arrayFirst(self.fileItems(), function(i) {
|
||||
return i.nzf_id() == slot.nzf_id;
|
||||
return i.nzf_id() === slot.nzf_id;
|
||||
});
|
||||
|
||||
if(existingItem) {
|
||||
@@ -76,7 +76,7 @@ function Fileslisting(parent) {
|
||||
}
|
||||
|
||||
// Check if we show/hide completed
|
||||
if(localStorageGetItem('showCompletedFiles') == 'No') {
|
||||
if(localStorageGetItem('showCompletedFiles') === 'No') {
|
||||
$('.item-files-table tr.files-done').hide();
|
||||
$('#filelist-showcompleted').removeClass('hover-button')
|
||||
}
|
||||
@@ -217,8 +217,8 @@ function FileslistingModel(parent, data) {
|
||||
self.nzf_id = ko.observable(data.nzf_id);
|
||||
self.file_age = ko.observable(data.age);
|
||||
self.mb = ko.observable(data.mb);
|
||||
self.canselect = ko.observable(data.status != "finished" && data.status != "queued");
|
||||
self.isdone = ko.observable(data.status == "finished");
|
||||
self.canselect = ko.observable(data.status !== "finished" && data.status !== "queued");
|
||||
self.isdone = ko.observable(data.status === "finished");
|
||||
self.percentage = ko.observable(self.isdone() ? fixPercentages(100) : fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)));
|
||||
|
||||
// Update internally
|
||||
@@ -227,8 +227,8 @@ function FileslistingModel(parent, data) {
|
||||
self.nzf_id(data.nzf_id)
|
||||
self.file_age(data.age)
|
||||
self.mb(data.mb)
|
||||
self.canselect(data.status != "finished" && data.status != "queued")
|
||||
self.isdone(data.status == "finished")
|
||||
self.canselect(data.status !== "finished" && data.status !== "queued")
|
||||
self.isdone(data.status === "finished")
|
||||
// Data is given in MB, would always show 0% for small files even if completed
|
||||
self.percentage(self.isdone() ? fixPercentages(100) : fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)))
|
||||
}
|
||||
@@ -266,7 +266,7 @@ function paginationModel(parent) {
|
||||
// Return object for adding
|
||||
return {
|
||||
page: pageNr,
|
||||
isCurrent: pageNr == self.currentPage(),
|
||||
isCurrent: pageNr === self.currentPage(),
|
||||
isDots: false,
|
||||
onclick: function(data) {
|
||||
self.moveToPage(data.page);
|
||||
@@ -356,7 +356,7 @@ function paginationModel(parent) {
|
||||
}
|
||||
|
||||
// Change of number of pages?
|
||||
if(newNrPages != self.nrPages()) {
|
||||
if(newNrPages !== self.nrPages()) {
|
||||
// Update
|
||||
self.nrPages(newNrPages);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,10 @@ function HistoryListModel(parent) {
|
||||
self.searchTerm = ko.observable('').extend({ rateLimit: { timeout: 400, method: "notifyWhenChangesStop" } });
|
||||
self.paginationLimit = ko.observable(10).extend({ persist: 'historyPaginationLimit' });
|
||||
self.totalItems = ko.observable(0);
|
||||
self.ppItems = ko.observable(0);
|
||||
self.pagination = new paginationModel(self);
|
||||
self.isMultiEditing = ko.observable(false).extend({ persist: 'historyIsMultiEditing' });
|
||||
self.multiEditItems = ko.observableArray([]);
|
||||
|
||||
// Download history info
|
||||
self.downloadedToday = ko.observable();
|
||||
@@ -40,7 +43,7 @@ function HistoryListModel(parent) {
|
||||
var newItems = [];
|
||||
$.each(data.slots, function(index, slot) {
|
||||
var existingItem = ko.utils.arrayFirst(self.historyItems(), function(i) {
|
||||
return i.historyStatus.nzo_id() == slot.nzo_id;
|
||||
return i.historyStatus.nzo_id() === slot.nzo_id;
|
||||
});
|
||||
// Set index in the results
|
||||
slot.index = index
|
||||
@@ -56,7 +59,7 @@ function HistoryListModel(parent) {
|
||||
});
|
||||
|
||||
// Remove all items
|
||||
if(itemIds.length == self.paginationLimit()) {
|
||||
if(itemIds.length === self.paginationLimit()) {
|
||||
// Replace it, so only 1 Knockout DOM-update!
|
||||
self.historyItems(newItems);
|
||||
newItems = [];
|
||||
@@ -65,7 +68,7 @@ function HistoryListModel(parent) {
|
||||
$.each(itemIds, function() {
|
||||
var id = this.toString();
|
||||
self.historyItems.remove(ko.utils.arrayFirst(self.historyItems(), function(i) {
|
||||
return i.historyStatus.nzo_id() == id;
|
||||
return i.historyStatus.nzo_id() === id;
|
||||
}));
|
||||
});
|
||||
}
|
||||
@@ -79,7 +82,7 @@ function HistoryListModel(parent) {
|
||||
if(self.parent.queue.multiEditItems().length > 0) {
|
||||
$.each(newItems, function() {
|
||||
var currentItem = this;
|
||||
self.parent.queue.multiEditItems.remove(function(inList) { return inList.id == currentItem.nzo_id; })
|
||||
self.parent.queue.multiEditItems.remove(function(inList) { return inList.id === currentItem.id; })
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -93,6 +96,7 @@ function HistoryListModel(parent) {
|
||||
History information
|
||||
***/
|
||||
self.totalItems(data.noofslots);
|
||||
self.ppItems(data.ppslots)
|
||||
self.downloadedToday(data.day_size);
|
||||
self.downloadedWeek(data.week_size);
|
||||
self.downloadedMonth(data.month_size);
|
||||
@@ -110,6 +114,8 @@ function HistoryListModel(parent) {
|
||||
value: newValue
|
||||
})
|
||||
}
|
||||
// Update pagination and counters
|
||||
self.parent.refresh(true)
|
||||
});
|
||||
|
||||
// Retry a job
|
||||
@@ -142,7 +148,7 @@ function HistoryListModel(parent) {
|
||||
// Searching in history (rate-limited in declaration)
|
||||
self.searchTerm.subscribe(function() {
|
||||
// Go back to page 1
|
||||
if(self.pagination.currentPage() != 1) {
|
||||
if(self.pagination.currentPage() !== 1) {
|
||||
// This forces a refresh
|
||||
self.pagination.moveToPage(1);
|
||||
} else {
|
||||
@@ -154,13 +160,13 @@ function HistoryListModel(parent) {
|
||||
// Clear searchterm
|
||||
self.clearSearchTerm = function(data, event) {
|
||||
// Was it escape key or click?
|
||||
if(event.type == 'mousedown' || (event.keyCode && event.keyCode == 27)) {
|
||||
if(event.type === 'mousedown' || (event.keyCode && event.keyCode === 27)) {
|
||||
// Set the loader so it doesn't flicker and then switch
|
||||
self.isLoading(true)
|
||||
self.searchTerm('');
|
||||
}
|
||||
// Was it click and the field is empty? Then we focus on the field
|
||||
if(event.type == 'mousedown' && self.searchTerm() == '') {
|
||||
if(event.type === 'mousedown' && self.searchTerm() === '') {
|
||||
$(event.target).parents('.search-box').find('input[type="text"]').focus()
|
||||
return;
|
||||
}
|
||||
@@ -203,28 +209,28 @@ function HistoryListModel(parent) {
|
||||
var del_files, value;
|
||||
|
||||
// Purge failed
|
||||
if(whatToRemove == 'history-purge-failed') {
|
||||
if(whatToRemove === 'history-purge-failed') {
|
||||
del_files = 0;
|
||||
value = 'failed';
|
||||
}
|
||||
// Also remove files
|
||||
if(whatToRemove == 'history-purgeremove-failed') {
|
||||
if(whatToRemove === 'history-purgeremove-failed') {
|
||||
del_files = 1;
|
||||
value = 'failed';
|
||||
}
|
||||
// Remove completed
|
||||
if(whatToRemove == 'history-purge-completed') {
|
||||
if(whatToRemove === 'history-purge-completed') {
|
||||
del_files = 0;
|
||||
value = 'completed';
|
||||
}
|
||||
// Remove the ones on this page
|
||||
if(whatToRemove == 'history-purge-page') {
|
||||
if(whatToRemove === 'history-purge-page') {
|
||||
// List all the ID's
|
||||
var strIDs = '';
|
||||
$.each(self.historyItems(), function(index) {
|
||||
// Only append when it's a download that can be deleted
|
||||
if(!this.processingDownload() && !this.processingWaiting()) {
|
||||
strIDs = strIDs + this.nzo_id + ',';
|
||||
strIDs = strIDs + this.id + ',';
|
||||
}
|
||||
})
|
||||
// Send the command
|
||||
@@ -253,6 +259,124 @@ function HistoryListModel(parent) {
|
||||
$("#modal-purge-history").modal('hide');
|
||||
});
|
||||
};
|
||||
|
||||
// Show the input checkbox
|
||||
self.showMultiEdit = function() {
|
||||
self.isMultiEditing(!self.isMultiEditing())
|
||||
self.multiEditItems.removeAll();
|
||||
$('.history-table input[name="multiedit"], #multiedit-checkall-history').prop({'checked': false, 'indeterminate': false})
|
||||
}
|
||||
|
||||
// Add to the list
|
||||
self.addMultiEdit = function(item, event) {
|
||||
// Is it a shift-click?
|
||||
if(event.shiftKey) {
|
||||
checkShiftRange('.history-table input[name="multiedit"]');
|
||||
}
|
||||
|
||||
// Add or remove from the list?
|
||||
if(event.currentTarget.checked) {
|
||||
// Add item
|
||||
self.multiEditItems.push(item);
|
||||
} else {
|
||||
// Go over them all to know which one to remove
|
||||
self.multiEditItems.remove(function(inList) { return inList.id == item.id; })
|
||||
}
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall-history', '.history-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check all
|
||||
self.checkAllJobs = function(item, event) {
|
||||
// Get which ones we care about
|
||||
var allChecks = $('.history-table input[name="multiedit"]').filter(':not(:disabled):visible');
|
||||
|
||||
// We need to re-evaltuate the state of this check-all
|
||||
// Otherwise the 'inderterminate' will be overwritten by the click event!
|
||||
setCheckAllState('#multiedit-checkall-history', '.history-table input[name="multiedit"]')
|
||||
|
||||
// Now we can check what happend
|
||||
// For when some are checked, or all are checked (but not partly)
|
||||
if(event.target.indeterminate || (event.target.checked && !event.target.indeterminate)) {
|
||||
var allActive = allChecks.filter(":checked")
|
||||
// First remove the from the list
|
||||
if(allActive.length == self.multiEditItems().length) {
|
||||
// Just remove all
|
||||
self.multiEditItems.removeAll();
|
||||
// Remove the check
|
||||
allActive.prop('checked', false)
|
||||
} else {
|
||||
// Remove them seperate
|
||||
allActive.each(function() {
|
||||
// Go over them all to know which one to remove
|
||||
var item = ko.dataFor(this)
|
||||
self.multiEditItems.remove(function(inList) { return inList.id == item.id; })
|
||||
// Remove the check of this one
|
||||
this.checked = false;
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// None are checked, so check and add them all
|
||||
allChecks.prop('checked', true)
|
||||
allChecks.each(function() { self.multiEditItems.push(ko.dataFor(this)) })
|
||||
event.target.checked = true
|
||||
}
|
||||
// Set state of all the check-all's
|
||||
setCheckAllState('#multiedit-checkall-history', '.history-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
// Delete all selected
|
||||
self.doMultiDelete = function() {
|
||||
// Anything selected?
|
||||
if(self.multiEditItems().length < 1) return;
|
||||
|
||||
// Need confirm
|
||||
if(!self.parent.confirmDeleteHistory() || confirm(glitterTranslate.removeDown)) {
|
||||
// List all the ID's
|
||||
var strIDs = '';
|
||||
$.each(self.multiEditItems(), function(index) {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
// Show notification
|
||||
showNotification('.main-notification-box-removing-multiple', 0, self.multiEditItems().length)
|
||||
|
||||
// Remove
|
||||
callAPI({
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure the queue doesnt flicker and then fade-out
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.isLoading(self.totalItems() > 1)
|
||||
self.parent.refresh();
|
||||
// Empty it
|
||||
self.multiEditItems.removeAll();
|
||||
// Hide notification
|
||||
hideNotification()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// On change of page we need to check all those that were in the list!
|
||||
self.historyItems.subscribe(function() {
|
||||
// We need to wait until the unit is actually finished rendering
|
||||
setTimeout(function() {
|
||||
$.each(self.multiEditItems(), function(index) {
|
||||
$('#multiedit_' + this.id).prop('checked', true);
|
||||
})
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall-history', '.history-table input[name="multiedit"]')
|
||||
}, 100)
|
||||
}, null, "arrayChange")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -266,7 +390,7 @@ function HistoryModel(parent, data) {
|
||||
// If we update the full set every time it uses lot of CPU
|
||||
// The Status/Actionline/scriptline/completed we do update every time
|
||||
// When clicked on the more-info button we load the rest again
|
||||
self.nzo_id = data.nzo_id;
|
||||
self.id = data.nzo_id;
|
||||
self.index = data.index;
|
||||
self.updateAllHistory = false;
|
||||
self.hasDropdown = ko.observable(false);
|
||||
@@ -303,14 +427,14 @@ function HistoryModel(parent, data) {
|
||||
|
||||
// Waiting?
|
||||
self.processingWaiting = ko.pureComputed(function() {
|
||||
return(self.status() == 'Queued')
|
||||
return(self.status() === 'Queued')
|
||||
})
|
||||
|
||||
// Processing or done?
|
||||
self.processingDownload = ko.pureComputed(function() {
|
||||
var status = self.status();
|
||||
// When we can cancel
|
||||
if (status === 'Extracting' || status === 'Verifying' || status == 'Repairing' || status === 'Running') {
|
||||
if (status === 'Extracting' || status === 'Verifying' || status === 'Repairing' || status === 'Running') {
|
||||
return 2
|
||||
}
|
||||
// These cannot be cancelled
|
||||
@@ -344,7 +468,7 @@ function HistoryModel(parent, data) {
|
||||
try {
|
||||
// Extract the Download section
|
||||
var downloadLog = ko.utils.arrayFirst(self.historyStatus.stage_log(), function(item) {
|
||||
return item.name() == 'Download'
|
||||
return item.name() === 'Download'
|
||||
});
|
||||
// Extract the speed
|
||||
return downloadLog.actions()[0].match(/(\S*\s\S+)(?=<br\/>)/)[0]
|
||||
@@ -353,7 +477,7 @@ function HistoryModel(parent, data) {
|
||||
return;
|
||||
case 'category':
|
||||
// Exception for *
|
||||
if(self.historyStatus.category() == "*")
|
||||
if(self.historyStatus.category() === "*")
|
||||
return glitterTranslate.defaultText
|
||||
return self.historyStatus.category();
|
||||
case 'size':
|
||||
@@ -375,7 +499,7 @@ function HistoryModel(parent, data) {
|
||||
// Re-try button
|
||||
self.retry = function() {
|
||||
// Set JOB-id
|
||||
$('#modal-retry-job input[name="retry_job_id"]').val(self.nzo_id)
|
||||
$('#modal-retry-job input[name="retry_job_id"]').val(self.id)
|
||||
// Set password
|
||||
$('#retry_job_password').val(self.historyStatus.password())
|
||||
// Open modal
|
||||
@@ -424,10 +548,10 @@ function HistoryModel(parent, data) {
|
||||
// Confirm?
|
||||
if(!self.parent.parent.confirmDeleteHistory() || confirm(glitterTranslate.deleteMsg + ":\n" + item.historyStatus.name() + "\n\n" + glitterTranslate.removeDow1)) {
|
||||
// Are we still processing and it can be stopped?
|
||||
if(item.processingDownload() == 2) {
|
||||
if(item.processingDownload() === 2) {
|
||||
callAPI({
|
||||
mode: 'cancel_pp',
|
||||
value: self.nzo_id
|
||||
value: self.id
|
||||
})
|
||||
// All we can do is wait
|
||||
} else {
|
||||
@@ -436,12 +560,13 @@ function HistoryModel(parent, data) {
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: self.nzo_id
|
||||
value: self.id
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.parent.isLoading(self.parent.totalItems() > 1)
|
||||
self.parent.historyItems.remove(self);
|
||||
self.parent.multiEditItems.remove(function(inList) { return inList.id === self.id; })
|
||||
self.parent.parent.refresh();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -90,7 +90,7 @@ function ViewModel() {
|
||||
var speedLimitNumber = Math.round(speedLimitNumberFull * 10) / 10;
|
||||
|
||||
// Fix it for lower than 1MB/s
|
||||
if (bandwithLimitText == 'M' && speedLimitNumber < 1) {
|
||||
if (bandwithLimitText === 'M' && speedLimitNumber < 1) {
|
||||
bandwithLimitText = 'K';
|
||||
speedLimitNumber = Math.round(speedLimitNumberFull * 1024);
|
||||
}
|
||||
@@ -150,7 +150,7 @@ function ViewModel() {
|
||||
/***
|
||||
Possible login failure?
|
||||
***/
|
||||
if (response.hasOwnProperty('error') && response.error == 'Missing authentication') {
|
||||
if (response.hasOwnProperty('error') && response.error === 'Missing authentication') {
|
||||
// Restart
|
||||
document.location = document.location;
|
||||
}
|
||||
@@ -171,7 +171,7 @@ function ViewModel() {
|
||||
self.diskSpaceLeft1(response.queue.diskspace1_norm)
|
||||
|
||||
// Same sizes? Then it's all 1 disk!
|
||||
if (response.queue.diskspace1 != response.queue.diskspace2) {
|
||||
if (response.queue.diskspace1 !== response.queue.diskspace2) {
|
||||
self.diskSpaceLeft2(response.queue.diskspace2_norm)
|
||||
} else {
|
||||
self.diskSpaceLeft2('')
|
||||
@@ -196,7 +196,7 @@ function ViewModel() {
|
||||
Spark line
|
||||
***/
|
||||
// Break the speed if empty queue
|
||||
if (response.queue.sizeleft == '0 B') {
|
||||
if (response.queue.sizeleft === '0 B') {
|
||||
response.queue.kbpersec = 0;
|
||||
response.queue.speed = '0';
|
||||
}
|
||||
@@ -215,9 +215,9 @@ function ViewModel() {
|
||||
self.speedHistory.push(parseInt(response.queue.kbpersec));
|
||||
|
||||
// Is sparkline visible? Not on small mobile devices..
|
||||
if ($('.sparkline-container').css('display') != 'none') {
|
||||
if ($('.sparkline-container').css('display') !== 'none') {
|
||||
// Make sparkline
|
||||
if (self.speedHistory.length == 1) {
|
||||
if (self.speedHistory.length === 1) {
|
||||
// We only use speedhistory from SAB if we use global settings
|
||||
// Otherwise SAB doesn't know the refresh rate
|
||||
if (!self.useGlobalOptions()) {
|
||||
@@ -252,7 +252,7 @@ function ViewModel() {
|
||||
Speedlimit
|
||||
***/
|
||||
// Nothing or 0 means 100%
|
||||
if(response.queue.speedlimit == '' || response.queue.speedlimit == '0') {
|
||||
if(response.queue.speedlimit === '' || response.queue.speedlimit === '0') {
|
||||
self.speedLimitInt(100)
|
||||
} else {
|
||||
self.speedLimitInt(parseInt(response.queue.speedlimit));
|
||||
@@ -275,7 +275,7 @@ function ViewModel() {
|
||||
|
||||
// Paused main queue
|
||||
if (self.downloadsPaused()) {
|
||||
if (response.queue.pause_int == '0') {
|
||||
if (response.queue.pause_int === '0') {
|
||||
timeString = glitterTranslate.paused;
|
||||
} else {
|
||||
var pauseSplit = response.queue.pause_int.split(/:/);
|
||||
@@ -344,7 +344,7 @@ function ViewModel() {
|
||||
.done(self.updateQueue)
|
||||
.fail(function(response) {
|
||||
// Catch the failure of authorization error
|
||||
if (response.status == 401) {
|
||||
if (response.status === 401) {
|
||||
// Stop refresh and reload
|
||||
clearInterval(self.interval)
|
||||
location.reload();
|
||||
@@ -394,7 +394,7 @@ function ViewModel() {
|
||||
api_request[keyword] = parsed_query[keyword]
|
||||
}
|
||||
// Special case for priority, dirty replace of string by numeric value
|
||||
if (keyword == "priority" && api_request["priority"]) {
|
||||
if (keyword === "priority" && api_request["priority"]) {
|
||||
for (const prio_name in self.queue.priorityName) {
|
||||
api_request["priority"] = api_request["priority"].replace(prio_name, self.queue.priorityName[prio_name])
|
||||
|
||||
@@ -512,7 +512,7 @@ function ViewModel() {
|
||||
// Update the warnings
|
||||
self.nrWarnings.subscribe(function(newValue) {
|
||||
// Really any change?
|
||||
if (newValue == self.allWarnings().length) return;
|
||||
if (newValue === self.allWarnings().length) return;
|
||||
|
||||
// Get all warnings
|
||||
callAPI({
|
||||
@@ -534,7 +534,7 @@ function ViewModel() {
|
||||
type: glitterTranslate.status[warning.type].slice(0, -1),
|
||||
text: convertHTMLtoText(warning.text).replace(/ /g, '\u00A0').replace(/(?:\r\n|\r|\n)/g, '<br />'),
|
||||
timestamp: warning.time,
|
||||
css: (warning.type == "ERROR" ? "danger" : warning.type == "WARNING" ? "warning" : "info"),
|
||||
css: (warning.type === "ERROR" ? "danger" : warning.type === "WARNING" ? "warning" : "info"),
|
||||
clear: self.clearWarnings
|
||||
};
|
||||
self.allWarnings.push(warningData)
|
||||
@@ -554,7 +554,7 @@ function ViewModel() {
|
||||
// Clear messages
|
||||
self.clearMessages = function(whatToRemove) {
|
||||
// Remove specifc type of messages
|
||||
self.allMessages.remove(function(item) { return item.index == whatToRemove });
|
||||
self.allMessages.remove(function(item) { return item.index === whatToRemove });
|
||||
// Now so we don't show again today
|
||||
localStorageSetItem(whatToRemove, Date.now())
|
||||
}
|
||||
@@ -565,7 +565,7 @@ function ViewModel() {
|
||||
if (!self.speedLimitInt()) return;
|
||||
|
||||
// Update
|
||||
if (self.speedLimitInt() != newValue) {
|
||||
if (self.speedLimitInt() !== newValue) {
|
||||
callAPI({
|
||||
mode: "config",
|
||||
name: "speedlimit",
|
||||
@@ -638,11 +638,17 @@ function ViewModel() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Disable the buttons to prevent multiple uploads
|
||||
let submit_buttons = $(form).find("input[type='submit']")
|
||||
submit_buttons.attr("disabled", true)
|
||||
|
||||
// Upload file using the method we also use for drag-and-drop
|
||||
if ($(form.nzbFile)[0].files[0]) {
|
||||
self.addNZBFromFile($(form.nzbFile)[0].files);
|
||||
// Hide modal, upload will reset the form
|
||||
$("#modal-add-nzb").modal("hide");
|
||||
// Re-enable the buttons
|
||||
submit_buttons.attr("disabled", false)
|
||||
} else if ($(form.nzbURL).val()) {
|
||||
// Or add URL
|
||||
var theCall = {
|
||||
@@ -656,7 +662,7 @@ function ViewModel() {
|
||||
}
|
||||
|
||||
// Optional, otherwise they get mis-labeled if left empty
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() != '*') theCall.cat = $('#modal-add-nzb select[name="Category"]').val()
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') theCall.cat = $('#modal-add-nzb select[name="Category"]').val()
|
||||
if ($('#modal-add-nzb select[name="Processing"]').val()) theCall.pp = $('#modal-add-nzb select[name="Category"]').val()
|
||||
|
||||
// Add
|
||||
@@ -666,6 +672,7 @@ function ViewModel() {
|
||||
$("#modal-add-nzb").modal("hide");
|
||||
form.reset()
|
||||
$('#nzbname').val('')
|
||||
submit_buttons.attr("disabled", false)
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -685,7 +692,7 @@ function ViewModel() {
|
||||
fileindex++
|
||||
|
||||
// Check if it's maybe a folder, we can't handle those
|
||||
if (!file.type && file.size % 4096 == 0) return;
|
||||
if (!file.type && file.size % 4096 === 0) return;
|
||||
|
||||
// Add notification
|
||||
showNotification('.main-notification-box-uploading', 0, fileindex)
|
||||
@@ -701,7 +708,7 @@ function ViewModel() {
|
||||
data.append("apikey", apiKey);
|
||||
|
||||
// Optional, otherwise they get mis-labeled if left empty
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() != '*') data.append("cat", $('#modal-add-nzb select[name="Category"]').val());
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') data.append("cat", $('#modal-add-nzb select[name="Category"]').val());
|
||||
if ($('#modal-add-nzb select[name="Processing"]').val()) data.append("pp", $('#modal-add-nzb select[name="Processing"]').val());
|
||||
|
||||
// Add this one
|
||||
@@ -733,10 +740,10 @@ function ViewModel() {
|
||||
// Load status info
|
||||
self.loadStatusInfo = function(item, event) {
|
||||
// Full refresh? Only on click and for the status-screen
|
||||
var statusFullRefresh = (event != undefined) && $('#options-status').hasClass('active');
|
||||
var statusFullRefresh = (event !== undefined) && $('#options-status').hasClass('active');
|
||||
|
||||
// Measure performance? Takes a while
|
||||
var statusPerformance = (event != undefined) && $(event.currentTarget).hasClass('diskspeed-button');
|
||||
var statusPerformance = (event !== undefined) && $(event.currentTarget).hasClass('diskspeed-button');
|
||||
|
||||
// Make it spin if the user requested it otherwise we don't,
|
||||
// because browsers use a lot of CPU for the animation
|
||||
@@ -776,43 +783,7 @@ function ViewModel() {
|
||||
}
|
||||
|
||||
// Update the servers
|
||||
if (self.statusInfo.servers().length != data.status.servers.length) {
|
||||
// Empty them, in case of update
|
||||
self.statusInfo.servers([])
|
||||
|
||||
// Initial add
|
||||
$.each(data.status.servers, function() {
|
||||
self.statusInfo.servers.push({
|
||||
'servername': ko.observable(this.servername),
|
||||
'serveroptional': ko.observable(this.serveroptional),
|
||||
'serverpriority': ko.observable(this.serverpriority),
|
||||
'servertotalconn': ko.observable(this.servertotalconn),
|
||||
'serverssl': ko.observable(this.serverssl),
|
||||
'serversslinfo': ko.observable(this.serversslinfo),
|
||||
'serveractiveconn': ko.observable(this.serveractiveconn),
|
||||
'servererror': ko.observable(this.servererror),
|
||||
'serveractive': ko.observable(this.serveractive),
|
||||
'serverconnections': ko.observableArray(this.serverconnections),
|
||||
'serverbps': ko.observable(this.serverbps)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
// Update
|
||||
$.each(data.status.servers, function(index) {
|
||||
var activeServer = self.statusInfo.servers()[index];
|
||||
activeServer.servername(this.servername),
|
||||
activeServer.serveroptional(this.serveroptional),
|
||||
activeServer.serverpriority(this.serverpriority),
|
||||
activeServer.servertotalconn(this.servertotalconn),
|
||||
activeServer.serverssl(this.serverssl),
|
||||
activeServer.serversslinfo(this.serversslinfo),
|
||||
activeServer.serveractiveconn(this.serveractiveconn),
|
||||
activeServer.servererror(this.servererror),
|
||||
activeServer.serveractive(this.serveractive),
|
||||
activeServer.serverconnections(this.serverconnections),
|
||||
activeServer.serverbps(this.serverbps)
|
||||
})
|
||||
}
|
||||
ko.mapping.fromJS(data.status.servers, {}, self.statusInfo.servers)
|
||||
|
||||
// Add tooltips to possible new items
|
||||
if (!isMobile) $('#modal-options [data-tooltip="true"]').tooltip({ trigger: 'hover', container: 'body' })
|
||||
@@ -828,7 +799,7 @@ function ViewModel() {
|
||||
var nzbSize = $(event.target).data('size')
|
||||
|
||||
// Maybe it was a click on the icon?
|
||||
if (nzbSize == undefined) {
|
||||
if (nzbSize === undefined) {
|
||||
nzbSize = $(event.target.parentElement).data('size')
|
||||
}
|
||||
|
||||
@@ -910,7 +881,7 @@ function ViewModel() {
|
||||
$('#options-orphans [data-tooltip="true"]').tooltip('hide')
|
||||
|
||||
// Show notification on delete
|
||||
if ($(htmlElement.currentTarget).data('action') == 'delete_orphan') {
|
||||
if ($(htmlElement.currentTarget).data('action') === 'delete_orphan') {
|
||||
showNotification('.main-notification-box-removing', 1000)
|
||||
} else {
|
||||
// Adding back to queue
|
||||
@@ -1124,7 +1095,7 @@ function ViewModel() {
|
||||
// Reformat and set categories
|
||||
self.queue.categoriesList($.map(response.config.categories, function(cat) {
|
||||
// Default?
|
||||
if(cat.name == '*') return { catValue: '*', catText: glitterTranslate.defaultText };
|
||||
if(cat.name === '*') return { catValue: '*', catText: glitterTranslate.defaultText };
|
||||
return { catValue: cat.name, catText: cat.name };
|
||||
}))
|
||||
|
||||
@@ -1136,14 +1107,10 @@ function ViewModel() {
|
||||
// Reformat script-list
|
||||
self.queue.scriptsList($.map(script_response.scripts, function(script) {
|
||||
// None?
|
||||
if(script == 'None') return { scriptValue: 'None', scriptText: glitterTranslate.noneText };
|
||||
if(script === 'None') return { scriptValue: 'None', scriptText: glitterTranslate.noneText };
|
||||
return { scriptValue: script, scriptText: script };
|
||||
}))
|
||||
self.queue.scriptsListLoaded(true)
|
||||
})
|
||||
} else {
|
||||
// We can already continue
|
||||
self.queue.scriptsListLoaded(true)
|
||||
}
|
||||
|
||||
|
||||
@@ -1220,7 +1187,7 @@ function ViewModel() {
|
||||
// Orphaned folders? If user clicked away we check again in 5 days
|
||||
if (self.statusInfo.folders().length >= 3 && orphanMsg) {
|
||||
// Check if not already there
|
||||
if (!ko.utils.arrayFirst(self.allMessages(), function(item) { return item.index == 'OrphanedMsg' })) {
|
||||
if (!ko.utils.arrayFirst(self.allMessages(), function(item) { return item.index === 'OrphanedMsg' })) {
|
||||
self.allMessages.push({
|
||||
index: 'OrphanedMsg',
|
||||
type: glitterTranslate.status['INFO'],
|
||||
@@ -1232,7 +1199,7 @@ function ViewModel() {
|
||||
} else {
|
||||
// Remove any message, if it was there
|
||||
self.allMessages.remove(function(item) {
|
||||
return item.index == 'OrphanedMsg';
|
||||
return item.index === 'OrphanedMsg';
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -37,7 +37,6 @@ function QueueListModel(parent) {
|
||||
self.multiEditItems = ko.observableArray([]);
|
||||
self.categoriesList = ko.observableArray([]);
|
||||
self.scriptsList = ko.observableArray([]);
|
||||
self.scriptsListLoaded = ko.observable(false);
|
||||
self.searchTerm = ko.observable('').extend({ rateLimit: { timeout: 400, method: "notifyWhenChangesStop" } });
|
||||
self.paginationLimit = ko.observable(20).extend({ persist: 'queuePaginationLimit' });
|
||||
self.pagination = new paginationModel(self);
|
||||
@@ -75,7 +74,7 @@ function QueueListModel(parent) {
|
||||
$.each(data.slots, function() {
|
||||
var item = this;
|
||||
var existingItem = ko.utils.arrayFirst(self.queueItems(), function(i) {
|
||||
return i.id == item.nzo_id;
|
||||
return i.id === item.nzo_id;
|
||||
});
|
||||
|
||||
if(existingItem) {
|
||||
@@ -88,7 +87,7 @@ function QueueListModel(parent) {
|
||||
});
|
||||
|
||||
// Remove all items if there's any
|
||||
if(itemIds.length == self.paginationLimit()) {
|
||||
if(itemIds.length === self.paginationLimit()) {
|
||||
// Replace it, so only 1 Knockout DOM-update!
|
||||
self.queueItems(newItems);
|
||||
newItems = [];
|
||||
@@ -97,7 +96,7 @@ function QueueListModel(parent) {
|
||||
$.each(itemIds, function() {
|
||||
var id = this.toString();
|
||||
self.queueItems.remove(ko.utils.arrayFirst(self.queueItems(), function(i) {
|
||||
return i.id == id;
|
||||
return i.id === id;
|
||||
}));
|
||||
});
|
||||
}
|
||||
@@ -159,6 +158,8 @@ function QueueListModel(parent) {
|
||||
value: newValue
|
||||
})
|
||||
}
|
||||
// Update pagination and counters
|
||||
self.parent.refresh(true)
|
||||
});
|
||||
|
||||
// Do we show search box. So it doesn't dissapear when nothing is found
|
||||
@@ -169,7 +170,7 @@ function QueueListModel(parent) {
|
||||
// Searching in queue (rate-limited in decleration)
|
||||
self.searchTerm.subscribe(function() {
|
||||
// Go back to page 1
|
||||
if(self.pagination.currentPage() != 1) {
|
||||
if(self.pagination.currentPage() !== 1) {
|
||||
// This forces a refresh
|
||||
self.pagination.moveToPage(1);
|
||||
} else {
|
||||
@@ -181,12 +182,12 @@ function QueueListModel(parent) {
|
||||
// Clear searchterm
|
||||
self.clearSearchTerm = function(data, event) {
|
||||
// Was it escape key or click?
|
||||
if(event.type == 'mousedown' || (event.keyCode && event.keyCode == 27)) {
|
||||
if(event.type === 'mousedown' || (event.keyCode && event.keyCode === 27)) {
|
||||
self.isLoading(true)
|
||||
self.searchTerm('');
|
||||
}
|
||||
// Was it click and the field is empty? Then we focus on the field
|
||||
if(event.type == 'mousedown' && self.searchTerm() == '') {
|
||||
if(event.type === 'mousedown' && self.searchTerm() === '') {
|
||||
$(event.target).parents('.search-box').find('input[type="text"]').focus()
|
||||
return;
|
||||
}
|
||||
@@ -253,7 +254,7 @@ function QueueListModel(parent) {
|
||||
// Reset form and remove all checked ones
|
||||
$form[0].reset();
|
||||
self.multiEditItems.removeAll();
|
||||
$('.delete input[name="multiedit"], #multiedit-checkall').prop({'checked': false, 'indeterminate': false})
|
||||
$('.queue-table input[name="multiedit"], #multiedit-checkall-queue').prop({'checked': false, 'indeterminate': false})
|
||||
|
||||
// Is the multi-edit in view?
|
||||
if(($form.offset().top + $form.outerHeight(true)) > ($(window).scrollTop()+$(window).height())) {
|
||||
@@ -283,7 +284,7 @@ function QueueListModel(parent) {
|
||||
}
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
setCheckAllState('#multiedit-checkall-queue', '.queue-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -294,7 +295,7 @@ function QueueListModel(parent) {
|
||||
|
||||
// We need to re-evaltuate the state of this check-all
|
||||
// Otherwise the 'inderterminate' will be overwritten by the click event!
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
setCheckAllState('#multiedit-checkall-queue', '.queue-table input[name="multiedit"]')
|
||||
|
||||
// Now we can check what happend
|
||||
// For when some are checked, or all are checked (but not partly)
|
||||
@@ -326,7 +327,7 @@ function QueueListModel(parent) {
|
||||
self.doMultiEditUpdate()
|
||||
}
|
||||
// Set state of all the check-all's
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
setCheckAllState('#multiedit-checkall-queue', '.queue-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -350,14 +351,14 @@ function QueueListModel(parent) {
|
||||
|
||||
// All non-category updates need to only happen after a category update
|
||||
function nonCatUpdates() {
|
||||
if(newScript != '') {
|
||||
if(newScript !== '') {
|
||||
callAPI({
|
||||
mode: 'change_script',
|
||||
value: strIDs,
|
||||
value2: newScript
|
||||
})
|
||||
}
|
||||
if(newPrior != '') {
|
||||
if(newPrior !== '') {
|
||||
callAPI({
|
||||
mode: 'queue',
|
||||
name: 'priority',
|
||||
@@ -365,7 +366,7 @@ function QueueListModel(parent) {
|
||||
value2: newPrior
|
||||
})
|
||||
}
|
||||
if(newProc != '') {
|
||||
if(newProc !== '') {
|
||||
callAPI({
|
||||
mode: 'change_opts',
|
||||
value: strIDs,
|
||||
@@ -382,13 +383,13 @@ function QueueListModel(parent) {
|
||||
|
||||
// Wat a little and do the refresh
|
||||
// Only if anything changed!
|
||||
if(newStatus || newProc != '' || newPrior != '' || newScript != '' || newCat != '') {
|
||||
if(newStatus || newProc !== '' || newPrior !== '' || newScript !== '' || newCat !== '') {
|
||||
setTimeout(parent.refresh, 100)
|
||||
}
|
||||
}
|
||||
|
||||
// What is changed?
|
||||
if(newCat != '') {
|
||||
if(newCat !== '') {
|
||||
callAPI({
|
||||
mode: 'change_cat',
|
||||
value: strIDs,
|
||||
@@ -400,7 +401,7 @@ function QueueListModel(parent) {
|
||||
|
||||
}
|
||||
|
||||
// Selete all selected
|
||||
// Delete all selected
|
||||
self.doMultiDelete = function() {
|
||||
// Anything selected?
|
||||
if(self.multiEditItems().length < 1) return;
|
||||
@@ -445,7 +446,7 @@ function QueueListModel(parent) {
|
||||
})
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
setCheckAllState('#multiedit-checkall-queue', '.queue-table input[name="multiedit"]')
|
||||
}, 100)
|
||||
}, null, "arrayChange")
|
||||
}
|
||||
@@ -465,8 +466,8 @@ function QueueModel(parent, data) {
|
||||
self.index = ko.observable(data.index);
|
||||
self.status = ko.observable(data.status);
|
||||
self.labels = ko.observableArray(data.labels);
|
||||
self.isGrabbing = ko.observable(data.status == 'Grabbing' || data.avg_age == '-')
|
||||
self.isFetchingBlocks = data.status == 'Fetching' || data.priority == 'Repair' // No need to update
|
||||
self.isGrabbing = ko.observable(data.status === 'Grabbing' || data.avg_age === '-')
|
||||
self.isFetchingBlocks = data.status === 'Fetching' || data.priority === 'Repair' // No need to update
|
||||
self.totalMB = ko.observable(parseFloat(data.mb));
|
||||
self.remainingMB = ko.observable(parseFloat(data.mbleft))
|
||||
self.missingMB = ko.observable(parseFloat(data.mbmissing))
|
||||
@@ -477,7 +478,7 @@ function QueueModel(parent, data) {
|
||||
self.priority = ko.observable(parent.priorityName[data.priority]);
|
||||
self.script = ko.observable(data.script);
|
||||
self.unpackopts = ko.observable(parseInt(data.unpackopts)) // UnpackOpts fails if not parseInt'd!
|
||||
self.pausedStatus = ko.observable(data.status == 'Paused');
|
||||
self.pausedStatus = ko.observable(data.status === 'Paused');
|
||||
self.timeLeft = ko.observable(data.timeleft);
|
||||
|
||||
// Initially empty
|
||||
@@ -488,7 +489,7 @@ function QueueModel(parent, data) {
|
||||
// Color of the progress bar
|
||||
self.progressColor = ko.computed(function() {
|
||||
// Checking
|
||||
if(self.status() == 'Checking') {
|
||||
if(self.status() === 'Checking') {
|
||||
return '#58A9FA'
|
||||
}
|
||||
// Check for missing data, the value is arbitrary! (2%)
|
||||
@@ -496,7 +497,7 @@ function QueueModel(parent, data) {
|
||||
return '#F8A34E'
|
||||
}
|
||||
// Set to grey, only when not Force download
|
||||
if((self.parent.parent.downloadsPaused() && self.priority() != 2) || self.pausedStatus()) {
|
||||
if((self.parent.parent.downloadsPaused() && self.priority() !== 2) || self.pausedStatus()) {
|
||||
return '#B7B7B7'
|
||||
}
|
||||
// Nothing
|
||||
@@ -505,6 +506,9 @@ function QueueModel(parent, data) {
|
||||
|
||||
// MB's
|
||||
self.progressText = ko.pureComputed(function() {
|
||||
if(self.isGrabbing()) {
|
||||
return glitterTranslate.fetchingURL
|
||||
}
|
||||
return (self.totalMB() - self.remainingMB()).toFixed(0) + " MB / " + (self.totalMB() * 1).toFixed(0) + " MB";
|
||||
})
|
||||
|
||||
@@ -524,15 +528,15 @@ function QueueModel(parent, data) {
|
||||
})
|
||||
self.statusText = ko.computed(function() {
|
||||
// Checking
|
||||
if(self.status() == 'Checking') {
|
||||
if(self.status() === 'Checking') {
|
||||
return glitterTranslate.checking
|
||||
}
|
||||
// Grabbing
|
||||
if(self.status() == 'Grabbing') {
|
||||
if(self.status() === 'Grabbing') {
|
||||
return glitterTranslate.fetch
|
||||
}
|
||||
// Pausing status
|
||||
if((self.parent.parent.downloadsPaused() && self.priority() != 2) || self.pausedStatus()) {
|
||||
if((self.parent.parent.downloadsPaused() && self.priority() !== 2) || self.pausedStatus()) {
|
||||
return glitterTranslate.paused;
|
||||
}
|
||||
// Just the time
|
||||
@@ -542,7 +546,7 @@ function QueueModel(parent, data) {
|
||||
// Icon to better show force-priority
|
||||
self.queueIcon = ko.computed(function() {
|
||||
// Force comes first
|
||||
if(self.priority() == 2) {
|
||||
if(self.priority() === 2) {
|
||||
return 'glyphicon-forward'
|
||||
}
|
||||
if(self.pausedStatus()) {
|
||||
@@ -556,17 +560,17 @@ function QueueModel(parent, data) {
|
||||
switch(param) {
|
||||
case 'category':
|
||||
// Exception for *
|
||||
if(self.category() == "*")
|
||||
if(self.category() === "*")
|
||||
return glitterTranslate.defaultText
|
||||
return self.category();
|
||||
case 'priority':
|
||||
// Onload-exception
|
||||
if(self.priority() == undefined) return;
|
||||
return ko.utils.arrayFirst(self.parent.priorityOptions(), function(item) { return item.value == self.priority()}).name;
|
||||
if(self.priority() === undefined) return;
|
||||
return ko.utils.arrayFirst(self.parent.priorityOptions(), function(item) { return item.value === self.priority()}).name;
|
||||
case 'processing':
|
||||
// Onload-exception
|
||||
if(self.unpackopts() == undefined) return;
|
||||
return ko.utils.arrayFirst(self.parent.processingOptions(), function(item) { return item.value == self.unpackopts()}).name;
|
||||
if(self.unpackopts() === undefined) return;
|
||||
return ko.utils.arrayFirst(self.parent.processingOptions(), function(item) { return item.value === self.unpackopts()}).name;
|
||||
case 'scripts':
|
||||
return self.script();
|
||||
case 'age':
|
||||
@@ -582,7 +586,7 @@ function QueueModel(parent, data) {
|
||||
self.password(data.password);
|
||||
self.index(data.index);
|
||||
self.status(data.status)
|
||||
self.isGrabbing(data.status == 'Grabbing' || data.avg_age == '-')
|
||||
self.isGrabbing(data.status === 'Grabbing' || data.avg_age === '-')
|
||||
self.totalMB(parseFloat(data.mb));
|
||||
self.remainingMB(parseFloat(data.mbleft));
|
||||
self.missingMB(parseFloat(data.mbmissing))
|
||||
@@ -593,12 +597,12 @@ function QueueModel(parent, data) {
|
||||
self.priority(parent.priorityName[data.priority]);
|
||||
self.script(data.script);
|
||||
self.unpackopts(parseInt(data.unpackopts)) // UnpackOpts fails if not parseInt'd!
|
||||
self.pausedStatus(data.status == 'Paused');
|
||||
self.pausedStatus(data.status === 'Paused');
|
||||
self.timeLeft(data.timeleft);
|
||||
|
||||
// Did the label-list change?
|
||||
// Otherwise KO will send updates to all texts during refresh()
|
||||
if(self.rawLabels != data.labels.toString()) {
|
||||
if(self.rawLabels !== data.labels.toString()) {
|
||||
// Update
|
||||
self.labels(data.labels);
|
||||
self.rawLabels = data.labels.toString();
|
||||
@@ -635,7 +639,7 @@ function QueueModel(parent, data) {
|
||||
// Do on change
|
||||
self.nameForEdit.subscribe(function(newName) {
|
||||
// Anything change or empty?
|
||||
if(!newName || self.name() == newName) return;
|
||||
if(!newName || self.name() === newName) return;
|
||||
|
||||
// Rename would abort Direct Unpack, so ask if user is sure
|
||||
if(self.direct_unpack() && !confirm(glitterTranslate.renameAbort)) return;
|
||||
@@ -725,7 +729,7 @@ function QueueModel(parent, data) {
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.parent.isLoading(self.parent.totalItems() > 1)
|
||||
parent.queueItems.remove(itemToDelete);
|
||||
parent.multiEditItems.remove(function(inList) { return inList.id == itemToDelete.id; })
|
||||
parent.multiEditItems.remove(function(inList) { return inList.id === itemToDelete.id; })
|
||||
self.parent.parent.refresh();
|
||||
// Hide notifcation
|
||||
hideNotification()
|
||||
|
||||
@@ -442,7 +442,7 @@ tbody>tr>td:last-child {
|
||||
.container-tabbed #queue-tab,
|
||||
.container-tabbed #queue-tab,
|
||||
.container-tabbed #queue-messages,
|
||||
.container-tabbed .history h2,
|
||||
.container-tabbed .history-header h2,
|
||||
.container-tabbed .queue h2,
|
||||
.history-queue-swicher {
|
||||
display: none;
|
||||
@@ -494,6 +494,10 @@ tbody>tr>td:last-child {
|
||||
background-color: #d9534f !important;
|
||||
}
|
||||
|
||||
.history-queue-swicher .badge-info {
|
||||
background-color: #58A9FA !important;
|
||||
}
|
||||
|
||||
.history-queue-swicher .badge {
|
||||
margin-left: 4px;
|
||||
}
|
||||
@@ -986,8 +990,27 @@ tr.queue-item>td:first-child>a {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.history h2 {
|
||||
.history-header {
|
||||
clear: left;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.history-header a {
|
||||
align-self: center;
|
||||
margin-right: 2px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.container-tabbed .history-header {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.container-tabbed .history-header a {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.history-table {
|
||||
@@ -1085,6 +1108,18 @@ tr.queue-item>td:first-child>a {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#history-options div {
|
||||
display: inline-block;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#history-options input[name="multieditCheckAll"] {
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
#history-options .hover-button span {
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright 2009 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2009 The SABnzbd-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
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
<title>$T('wizard-quickstart')</title>
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$version"/>
|
||||
<link rel="stylesheet" type="text/css" href="static/style.css?v=$version"/>
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/${color_scheme}.css?v=$version"/>
|
||||
<!--#end if#-->
|
||||
<link rel="shortcut icon" href="../staticcfg/ico/favicon.ico?v=$version" />
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$version"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$version"></script>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4"></div>
|
||||
<div class="col-sm-8">
|
||||
<a href="#" onclick="\$('#server-hidden-settings').removeClass('hidden');\$(this).parent().parent().hide()">
|
||||
<a href="#" class="wizard-advanced-settings" onclick="\$('#server-hidden-settings').removeClass('hidden');\$(this).parent().parent().hide()">
|
||||
<span class="glyphicon glyphicon-cog"></span> $T('button-advanced')
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -56,12 +56,12 @@ $(document).ready(function() {
|
||||
$('#ssl').click(function() {
|
||||
if(this.checked) {
|
||||
// Enabled SSL change port when not already a custom port
|
||||
if($('#port').val() == '119') {
|
||||
if($('#port').val() === '119') {
|
||||
$('#port').val('563')
|
||||
}
|
||||
} else {
|
||||
// Remove SSL port
|
||||
if($('#port').val() == '563') {
|
||||
if($('#port').val() === '563') {
|
||||
$('#port').val('119')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,10 +171,10 @@ label {
|
||||
* {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
#content a,
|
||||
#content a:hover,
|
||||
#content a:active,
|
||||
#content a:visited,
|
||||
a,
|
||||
a:hover,
|
||||
a:active,
|
||||
a:visited,
|
||||
#serverResponse {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2022-2023 The SABnzbd-Team <team@sabnzbd.org> -->
|
||||
<!-- Copyright 2022-2023 The SABnzbd-Team (sabnzbd.org) -->
|
||||
<component type="desktop-application">
|
||||
<id>org.sabnzbd.sabnzbd</id>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
@@ -30,6 +30,10 @@
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="4.2.0" date="2023-11-26" type="stable"/>
|
||||
<release version="4.1.0" date="2023-09-26" type="stable"/>
|
||||
<release version="4.0.3" date="2023-06-16" type="stable"/>
|
||||
<release version="4.0.2" date="2023-06-09" type="stable"/>
|
||||
<release version="4.0.1" date="2023-05-01" type="stable"/>
|
||||
<release version="4.0.0" date="2023-04-28" type="stable"/>
|
||||
<release version="3.7.2" date="2023-02-05" type="stable"/>
|
||||
@@ -49,7 +53,7 @@
|
||||
<internet>always</internet>
|
||||
</recommends>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer_name>The SABnzbd-team</developer_name>
|
||||
<developer_name>The SABnzbd-Team</developer_name>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/interface.png</image>
|
||||
|
||||
BIN
osx/7zip/7zz
BIN
osx/7zip/7zz
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
par2SL version 1.0, Copyright (C) 2003 Peter Brian Clements.
|
||||
Adapted for use with MacPar deLuxe by Gerard Putter.
|
||||
|
||||
This program is compatible with Mac OS X Snow Leopard or later.
|
||||
It uses Grand Central Dispatch to optimize the speed and processor load.
|
||||
|
||||
This is free software, and you are welcome to redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version. See COPYING for details.
|
||||
@@ -1,340 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
@@ -1,28 +0,0 @@
|
||||
# Creating `par2` for M1 systems
|
||||
|
||||
Compiled on an M1 system using these steps.
|
||||
|
||||
If you do not use llvm and `clang++` it will not include multithreading support.
|
||||
|
||||
However, I was unable to statically link the `libomp` library inside the `par2` executable.
|
||||
I extracted it from the llvm libs folder and modified `par2` to look for the `libomp.dylib` in the same folder using `install_name_tool`.
|
||||
|
||||
Ref: https://stackoverflow.com/questions/4677044/how-to-use-dylib-in-mac-os-x-c
|
||||
|
||||
```shell
|
||||
brew install automake
|
||||
brew install llvm
|
||||
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
|
||||
|
||||
# Restart terminal and clone/download par2cmdline sources
|
||||
|
||||
./automake.sh
|
||||
CPPFLAGS="-I/opt/homebrew/opt/llvm/include" LDFLAGS="-L/opt/homebrew/opt/llvm/lib" CXX="clang++" ./configure
|
||||
make clean
|
||||
make
|
||||
make check
|
||||
|
||||
# Do magic to copy and modify the OpenMP library
|
||||
cp /opt/homebrew/opt/llvm/lib/libomp.dylib .
|
||||
install_name_tool -change /opt/homebrew/opt/llvm/lib/libomp.dylib @executable_path/libomp.dylib ./par2
|
||||
```
|
||||
Binary file not shown.
Binary file not shown.
BIN
osx/par2/arm64/par2-turbo
Executable file
BIN
osx/par2/arm64/par2-turbo
Executable file
Binary file not shown.
Binary file not shown.
BIN
osx/par2/par2-turbo
Executable file
BIN
osx/par2/par2-turbo
Executable file
Binary file not shown.
Binary file not shown.
BIN
osx/unrar/unrar
BIN
osx/unrar/unrar
Binary file not shown.
@@ -1,11 +1,10 @@
|
||||
#
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# ION, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: ION, 2020\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -53,14 +52,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -153,7 +149,7 @@ msgid "Test Notification"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgid "Resolving address"
|
||||
msgstr ""
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
@@ -237,10 +233,6 @@ msgstr ""
|
||||
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 ""
|
||||
@@ -249,7 +241,7 @@ msgstr ""
|
||||
msgid "Server address required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr ""
|
||||
|
||||
@@ -267,7 +259,15 @@ msgid "Permissions setting of %s might deny SABnzbd access to the files and fold
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "The Completed Download Folder cannot be the same or a subfolder of the Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
@@ -320,7 +320,7 @@ msgstr ""
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr ""
|
||||
@@ -384,7 +384,7 @@ msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
|
||||
@@ -617,18 +617,10 @@ msgstr ""
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "The Completed Download Folder cannot be the same or a subfolder of the Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr ""
|
||||
@@ -752,7 +744,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr ""
|
||||
@@ -840,19 +831,6 @@ msgstr ""
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr ""
|
||||
@@ -1104,6 +1082,18 @@ msgstr ""
|
||||
msgid "NZB added to queue"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1118,26 +1108,6 @@ msgstr ""
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1156,6 +1126,10 @@ msgstr ""
|
||||
msgid "DUPLICATE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr ""
|
||||
@@ -1201,6 +1175,10 @@ msgstr ""
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2155,11 +2133,6 @@ msgstr ""
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2429,24 +2402,16 @@ msgstr ""
|
||||
msgid "When your IP address changes or SABnzbd is restarted the session will expire."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will be encrypted, however, validating a server's identity using its certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA certificates are required."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Speed up repairs by installing multicore Par2, it is available for many platforms."
|
||||
msgid "Speed up repairs by installing par2cmdline-turbo, it is available for many platforms."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2874,6 +2839,10 @@ msgstr ""
|
||||
msgid "Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ""
|
||||
@@ -3018,14 +2987,6 @@ msgstr ""
|
||||
msgid "When the user script returns a non-zero exit code, the job will be flagged as failed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr ""
|
||||
@@ -3042,6 +3003,14 @@ msgstr ""
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr ""
|
||||
@@ -3261,26 +3230,6 @@ msgstr ""
|
||||
msgid "When during download it becomes clear that too much data is missing, abort the job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4516,10 +4465,6 @@ msgstr ""
|
||||
msgid "Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
160
po/main/cs.po
160
po/main/cs.po
@@ -1,14 +1,13 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Pavel C <quoing_transifex@mess.cz>, 2021
|
||||
# Pavel C <quoing_transifex@mess.cz>, 2023
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
@@ -60,14 +59,11 @@ msgstr "Nalezen UNRAR verze %s, doporučujeme verzi %s nebo vyšší. <br />"
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "Program unrar... nenalezen!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "Program 7za... nenalezen!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "Program unizip... nenalezen!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -170,7 +166,7 @@ msgid "Test Notification"
|
||||
msgstr "Otestovat notifikace"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgid "Resolving address"
|
||||
msgstr "Překládám adresu"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
@@ -262,10 +258,6 @@ msgstr "Kvóta přesažena, pozastavuji stahování"
|
||||
msgid "Incorrect parameter"
|
||||
msgstr "Nesprávný parametr"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC cesta \"%s\" zde není povolena"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "%s is not a valid email address"
|
||||
msgstr "%s není validní emailová adresa"
|
||||
@@ -274,7 +266,7 @@ msgstr "%s není validní emailová adresa"
|
||||
msgid "Server address required"
|
||||
msgstr "Adresa serveru je vyžadována"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr ""
|
||||
|
||||
@@ -294,8 +286,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Chyba: Fronta nené prázdná, nelze změnit složku."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC cesta \"%s\" zde není povolena"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Fronta nené prázdná, nelze změnit složku."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -349,7 +351,7 @@ msgstr "Spustění SQL příkazu selhalo, zkontrolujte log"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Nezdařilo se uzavření databáze, zkontrolujte log"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr ""
|
||||
@@ -418,7 +420,7 @@ msgid "Paused"
|
||||
msgstr "Pozastaveno"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Musíte nastavit maximální rychlost linky předtím než začnete nastavovat "
|
||||
@@ -665,21 +667,10 @@ msgstr "Přihlášené selhalo, zkontrolujte jméno a heslo."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Nezdařený pokus o přihlášení od %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Upozornění: LOCALHOST je nejednoznačný, použijte numerickou IP adresu."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa serveru \"%s:%s\" není správná."
|
||||
@@ -808,7 +799,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Běžící skript"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr ""
|
||||
@@ -897,19 +887,6 @@ msgstr "Nepoužitelný RAR soubor"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Porušený RAR soubor"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s souborů v %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Chyba \"%s\" během běhu unzip() na %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "7za nebylo nalezeno, nemohu rozbalit \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Zkouším 7zip s heslem \"%s\""
|
||||
@@ -1172,6 +1149,18 @@ msgstr "Nelze nahrát %s, detekován porušený soubor"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB přidáno do fronty"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignoruji duplikátní NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Nezdařilo se duplikovat NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Duplikátní NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1186,26 +1175,6 @@ msgstr "Prázdný NZB soubor %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignoruji duplikátní NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Nezdařilo se duplikovat NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Duplikátní NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pozastavuji duplikátní NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1224,6 +1193,10 @@ msgstr "Chyba při importu %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLIKÁT"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "ŠIFROVANÉ"
|
||||
@@ -1269,6 +1242,10 @@ msgstr ""
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pozastavuji duplikátní NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2231,11 +2208,6 @@ msgstr "Jméno"
|
||||
msgid "Retry"
|
||||
msgstr "Opakovat"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Akce"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2519,18 +2491,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Povolit Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Povolit 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2541,7 +2505,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3011,6 +2975,10 @@ msgid ""
|
||||
"Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ""
|
||||
@@ -3172,14 +3140,6 @@ msgid ""
|
||||
"as failed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr ""
|
||||
@@ -3198,6 +3158,14 @@ msgstr ""
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr ""
|
||||
@@ -3430,26 +3398,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Výběr IP adresy serveru"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Náhodně vybraná IP adresa"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Nejrychlejší IP adresa, preferuj IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4726,10 +4674,6 @@ msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
161
po/main/da.po
161
po/main/da.po
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
@@ -60,14 +59,11 @@ msgstr "Din Unrar version er %s, vi anbefaler version %s eller højere.<br />"
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar binær... IKKE fundet"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za binær... IKKE fundet!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip binær... IKKE fundet!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -170,8 +166,8 @@ msgid "Test Notification"
|
||||
msgstr "Afprøv notifikation"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Server løsning"
|
||||
msgid "Resolving address"
|
||||
msgstr "Server løsning"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -262,10 +258,6 @@ msgstr "Kvote brugt, pause downloading"
|
||||
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"
|
||||
@@ -274,7 +266,7 @@ msgstr "%s er ikke en godkendt e-mail adresse"
|
||||
msgid "Server address required"
|
||||
msgstr "Kræver serveradresse"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Ugyldig server adresse."
|
||||
|
||||
@@ -294,8 +286,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC søgning \"%s\" er ikke tilladt her"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Køen er ikke tom, kan ikke skifte mappe."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -349,7 +351,7 @@ msgstr "SQL Kommando mislykkedes, se log"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Det lykkedes ikke at lukke databasen, se log"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Forkert logning i historiken av %s"
|
||||
@@ -416,7 +418,7 @@ msgid "Paused"
|
||||
msgstr "Sat på pause"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Du skal angive den maksimale båndbredde, før du kan angive en båndbredde "
|
||||
@@ -673,20 +675,10 @@ msgstr "Godkendelse mislykkedes, kontrollere brugernavn/adgangskode."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Mislykkede login forsøg fra %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Advarsel: Localhost er tvetydig, bruge numerisk IP-adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradressen \"%s:%s\" er ikke gyldigt."
|
||||
@@ -813,7 +805,6 @@ msgstr "Film sortering"
|
||||
msgid "Running script"
|
||||
msgstr "Køre script"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Udpakning af nesting for dybt [%s]"
|
||||
@@ -901,19 +892,6 @@ msgstr "Ubrugelig RAR fil"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Ødelagt RAR fil"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s filer i %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Fejl \"%s\" når du køre unzip() på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Forsøger 7zip med adgangskode \"%s\""
|
||||
@@ -1175,6 +1153,18 @@ msgstr "Downloadnings fejl %s, ødelagt fil fundet"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB tilføjet i køen"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorerer identiske NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Fejler dublet NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dublet NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1189,26 +1179,6 @@ msgstr "Tom NZB fil %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr "Før-kø script job markeret som mislykkedet"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorerer identiske NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Fejler dublet NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dublet NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pause duplikeret NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1227,6 +1197,10 @@ msgstr "Det lykkedes ikke at importere %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLIKERE"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "KRYPTEREDE"
|
||||
@@ -1272,6 +1246,10 @@ msgstr "%s artikler manglede"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artikler havde ikke-matchende dubletter"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pause duplikeret NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2262,11 +2240,6 @@ msgstr "Navn"
|
||||
msgid "Retry"
|
||||
msgstr "Forsøg igen"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Handlinger"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2559,18 +2532,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Når din IP-adresse ændres eller SABnzbd genstarter, udløber sessionen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Aktivér Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Aktivere 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2581,11 +2546,9 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
"Fremskynde reparationer ved at installere multicopy Par2, det findes til "
|
||||
"mange platforme."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3075,6 +3038,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Placering af logfiler for SABnzbd.<br /><i>Kræver genstart af SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb Backup mappe"
|
||||
@@ -3247,14 +3214,6 @@ msgstr ""
|
||||
"Når bruger scriptet returnerer et non-zero exit code, vil jobbet blive "
|
||||
"markeret som mislykkedes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Ved fejl, prøv alternativ NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Nogle servere levere en alternativ NZB når et download mislykkes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver mappe omdøbning"
|
||||
@@ -3275,6 +3234,14 @@ msgstr "Før kø bruger script"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Brugt før, en NZB kommer ind i køen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Ekstra PAR2 parameter"
|
||||
@@ -3518,26 +3485,6 @@ msgstr ""
|
||||
"Når under download det bliver klart, at for meget data mangler, afbryd "
|
||||
"jobbet"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nyttigt, hvis en newsserver har mere end én IPv4/IPv6-adresse"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4839,10 +4786,6 @@ msgstr ""
|
||||
"Ukendt SSL protokol: Prøv at deaktivere SSL eller forbinder på en anden "
|
||||
"port."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Server afslut under login-sekvens."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Serveren kræver brugernavn og adgangskode."
|
||||
|
||||
169
po/main/de.po
169
po/main/de.po
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# C E <githubce@eiselt.ch>, 2020
|
||||
@@ -16,7 +15,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
@@ -72,14 +71,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar-Programmdatei nicht gefunden!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za-Programmdatei nicht gefunden"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip-Programmdatei nicht gefunden!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -186,8 +182,8 @@ msgid "Test Notification"
|
||||
msgstr "Benachrichtigungen testen"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Adresse wird aufgelöst …"
|
||||
msgid "Resolving address"
|
||||
msgstr "Adresse wird aufgelöst …"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -281,10 +277,6 @@ msgstr "Kontingent aufgebraucht, Downloads werden angehalten"
|
||||
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"
|
||||
@@ -293,7 +285,7 @@ msgstr "%s ist keine gültige E-Mail-Adresse"
|
||||
msgid "Server address required"
|
||||
msgstr "Server-Adresse wird benötigt"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Ungültige Server-Adresse."
|
||||
|
||||
@@ -315,10 +307,21 @@ msgstr ""
|
||||
"erstellten Dateien und Ordner von SABnzbd verweigern."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
|
||||
"ist."
|
||||
"Ordner kann nicht geändert werden, da die Warteschlange nicht leer ist."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Der \"Abgeschlossene Downloads\"-Ordner darf kein Unterordner des "
|
||||
"\"Temporäre Downloads\"-Ordners sein."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -375,7 +378,7 @@ msgid "Failed to close database, see log"
|
||||
msgstr ""
|
||||
"Fehler beim Schliessen der Datenbank. Beachten Sie das Nachrichtenprotokoll."
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Ungültiges Stufen-Protokoll im Verlauf für %s"
|
||||
@@ -446,7 +449,7 @@ msgid "Paused"
|
||||
msgstr "Angehalten"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Bevor ein Bandbreitenlimit gesetzt werden kann, muss die maximale Bandbreite"
|
||||
@@ -710,23 +713,10 @@ msgstr ""
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Fehlerhafter Login Versuch von %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Der \"Abgeschlossene Downloads\"-Ordner darf kein Unterordner des "
|
||||
"\"Temporäre Downloads\"-Ordners sein."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Invalides Backup Archiv"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Warnung: localhost ist mehrdeutig. Verwenden Sie eine numerische IP-Adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Server-Adresse \"%s:%s\" ist ungültig."
|
||||
@@ -858,7 +848,6 @@ msgstr "Film Sortierung"
|
||||
msgid "Running script"
|
||||
msgstr "Ausführen des Skripts"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Entpacken zu tief verschachtelt [%s]"
|
||||
@@ -948,19 +937,6 @@ msgstr "RAR-Datei beschädigt"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Defekte RAR Datei"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s Dateien in %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Fehler \"%s\" beim Ausführen von unzip auf %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "Keine 7za Binary gefunden, entpacken von \"%s\" nicht möglich"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Versuche 7zip mit Passwort \"%s\""
|
||||
@@ -1227,6 +1203,18 @@ msgstr "Fehler beim Laden von %s. Beschädigte Datei gefunden."
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB zur Warteschlange hinzugefügt"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Doppelte NZB \"%s\" wird ignoriert"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "kopieren der NZB \"%s\" fehlgeschlagen"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Doppelte NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1243,26 +1231,6 @@ msgstr ""
|
||||
"Das Vorwarteschlangen (pre-queue) Skript hat die Downloadaufgabe als "
|
||||
"gescheitert markiert"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Doppelte NZB \"%s\" wird ignoriert"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "kopieren der NZB \"%s\" fehlgeschlagen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Doppelte NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Doppelt vorhandene NZB \"%s\" angehalten"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1281,6 +1249,10 @@ msgstr "Fehler beim Importieren von %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLIKAT"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "VERSCHLÜSSELT"
|
||||
@@ -1327,6 +1299,10 @@ msgstr "%s Artikel fehlten"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s Artikel hatten nicht übereinstimmende Duplikate"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Doppelt vorhandene NZB \"%s\" angehalten"
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2329,11 +2305,6 @@ msgstr "Name"
|
||||
msgid "Retry"
|
||||
msgstr "Erneut versuchen"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2635,18 +2606,10 @@ msgstr ""
|
||||
"Falls sich deine IP Adresse ändert oder SABnzbd neu startet, wird deine "
|
||||
"Session ungültig"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "unzip aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "7zip aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr "Multicore Par2"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2661,11 +2624,9 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
"Erhöhe Reparaturgeschwindigkeit durch installation von Multicore Par2, "
|
||||
"verfügbar auf vielen Plattformen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3191,6 +3152,10 @@ msgstr ""
|
||||
"Hier werden Protokoll-Dateien von SABnzbd abgelegt.<br /><i>Benötigt einen "
|
||||
"Neustart von SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "NZB-Backup-Ordner"
|
||||
@@ -3372,16 +3337,6 @@ msgstr ""
|
||||
"Wenn das Benutzerskript einen Exit-Code ausgibt, der nicht \"0\" ist, wird "
|
||||
"der Auftrag als fehlgeschlagen markiert."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Nach einem Fehler ein alternatives NZB laden"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Manche Server stellen ein alternatives NZB zur Verfügung, falls ein Download"
|
||||
" fehlschlägt."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Ordner-Umbenennung aktivieren"
|
||||
@@ -3403,6 +3358,14 @@ msgid "Used before an NZB enters the queue."
|
||||
msgstr ""
|
||||
"Wird verwendet, bevor eine NZB-Datei zur Warteschlange hinzugefügt wird."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Zusätzliche PAR2-Parameter"
|
||||
@@ -3665,26 +3628,6 @@ msgstr ""
|
||||
"Job abbrechen falls während des Downloads klar wird, dass zuviele Daten "
|
||||
"fehlen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Auswahl der Server-IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Erste IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Zufällig ausgewählte IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Schnellste IP-Adresse, IPv6 bevorzugt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nützlich, wenn ein Newsserver mehr als eine IPv4/IPv6-Adresse hat"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -5017,10 +4960,6 @@ msgstr ""
|
||||
"Unbekanntes SSL-Protokoll: SSL deaktivieren oder alternativen Port "
|
||||
"versuchen."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Sever beendet beim Anmeldeverlauf."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Server benötigt ein Benutzername und ein Passwort."
|
||||
|
||||
@@ -124,4 +124,7 @@ msgid "0 is highest priority, 100 is the lowest priority"
|
||||
msgstr "0 is highest priority, 99 is the lowest priority"
|
||||
|
||||
msgid "Filter out sample files (e.g. video samples)."
|
||||
msgstr "Filter out sample files (e.g. video samples/proofs)."
|
||||
msgstr "Filter out sample files (e.g. video samples/proofs)."
|
||||
|
||||
msgid "Pre-queue user script"
|
||||
msgstr "Pre-queue script"
|
||||
163
po/main/es.po
163
po/main/es.po
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Ester Molla Aragones <moarages@gmail.com>, 2020
|
||||
@@ -9,7 +8,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
@@ -64,14 +63,11 @@ msgstr "Su versión UnRAR es %s, recomendamos la versión %s o superior. <br />"
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar binario... NO encontrado"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "No se encontró el binario de 7za"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip binario... NO encontrado!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -179,8 +175,8 @@ msgid "Test Notification"
|
||||
msgstr "Notificación de prueba"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Resolviendo sitio"
|
||||
msgid "Resolving address"
|
||||
msgstr "Resolviendo sitio"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -277,10 +273,6 @@ msgstr "Quota gastado, pausando cola"
|
||||
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."
|
||||
@@ -289,7 +281,7 @@ msgstr "%s no es una dirección de correo electrónico válida."
|
||||
msgid "Server address required"
|
||||
msgstr "Se necesita la dirección del servidor"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Dirección del servidor no válida."
|
||||
|
||||
@@ -309,8 +301,18 @@ msgid ""
|
||||
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"
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Cola no esta vacía, no se puede cambiar el directorio"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -367,7 +369,7 @@ msgstr "Comando SQL ha fallado, vea el registro"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "No se pudo cerrar el base de datos, vea el registro"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Registro de etapa invalido para transferencia terminada %s"
|
||||
@@ -437,7 +439,7 @@ msgid "Paused"
|
||||
msgstr "En pausa"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Debe establecer un ancho de banda máximo antes de poder establecer un límite"
|
||||
@@ -695,20 +697,10 @@ msgstr "Autenticación fallida, compruebe el usuario o la contraseña."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Intento fallido de inicio de sesión desde %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Alerta: LOCALHOST es ambiguo, use dirección de IP numérica"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "La dirección del servidor «%s:%s» no es válida."
|
||||
@@ -842,7 +834,6 @@ msgstr "Clasificación de películas"
|
||||
msgid "Running script"
|
||||
msgstr "Ejecutando script"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr ""
|
||||
@@ -934,19 +925,6 @@ msgstr "Archivo RAR inutilizable"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Fichero RAR corrupto"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s archivos en %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Error \"%s\" al ejecutar unzip() sobre %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "No se ha encontrado el binario 7za, no se puede descomprimir \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Tratando 7zip con la contraseña \"%s\""
|
||||
@@ -1218,6 +1196,18 @@ msgstr "Error al cargar %s, archivo corrupto"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB añadido a la cola"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorando NZB Duplicado \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Fallo al duplicar NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Duplicar NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1234,26 +1224,6 @@ msgstr ""
|
||||
"La secuencia de comandos de la cola preestablecida ha marcado la tarea como "
|
||||
"fallida"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorando NZB Duplicado \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Fallo al duplicar NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Duplicar NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicados \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1272,6 +1242,10 @@ msgstr "Error importando %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLICADO"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "ENCRIPTADO"
|
||||
@@ -1317,6 +1291,10 @@ msgstr "%s artículos no encontrados"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artículos contenían duplicados inconexos"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicados \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2318,11 +2296,6 @@ msgstr "Nombre"
|
||||
msgid "Retry"
|
||||
msgstr "Reintentar"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Acciones"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2619,18 +2592,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr "Cuando tu dirección IP cambie o reinicies SABnzbd, la sesión caduca."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Habilitar Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Habilitar 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr "Multicore Par2"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2647,11 +2612,9 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
"Agilice las reparaciones instalando multicore Par2, está disponible para "
|
||||
"muchas plataformas."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3156,6 +3119,10 @@ msgstr ""
|
||||
"Ubicación de los ficheros de log para SABnzbd.<br /><i>Requiere reiniciar "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Directorio de Backups de .nzbs"
|
||||
@@ -3331,15 +3298,6 @@ msgstr ""
|
||||
"Cuando la secuencia de comandos de usuario devuelve un código de salida "
|
||||
"distinto de cero, el trabajo se marca como fallido ."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "En caso de fallo, intentar con un NZB alternativo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Algunos servidores ofrecen una NZB alternativa cuando falla una descarga ."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renombrado de directorios"
|
||||
@@ -3360,6 +3318,14 @@ msgstr "Script de usuario Pre-cola"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Se usa precediendo a la entrada de un NZB en la cola del sistema."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Parámetros PAR2 extra"
|
||||
@@ -3614,27 +3580,6 @@ msgstr ""
|
||||
"Cuando este bajando, si es claro que mucha data esta faltando, aborte el "
|
||||
"trabajo."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Selección de la dirección IP del servidor"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Primera dirección IP"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Dirección IP seleccionada aleatoriamente"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Dirección IP más rápida, con preferencia IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
"Útil si un servidor de noticias tiene más de una dirección IPv4 / IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4949,10 +4894,6 @@ msgstr ""
|
||||
"Protocolo SSL desconocido: intente desabilitar el SSL o conectarse a un "
|
||||
"puerto diferente."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "El servidor se ha cerrado durante el login"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "El servidor necesita usuario y contraseña."
|
||||
|
||||
161
po/main/fi.po
161
po/main/fi.po
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
@@ -60,14 +59,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar-ohjelmaa... EI löydy!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za-ohjelmaa... EI löydy!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip-ohjelmaa... EI löydy!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -172,8 +168,8 @@ msgid "Test Notification"
|
||||
msgstr "Testaa ilmoitusta"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Selvitetään osoitetta"
|
||||
msgid "Resolving address"
|
||||
msgstr "Selvitetään osoitetta"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -260,10 +256,6 @@ msgstr "Latausrajoitus saavutettu, keskeytetään lataukset"
|
||||
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"
|
||||
@@ -272,7 +264,7 @@ msgstr "%s ei ole kelvollinen sähköpostiosoite"
|
||||
msgid "Server address required"
|
||||
msgstr "Palvelimen osoite vaaditaan"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Virheellinen palvelimen osoite."
|
||||
|
||||
@@ -292,8 +284,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "TUNT polku \"%s\" ei ole sallittu"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Jono ei ole tyhjä, kansiota ei voida vaihtaa."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -347,7 +349,7 @@ msgstr "SQL komento epäonnistui, katso loki"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Tietokannan sulkeminen epäonnistui, katso loki"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Virheellinen tila lokihistoriassa kohteelle %s"
|
||||
@@ -414,7 +416,7 @@ msgid "Paused"
|
||||
msgstr "Keskeytetty"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Sinun täytyy määrittää enimmäiskaista ennen kaistarajoituksen käyttöönottoa."
|
||||
@@ -670,20 +672,10 @@ msgstr "Varmennus epäonnistui, tarkista käyttäjänimi/salasana."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Varoitus: LOCALHOST on hämärä, käytä numeerista IP-osoitetta."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Palvelimen osoite \"%s:%s\" ei ole kelvollinen."
|
||||
@@ -810,7 +802,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Ajetaan skripti"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Purkaessa havaittiin liikaa pakkauskerroksia [%s]"
|
||||
@@ -898,19 +889,6 @@ msgstr "Käyttökelvoton RAR arkisto"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Korruptoitunut RAR arkisto"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s tiedostoa kohteessa %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Virhe \"%s\" ajettaessa unzip() kohteelle %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Yritetään purkaa 7zip arkistoa salasanalla \"%s\""
|
||||
@@ -1169,6 +1147,18 @@ msgstr "Virhe ladattaessa %s, korruptoitunut tiedosto havaittu"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB lisätty jonoon"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ohitetaan kaksoiskappale NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1183,26 +1173,6 @@ msgstr "Tyhjä NZB tiedosto %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ohitetaan kaksoiskappale NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Keskeytetään kaksoiskappale NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1221,6 +1191,10 @@ msgstr "Virhe tuotaessa %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "KAKSOISKAPPALE"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "SALATTU"
|
||||
@@ -1266,6 +1240,10 @@ msgstr "%s artikkelia puuttui"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artikkelissa oli ei-vastaavia kaksoiskappaleita"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Keskeytetään kaksoiskappale NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2256,11 +2234,6 @@ msgstr "Nimi"
|
||||
msgid "Retry"
|
||||
msgstr "Yritä uudelleen"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Toiminnot"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2555,18 +2528,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Istunto vanhenee kun IP-osoite vaihtuu tai SABnzbd käynnistetään uudelleen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Unzip käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "7zip käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2577,7 +2542,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3081,6 +3046,10 @@ msgstr ""
|
||||
"Sijainti jonne SABnzbd ohjelman lokitiedostot tallennetaan.<br /><i>Vaatii "
|
||||
"SABnzbd uudelleenkäynnistyksen!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb varmuuskopiokansio"
|
||||
@@ -3248,15 +3217,6 @@ msgstr ""
|
||||
"Kun käyttäjän skripti palauttaa nollasta poikkeavan koodin, lataus merkitään"
|
||||
" epäonnistuneeksi."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Epäonnistuessa, kokeile vaihtoehtoista NZB:tä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Jotkin palvelimet tarjoavat vaihtoehtoisen NZB:n kun lataus epäonnistuu."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Kansion uudelleennimeäminen käytössä"
|
||||
@@ -3277,6 +3237,14 @@ msgstr "Esijonon käyttäjän skripti"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Käytetään ennen NZB lisäämistä jonoon."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Ylimääräiset PAR2 parametrit"
|
||||
@@ -3520,27 +3488,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Peruutetaan lataus, jos ladattaessa huomataan liikaa tiedostoja puuttuvan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
"Hyödyllinen jos uutispalvelimella on enemmän kuin yksi IPv4/IPv6 osoite"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4844,10 +4791,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Tuntematon SSL protokolla: Kokeile ottaa SSL käytöstä tai vaihda porttia."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Palvelin lopetettiin kesken kirjautumisen"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Palvelin vaatii käyttäjänimen ja salasanan."
|
||||
|
||||
169
po/main/fr.po
169
po/main/fr.po
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -8,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2023\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
@@ -65,14 +64,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "binaire unrar... Introuvable!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "Binaire 7za ... Introuvable!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "binaire unzip... Introuvable!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -181,8 +177,8 @@ msgid "Test Notification"
|
||||
msgstr "Test de Notification"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Résolution de l'adresse"
|
||||
msgid "Resolving address"
|
||||
msgstr "Résolution de l'adresse"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -279,10 +275,6 @@ msgstr "Quota atteint, téléchargement mis en pause"
|
||||
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"
|
||||
@@ -291,7 +283,7 @@ msgstr "%s n'est pas une adresse email valide"
|
||||
msgid "Server address required"
|
||||
msgstr "Adresse du serveur requise"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Adresse du serveur erronée"
|
||||
|
||||
@@ -313,9 +305,20 @@ msgstr ""
|
||||
"fichiers et dossiers qu'il crée."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "La file d'attente n'est pas vide, impossible de changer de dossier."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Erreur : La file d'attente n'est pas vide, impossible de changer le dossier."
|
||||
"Le dossier des téléchargements terminés ne peut pas être le même dossier que"
|
||||
" les téléchargements temporaires, ni être l'un de ses sous-dossiers"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -373,7 +376,7 @@ msgstr "Echec de la commande SQL, voir le journal"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Impossible de fermer la base de données, voir le journal"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Étape de journalisation invalide dans l'historique pour %s"
|
||||
@@ -443,7 +446,7 @@ msgid "Paused"
|
||||
msgstr "En pause"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Vous devez définir une bande passante maximale avant de pouvoir définir une "
|
||||
@@ -710,23 +713,10 @@ msgstr "Echec d'authentification, vérifiez les identifiant/mot de passe."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Echec de la tentative de connexion de %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Le dossier des téléchargements terminés ne peut pas être le même dossier que"
|
||||
" les téléchargements temporaires, ni être l'un de ses sous-dossiers"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Archives de sauvegarde non valides"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Avertissement: LOCALHOST est ambigü, utilisez une adresse IP numérique."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "L' adresse du serveur \"%s:%s\" n'est pas valide."
|
||||
@@ -860,7 +850,6 @@ msgstr "Tri des films"
|
||||
msgid "Running script"
|
||||
msgstr "Exécution du script"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Arborescence trop profonde dans le fichier compressé [%s]"
|
||||
@@ -951,19 +940,6 @@ msgstr "Fichier RAR inutilisable"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Fichier RAR corrompu"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s fichiers dans %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Erreur \"%s\" lors de l'exécution de unzip() sur %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "Aucun binaire 7za trouvé, impossible de décompresser \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Tentative 7zip avec le mot de passe \"%s\""
|
||||
@@ -1227,6 +1203,18 @@ msgstr "Erreur lors du chargement de %s, fichier corrompu détecté"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB ajouté à la file d'attente"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Doublon NZB ignoré \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Échec de duplication du NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dupliquer NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1241,26 +1229,6 @@ msgstr "Fichier NZB %s vide"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr "Le script de pré-file d'attente a marqué la tâche comme échouée"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Doublon NZB ignoré \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Échec de duplication du NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dupliquer NZB"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Mise en pause du doublon NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1279,6 +1247,10 @@ msgstr "Erreur lors de l'importation de %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DOUBLON"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "CHIFFRÉ"
|
||||
@@ -1324,6 +1296,10 @@ msgstr "%s articles manquants"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s articles avec doublons sans correspondance"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Mise en pause du doublon NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2327,11 +2303,6 @@ msgstr "Nom"
|
||||
msgid "Retry"
|
||||
msgstr "Réessayer"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2633,18 +2604,10 @@ msgstr ""
|
||||
"La session expirera quand votre adresse IP changera ou quand SABnzbd sera "
|
||||
"redémarré."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Activer Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Activer 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr "Par2 multi-cœur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2659,11 +2622,11 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
"Accélérez les réparations en installant Par2 multi-coeur, disponible sous de"
|
||||
" nombreuses plateformes."
|
||||
"Accélérez les réparations en installant par2cmdline-turbo, il est disponible"
|
||||
" pour de nombreuses plateformes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3191,6 +3154,10 @@ msgstr ""
|
||||
"Emplacement des fichiers journaux de SABnzbd.<br /><i>Redémarrage requis "
|
||||
"!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr "Purger les logs"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Dossier de sauvegarde des fichiers .nzb"
|
||||
@@ -3371,16 +3338,6 @@ msgstr ""
|
||||
"Lorsque le script de l'utilisateur renvoie un code de sortie \"non-zéro\", "
|
||||
"la tâche sera signalée comme échouée."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "En cas d'échec, essayer avec un NZB alternatif"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Certains serveurs proposent un NZB alternatif lorsqu'un téléchargement "
|
||||
"échoue."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activer le renommage du dossier"
|
||||
@@ -3401,6 +3358,14 @@ msgstr "Script utilisateur de pré-file d'attente"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Utilisé avant qu'un NZB n'entre dans la file d'attente."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr "Script de fin de file d'attente"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr "Exécuté après la fin du téléchargement de la file d'attente."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Paramètres PAR2 supplémentaires"
|
||||
@@ -3662,26 +3627,6 @@ msgstr ""
|
||||
"S'il apparait clairement pendant le téléchargement qu'il manque trop de "
|
||||
"données, annuler la tâche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Sélection de l'adresse IP du serveur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Première adresse IP"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Adresse IP sélectionnée au hasard"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Adresse IP la plus rapide, IPv6 de préférence"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Utile si un serveur de news a plus d'une adresse IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -5022,10 +4967,6 @@ msgstr ""
|
||||
"Protocole SSL inconnu: essayez de désactiver SSL ou de vous connecter sur un"
|
||||
" autre port."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Le serveur a interrompu l'ouverture de session."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Le serveur requiert un identifiant et un mot de passe."
|
||||
|
||||
167
po/main/he.po
167
po/main/he.po
@@ -1,14 +1,13 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# ION, 2022
|
||||
# ION, 2023
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
@@ -59,14 +58,11 @@ msgstr "גרסת UNRAR שלך היא %s, אנחנו ממליצים על גרסה
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar בינארי… לא נמצא!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za בינארי… לא נמצא!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip בינארי… לא נמצא!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -169,8 +165,8 @@ msgid "Test Notification"
|
||||
msgstr "בחן התראה"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " פותר כתובת"
|
||||
msgid "Resolving address"
|
||||
msgstr "פותר כתובת"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -258,10 +254,6 @@ msgstr "מכסה נוצלה, משהה הורדה"
|
||||
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 אינה כתובת דוא״ל תקפה"
|
||||
@@ -270,7 +262,7 @@ msgstr "%s אינה כתובת דוא״ל תקפה"
|
||||
msgid "Server address required"
|
||||
msgstr "כתובת שרת דרושה"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "כתובת שרת בלתי תקפה."
|
||||
|
||||
@@ -291,8 +283,20 @@ msgstr ""
|
||||
"הגדרת הרשאות של %s עשויה לדחות גישה מן SABnzbd אל הקבצים והתיקיות שהוא יוצר."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "התור אינו ריק, לא ניתן לשנות תיקייה."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"תיקיית ההורדות השלמות אינה יכולה להיות אותה תיקייה או תת־תיקייה של תיקיית "
|
||||
"ההורדות הזמניות"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -346,7 +350,7 @@ msgstr "פקודת SQL נכשלה, ראה יומן"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "נכשל בסגירת מסד נתונים, ראה יומן"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "רישום של אירוע בלתי תקף בהיסטוריה עבור %s"
|
||||
@@ -415,7 +419,7 @@ msgid "Paused"
|
||||
msgstr "מושהה"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr "אתה חייב לקבוע רוחב פס מרבי לפני שאתה קובע מגבלת רוחב פס"
|
||||
|
||||
@@ -668,22 +672,10 @@ msgstr "אימות נכשל, בדוק שם משתמש/סיסמה."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "ניסיון כניסה בלתי מוצלח מן %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"תיקיית ההורדות השלמות אינה יכולה להיות אותה תיקייה או תת־תיקייה של תיקיית "
|
||||
"ההורדות הזמניות"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "ארכיון בלתי תקף של גיבוי"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "אזהרה: LOCALHOST הוא דו־משמעי, השתמש בכתובת IP מספרית."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "כתובת השרת \"%s:%s\" אינה תקפה."
|
||||
@@ -812,7 +804,6 @@ msgstr "מיון סרטים"
|
||||
msgid "Running script"
|
||||
msgstr "מריץ תסריט"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "פריקת קינון ארוכה מדי [%s]"
|
||||
@@ -900,19 +891,6 @@ msgstr "קובץ RAR בלתי שמיש"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "קובץ RAR פגום"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s קבצים תוך %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "שגיאה \"%s\" בזמן הרצת unzip() על %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "בינארי 7za לא נמצא, לא ניתן לפרוק את \"%s\""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "מנסה 7zip עם הסיסמה \"%s\""
|
||||
@@ -1172,6 +1150,18 @@ msgstr "שגיאה בטעינת %s, קובץ פגום התגלה"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB התווסף לתור"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "מתעלם מן NZB כפול \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "מכשיל NZB כפול \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "NZB כפול"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1186,26 +1176,6 @@ msgstr "קובץ NZB ריק %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr "תסריט קדם־תור סומן כנכשל"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "מתעלם מן NZB כפול \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "מכשיל NZB כפול \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "NZB כפול"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "משהה NZB כפול \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1224,6 +1194,10 @@ msgstr "שגיאה ביבוא %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "כפול"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "מוצפן"
|
||||
@@ -1269,6 +1243,10 @@ msgstr "%s מאמרים היו חסרים"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "אל %s מאמרים יש כפילויות בלתי תואמות"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "משהה NZB כפול \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2263,11 +2241,6 @@ msgstr "שם"
|
||||
msgid "Retry"
|
||||
msgstr "נסה שוב"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "פעולות"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2561,18 +2534,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr "כאשר כתובת ה־IP שלך משתנה או כאשר SABnzbd מופעל מחדש, השיח יפוג."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "אפשר חילוץ zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "אפשר חילוץ 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr "Par2 מרובה ליבות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2586,9 +2551,9 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr "האץ תיקונים ע״י התקנת Par2 מרובה־ליבות, הוא זמין עבור פלטפורמות רבות."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3086,6 +3051,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"מיקום של קבצי יומן עבור SABnzbd.<br /><i>דורש הפעלה מחדש של SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "תיקיית גיבוי .nzb"
|
||||
@@ -3254,14 +3223,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"כאשר תסריט המשתמש מחזיר קוד יציאה בלתי אפסי, העבודה תסומן בדגל כנכשלה."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "בכישלון, נסה NZB חלופי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "מספר שרתים מספקים קובץ NZB חלופי כאשר הורדה נכשלת."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "אפשר שינוי שם תיקייה"
|
||||
@@ -3282,6 +3243,14 @@ msgstr "תסריט משתמש של קדם־תור"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "בשימוש לפני ש־NZB נכנס לתור."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "פרמטרי PAR2 נוספים"
|
||||
@@ -3522,26 +3491,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr "כאשר במהלך הורדה מתבהר שיותר מדי נתונים חסרים, בטל את העבודה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "בחירת כתובת IP של שרת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "כתובת IP ראשונה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "כתובת IP שנבחרה באופן אקראי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "כתובת IP הזריזה ביותר, העדפה אל IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "שימושי אם לשרת חדשות יש יותר מכתובת IPv4/IPv6 אחת"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4846,10 +4795,6 @@ msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr "פרוטוקול SSL בלתי ידוע: נסה להשבית SSL או להתחבר על פתחה שונה."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "שרת יצא במהלך רצף כניסות."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ".השרת דורש שם משתמש וסיסמה"
|
||||
|
||||
159
po/main/nb.po
159
po/main/nb.po
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
@@ -59,14 +58,11 @@ msgstr "Din Unrar-versjon er %s, vi anbefaler versjon %s eller høyere. <br />"
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar-binærfil... IKKE funnet!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za-binærfil... IKKE funnet!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip-binærfil... IKKE funnet!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -168,8 +164,8 @@ msgid "Test Notification"
|
||||
msgstr "Test varslingen"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Løs adresse"
|
||||
msgid "Resolving address"
|
||||
msgstr "Løs adresse"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -256,10 +252,6 @@ msgstr "Kvote oppbrukt, setter nedlasting på pause"
|
||||
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"
|
||||
@@ -268,7 +260,7 @@ msgstr "%s er ikke en godkjent e-post-adresse"
|
||||
msgid "Server address required"
|
||||
msgstr "Krever server-adresse"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Ugyldig server-adresse."
|
||||
|
||||
@@ -288,8 +280,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-sti \"%s\" er ikke tillatt her"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Køen er ikke tom, kan ikke bytte mappe."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -343,7 +345,7 @@ msgstr "SQL-kommando mislyktes, se logg"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Kunne ikke stenge databasen, se logg"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Ugyldig scenen logging i historien for %s"
|
||||
@@ -410,7 +412,7 @@ msgid "Paused"
|
||||
msgstr "Pauset"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr "Du må sette maks båndbredde før du kan sette en båndbreddebegrensning"
|
||||
|
||||
@@ -665,20 +667,10 @@ msgstr "Godkjenning mislyktes, kontroller brukernavn og passord."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Mislykket påloggingsforsøk fra %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Advarsel: LOCALHOST er tvetydig, bruk numerisk IP-adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradressen \"%s:%s\" er ikke gyldig."
|
||||
@@ -805,7 +797,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Kjører skript"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Utpakking nestet for dypt [%s]"
|
||||
@@ -893,19 +884,6 @@ msgstr "Ubrukelig RAR-fil"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s filer på %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Feil \"%s\" under kjøring av unzip() på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Prøver 7zip med password \"%s\""
|
||||
@@ -1165,6 +1143,18 @@ msgstr "Lastingsfeil %s, feilaktig fil oppdaget"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB er lagt til i køen"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorerer duplikatfil \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1179,26 +1169,6 @@ msgstr "Tom NZB-fil %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorerer duplikatfil \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Stanser duplikatfil \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1217,6 +1187,10 @@ msgstr "Kunne ikke importere %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLIKAT"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "KRYPTERT"
|
||||
@@ -1262,6 +1236,10 @@ msgstr "%s artikler manglet"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artikler hadde ulike duplikater"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Stanser duplikatfil \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2252,11 +2230,6 @@ msgstr "Navn"
|
||||
msgid "Retry"
|
||||
msgstr "Prøv igjen"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Hendelser"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2549,18 +2522,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Aktiver Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Aktiver 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2571,7 +2536,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3063,6 +3028,10 @@ msgstr ""
|
||||
"Plass for lagrede loggfiler fran SABnzbd.<br /><i>Krever omstart av "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb Reservemappe"
|
||||
@@ -3229,14 +3198,6 @@ msgstr ""
|
||||
"Når brukerskriptet returnerer en ikke-null exit kode, vil jobben bli flagget"
|
||||
" som mislykket."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Når den feiler, prøv alternativ NZB-fil"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Noen servere vil gi en alternativ NZB når en nedlasting mislykkes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver omdøping av mappe"
|
||||
@@ -3257,6 +3218,14 @@ msgstr "Før-kø bruker skript"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Brukes før en NZB blir lagt til kø"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Ekstra PAR2 parametere"
|
||||
@@ -3496,26 +3465,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Avbryt jobben om det blir klart under nedlasting at for mye data mangler"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nyttig hvis en newsserver har mer enn en IPv4/IPv6-adresse"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4813,10 +4762,6 @@ msgstr ""
|
||||
"Ukjent SSL-protokoll: Prøv å deaktivere SSL eller koble til på en annen "
|
||||
"port."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Server avbrøt undet innloggingssekvens"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Server krever brukernavn og passord."
|
||||
|
||||
166
po/main/nl.po
166
po/main/nl.po
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Rik Brouwer, 2022
|
||||
@@ -9,7 +8,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
@@ -63,14 +62,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "unrar-programma niet gevonden."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "7za-programma niet gevonden."
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "unzip-programma niet gevonden."
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -176,8 +172,8 @@ msgid "Test Notification"
|
||||
msgstr "Test melding"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Adres opzoeken"
|
||||
msgid "Resolving address"
|
||||
msgstr "Adres opzoeken"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -272,10 +268,6 @@ msgstr "Quotum verbruikt, download is gestopt"
|
||||
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"
|
||||
@@ -284,7 +276,7 @@ msgstr "%s is geen geldig e-mailadres"
|
||||
msgid "Server address required"
|
||||
msgstr "Serveradres verplicht"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Ongeldige servernaam"
|
||||
|
||||
@@ -306,8 +298,20 @@ msgstr ""
|
||||
"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."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC-pad '%s' hier niet toegestaan."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Wachtrij is niet leeg, andere map kiezen niet mogelijk."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"De Map voor verwerkte downloads mag niet een map in de Tijdelijke download "
|
||||
"map zijn."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -364,7 +368,7 @@ msgstr "SQL-commando mislukt, zie logbestand"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Het lukt niet om de database te sluiten, zie log"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Ongeldig loggen van fase in geschiedenis voor %s"
|
||||
@@ -436,7 +440,7 @@ msgid "Paused"
|
||||
msgstr "Gepauzeerd"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Je moet eerst een maximumbandbreedte instellen voordat je een limiet kunt "
|
||||
@@ -699,22 +703,10 @@ msgstr "Inloggen mislukt, controleer gebruikersnaam en wachtwoord."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Mislukte login poging van %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"De Map voor verwerkte downloads mag niet een map in de Tijdelijke download "
|
||||
"map zijn."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Ongeldig backup bestand"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Let op: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradres \"%s:%s\" is niet geldig."
|
||||
@@ -846,7 +838,6 @@ msgstr "Film sorteren"
|
||||
msgid "Running script"
|
||||
msgstr "Script uitvoeren"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Teveel niveaus om uit te pakken [%s]"
|
||||
@@ -934,19 +925,6 @@ msgstr "Onbruikbaar RAR-bestand"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Beschadigd RAR-bestand"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s bestanden in %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Fout '%s' bij uitvoeren van unzip() op %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "Geen 7za-programma gevonden, kan \"%s\" niet uitpakken"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Uitpakpoging met 7zip en wachtwoord '%s'"
|
||||
@@ -1211,6 +1189,18 @@ msgstr "Fout bij inladen van %s, corrupt bestand gevonden"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "Download aan wachtrij toegevoegd"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Dubbele download \"%s\" overgeslagen"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Download '%s' geweigerd omdat het een dubbele is"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dubbele download"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1225,26 +1215,6 @@ msgstr "NZB-bestand %s is leeg"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr "Wachtrij filter script heeft de download afgekeurd"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Dubbele download \"%s\" overgeslagen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Download '%s' geweigerd omdat het een dubbele is"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dubbele download"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Dubbele download \"%s\" gepauzeerd"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1263,6 +1233,10 @@ msgstr "Fout bij importeren van %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUBBEL"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "VERSLEUTELD"
|
||||
@@ -1308,6 +1282,10 @@ msgstr "%s artikelen ontbreken"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artikelen hadden afwijkende duplicaten"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Dubbele download \"%s\" gepauzeerd"
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2303,11 +2281,6 @@ msgstr "Naam"
|
||||
msgid "Retry"
|
||||
msgstr "Opnieuw"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2606,18 +2579,10 @@ msgstr ""
|
||||
"Als je IP adres veranderd of SABnzbd opnieuw wordt opgestart, zal de sessie "
|
||||
"verlopen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Unzip toestaan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "7Zip toestaan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr "Multicore Par2"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2632,11 +2597,9 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
"Versnel reparaties door multi-core par2 te installeren. Beschikbaar voor "
|
||||
"veel besturingssystemen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Version"
|
||||
@@ -3148,6 +3111,10 @@ msgstr ""
|
||||
"Map waarin de log bestanden worden opgeslagen<br /><i>Vereist een "
|
||||
"herstart</i>."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Map voor het bewaren van NZB-bestanden"
|
||||
@@ -3328,15 +3295,6 @@ msgstr ""
|
||||
"Wanneer het script een exit code anders dan 0 geeft, zal de download worden "
|
||||
"afgekeurd."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Bij mislukte download: probeer alternatieve NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Sommige indexers hebben een alternatieve NZB wanneer een download mislukt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Gebruik tijdelijke mapnamen"
|
||||
@@ -3357,6 +3315,14 @@ msgstr "Wachtrij-filter script"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Word uitgevoerd vóór een download aan de wachtrij word toegevoegd"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Extra PAR2 parameters"
|
||||
@@ -3613,26 +3579,6 @@ msgstr ""
|
||||
"Als tijdens het downloaden duidelijk wordt dat te veel data ontbreekt, breek"
|
||||
" dan de download af"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Server IP adres selectie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Eerste IP adres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "willekeurig geselecteerd IP adres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Snelste IP adres, voorkeur voor IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nuttig wanneer een server meer dan één IPv4 of IPv6-adres heeft"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4953,10 +4899,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Onbekend SSL protocol: probeer het zonder SSL of probeer een andere poort."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "De server stopte tijdens de login"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Server heeft een gebruikersnaam en een wachtwoord nodig."
|
||||
|
||||
161
po/main/pl.po
161
po/main/pl.po
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
@@ -58,14 +57,11 @@ msgstr "Twoja wersja unrar to %s, zalecana jest wersja %s lub wyższa.<br />"
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "Program unrar ... NIE znaleziono!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "Program 7za... NIE znaleziono!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "Program unzip ... NIE znaleziono!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -164,8 +160,8 @@ msgid "Test Notification"
|
||||
msgstr "Powiadomienie testowe"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Rozwiązywanie adresu"
|
||||
msgid "Resolving address"
|
||||
msgstr "Rozwiązywanie adresu"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -252,10 +248,6 @@ msgstr "Przekroczono limit, wstrzymywanie pobierania"
|
||||
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"
|
||||
@@ -264,7 +256,7 @@ msgstr "%s nie jest prawidłowym adresem email"
|
||||
msgid "Server address required"
|
||||
msgstr "Wymagane jest podanie adresu serwera"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Nieprawidłowy adres serwera."
|
||||
|
||||
@@ -284,8 +276,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "Ścieżka UNC \"%s\" niedozwolona"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Kolejka nie jest pusta, nie można zmienić katalogu."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -339,7 +341,7 @@ msgstr "Błąd polecenia SQL, sprawdź logi"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Błąd zamykania bazy danych, sprawdź logi"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Nieprawidłowy log etapu w historii dla %s"
|
||||
@@ -406,7 +408,7 @@ msgid "Paused"
|
||||
msgstr "Wstrzymano"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Przed ustawieniem limitu przepustowości należy ustawić maksymalną "
|
||||
@@ -665,20 +667,10 @@ msgstr "Błąd połączenia, sprawdź nazwę użytkownika i hasło."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Uwaga: LOCALHOST jest niejednoznaczne, użyj adresu IP."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Nieprawidłowy adres serwera \"%s:%s\"."
|
||||
@@ -805,7 +797,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Uruchamianie skryptu"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Zbyt głęboki poziom zagnieżdżenia podczas rozpakowywania [%s]"
|
||||
@@ -893,19 +884,6 @@ msgstr "Bezużyteczny plik RAR"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s plików w %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Błąd \"%s\" podczas uruchamiania unzip() na %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Próba rozpakowania archiwum 7zip z użyciem hasła \"%s\""
|
||||
@@ -1167,6 +1145,18 @@ msgstr "Błąd ładowania %s, wykryto uszkodzony plik"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB dodany do kolejki"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignoruję zduplikowany NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1181,26 +1171,6 @@ msgstr "Pusty plik NZB %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignoruję zduplikowany NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Wstrzymuję zduplikowany NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1219,6 +1189,10 @@ msgstr "Błąd importu %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLIKAT"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "ZASZYFROWANY"
|
||||
@@ -1264,6 +1238,10 @@ msgstr "Brakowało %s artykułów"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artykułów posiadało niepasujące duplikaty"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Wstrzymuję zduplikowany NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2258,11 +2236,6 @@ msgstr "Nazwa"
|
||||
msgid "Retry"
|
||||
msgstr "Ponów"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Działania"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2554,18 +2527,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Włącz unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Włącz 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2576,7 +2541,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3071,6 +3036,10 @@ msgid ""
|
||||
"Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr "Lokalizacja logów SABnzbd.<br /><i>Wymaga restartu SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Katalog kopii zapasowych .nzb"
|
||||
@@ -3237,16 +3206,6 @@ msgstr ""
|
||||
"Jeśli skrypt użytkownika zwróci niezerowy kod zakończenia, zadanie zostanie "
|
||||
"oznaczone jako nieudane"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Użyj alternatywnego NZB w razie niepowodzenia"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Niektóre serwery udostępniają alternatywne NZB, kiedy pobieranie kończy się "
|
||||
"niepowodzeniem"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Włącz zmianę nazw katalogów"
|
||||
@@ -3267,6 +3226,14 @@ msgstr "Skrypt użytkownika przed zakolejkowaniem"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Uruchamiany zanim plik NZB zostanie umieszczony w kolejce"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Dodatkowe parametry PAR2"
|
||||
@@ -3507,26 +3474,6 @@ msgstr ""
|
||||
"Jeśli podczas pobierania okaże się, że brakuje zbyt dużej ilości danych, "
|
||||
"przerwij zadanie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Przydatne, gdy serwer ma więcej niż jeden adres IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4824,10 +4771,6 @@ msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Serwer przerwał połączenie w trakcie logowania."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Serwer wymaga podania nazwy użytkownika i hasła."
|
||||
|
||||
160
po/main/pt_BR.po
160
po/main/pt_BR.po
@@ -1,13 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
@@ -60,14 +59,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "aplicativo unrar... NÃO encontrado!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "aplicativo 7za... NÃO encontrado!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "aplicativo unzip... NÃO encontrado!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -168,8 +164,8 @@ msgid "Test Notification"
|
||||
msgstr "Notificação de teste"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Resolvendo endereço"
|
||||
msgid "Resolving address"
|
||||
msgstr "Resolvendo endereço"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -256,10 +252,6 @@ msgstr "Quota esgotada, pausando o download"
|
||||
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"
|
||||
@@ -268,7 +260,7 @@ msgstr "%s não é um endereço de e-mail válido"
|
||||
msgid "Server address required"
|
||||
msgstr "Endereço do servidor necessário"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Endereço do servidor inválido."
|
||||
|
||||
@@ -288,8 +280,18 @@ msgid ""
|
||||
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."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "O caminho UNC \"%s\" não é permitido aqui"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "A fila não está vazia. Não será possível mudar de pasta."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -345,7 +347,7 @@ msgstr "O comando SQL falhou. Consulte o log"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Falha ao fechar o banco de dados. Consulte o log"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Registro inválido de etapa no histórico para %s"
|
||||
@@ -412,7 +414,7 @@ msgid "Paused"
|
||||
msgstr "Pausado"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Você deve definir a largura de banda máxima antes de definir um limite de "
|
||||
@@ -669,20 +671,10 @@ msgstr "Falha de autenticação, verifique usuário / senha."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Atenção: LOCALHOST é ambíguo, use endereço IP numérico."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Endereço de servidor \"%s:%s\" não é válido."
|
||||
@@ -809,7 +801,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Executando script"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Aninhamento de descompactação com muitos níveis [%s]"
|
||||
@@ -897,19 +888,6 @@ msgstr "Arquivo RAR inutilizável"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s arquivos em %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Erro \"%s\" ao executar unzip() em %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Testando 7zip com a senha \"%s\""
|
||||
@@ -1168,6 +1146,18 @@ msgstr "Erro ao carregar %s. Arquivo corrompido detectado"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB adicionado à fila"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorando NZB duplicado \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1182,26 +1172,6 @@ msgstr "Arquivo NZB %s vazio"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorando NZB duplicado \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicado \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1220,6 +1190,10 @@ msgstr "Erro ao importar %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLICADO"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "CRIPTOGRAFADO"
|
||||
@@ -1265,6 +1239,10 @@ msgstr "%s artigos estavam faltando"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s artigos tinham duplicatas não-correspondentes"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicado \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2261,11 +2239,6 @@ msgstr "Nome"
|
||||
msgid "Retry"
|
||||
msgstr "Repetir"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Ações"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2557,18 +2530,10 @@ msgid ""
|
||||
"expire."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Habilitar Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Ativar 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2579,7 +2544,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3074,6 +3039,10 @@ msgstr ""
|
||||
"Local dos arquivos de log do SABnzbd.<br /><i>Será necessário reiniciar o "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Pasta de Backup de .nzb"
|
||||
@@ -3239,15 +3208,6 @@ msgstr ""
|
||||
"Quando um script do usuário retornar um código de saída diferente de zero, o"
|
||||
" trabalho será marcado como falho"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Em caso de falha, tente um NZB alternativo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Alguns servidores fornecem um NZB alternativo quando um download falha."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renomeação de pasta"
|
||||
@@ -3268,6 +3228,14 @@ msgstr "Script de usuário de pré-fila"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Utilizado antes de um NZB entrar na fila."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Parâmetros Extras PAR2"
|
||||
@@ -3509,26 +3477,6 @@ msgstr ""
|
||||
"Quando durante o download ficar claro que muitos dados estão faltando, "
|
||||
"cancela a tarefa"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Útil se um newsserver tem mais de um endereço IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4823,10 +4771,6 @@ msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Servidor parou durante a sequência de login."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Servidor requer usuário e senha."
|
||||
|
||||
163
po/main/ro.po
163
po/main/ro.po
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Eduard Baniceru <war4peace@gmail.com>, 2021
|
||||
@@ -8,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
@@ -63,14 +62,11 @@ msgstr ""
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr "binar unrar... Negăsit!"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "7za binary... NOT found!"
|
||||
msgstr "Fişier executabil 7za ... Indisponibil!"
|
||||
|
||||
#: SABnzbd.py
|
||||
msgid "unzip binary... NOT found!"
|
||||
msgstr "binar unzip... Negăsit!"
|
||||
|
||||
#. Error message
|
||||
#: SABnzbd.py
|
||||
msgid "Essential modules are missing, downloading cannot start."
|
||||
@@ -173,8 +169,8 @@ msgid "Test Notification"
|
||||
msgstr "Notificări Test"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid " Resolving address"
|
||||
msgstr " Reolvare adresă"
|
||||
msgid "Resolving address"
|
||||
msgstr "Reolvare adresă"
|
||||
|
||||
#. No value, used in dropdown menus
|
||||
#: sabnzbd/api.py, sabnzbd/skintext.py
|
||||
@@ -267,10 +263,6 @@ msgstr "Cotă epuizată, întrerupem descărcarea"
|
||||
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ă"
|
||||
@@ -279,7 +271,7 @@ msgstr "%s nu este o adresă email validă"
|
||||
msgid "Server address required"
|
||||
msgstr "Adresă server necesară"
|
||||
|
||||
#: sabnzbd/cfg.py, sabnzbd/utils/servertests.py
|
||||
#: sabnzbd/cfg.py, sabnzbd/newswrapper.py
|
||||
msgid "Invalid server address."
|
||||
msgstr "Adresă server invalidă"
|
||||
|
||||
@@ -299,8 +291,20 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "cale UNC \"%s\" nu este premisă aici"
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
msgstr "Coada nu este goală, nu pot schimba dosar."
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Directorul de descărcări finalizate nu poate fi același, sau un subdirector "
|
||||
"al directorului de descărcări temporare"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -355,7 +359,7 @@ msgstr "Comandă SQL Nereuşită, vedeţi jurnal"
|
||||
msgid "Failed to close database, see log"
|
||||
msgstr "Închidere bază de date nereuşită, vedeţi jurnal"
|
||||
|
||||
#. Error message
|
||||
#. Warning message
|
||||
#: sabnzbd/database.py
|
||||
msgid "Invalid stage logging in history for %s"
|
||||
msgstr "Jurnal istoric stagii invalid pentru %s"
|
||||
@@ -425,7 +429,7 @@ msgid "Paused"
|
||||
msgstr "Întrerupt"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py, sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/skintext.py
|
||||
msgid "You must set a maximum bandwidth before you can set a bandwidth limit"
|
||||
msgstr ""
|
||||
"Trebuie să seta-ţi lățimea de bandă maximă înainte de a seta o limită de "
|
||||
@@ -682,22 +686,10 @@ msgstr "Autentificare nereuşită, verifică nume utilizator/parolă."
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
msgstr "Încercare de conectare nereușită de la %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"The Completed Download Folder cannot be the same or a subfolder of the "
|
||||
"Temporary Download Folder"
|
||||
msgstr ""
|
||||
"Directorul de descărcări finalizate nu poate fi același, sau un subdirector "
|
||||
"al directorului de descărcări temporare"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Atenţie:LOCALHOST este ambiguu, folosiţi o adresă IP numerică"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa server \"%s:%s\" nu este validă"
|
||||
@@ -828,7 +820,6 @@ msgstr ""
|
||||
msgid "Running script"
|
||||
msgstr "Rulare script"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpack nesting too deep [%s]"
|
||||
msgstr "Numărul de arhive încorporate este prea mare [%s]"
|
||||
@@ -917,19 +908,6 @@ msgstr "Fișier RAR ce poate fi folosit"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Fișier RAR corupt"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s fişiere în %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Error \"%s\" while running unzip() on %s"
|
||||
msgstr "Eroare \"%s\" în timpul rulării unzip() pe %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "No 7za binary found, cannot unpack \"%s\""
|
||||
msgstr "Nu s-a găsit binar 7za, nu pot dezarhiva „%s”"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying 7zip with password \"%s\""
|
||||
msgstr "Încerc 7zip cu parola \"%s\""
|
||||
@@ -1193,6 +1171,18 @@ msgstr "Eroare încărcare %s, fişier corupt detectat"
|
||||
msgid "NZB added to queue"
|
||||
msgstr "NZB adăugat în coadă"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorăm duplicat NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Eșuare duplicat NZB „%s”"
|
||||
|
||||
#: sabnzbd/nzbqueue.py, sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "NZB duplicat"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Invalid NZB file %s, skipping (error: %s)"
|
||||
@@ -1207,26 +1197,6 @@ msgstr "Fişier NZB gol %s"
|
||||
msgid "Pre-queue script marked job as failed"
|
||||
msgstr "Scriptul pre-coadă a marcat sarcina ca nereușită"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Ignoring duplicate NZB \"%s\""
|
||||
msgstr "Ignorăm duplicat NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Eșuare duplicat NZB „%s”"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "NZB duplicat"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Întrerupem duplicat NZB \"%s\""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Unwanted Extension in file %s (%s)"
|
||||
@@ -1245,6 +1215,10 @@ msgstr "Eroare importare %s"
|
||||
msgid "DUPLICATE"
|
||||
msgstr "DUPLICAT"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ALTERNATIVE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "ENCRYPTED"
|
||||
msgstr "ENCRIPTAT"
|
||||
@@ -1290,6 +1264,10 @@ msgstr "%s articolele au fost lipsă"
|
||||
msgid "%s articles had non-matching duplicates"
|
||||
msgstr "%s articolele au avut duplicate diferite"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Întrerupem duplicat NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
@@ -2288,11 +2266,6 @@ msgstr "Nume"
|
||||
msgid "Retry"
|
||||
msgstr "Reîncearcă"
|
||||
|
||||
#. Queue end-of-queue selection box
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Acțiuni"
|
||||
|
||||
#. Queue page table, script selection menu
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Scripts"
|
||||
@@ -2587,18 +2560,10 @@ msgstr ""
|
||||
"Atunci când modificați adresa IP sau dacă SABnzbd este repornit sesiunea "
|
||||
"dumneavoastră va expira."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Unzip"
|
||||
msgstr "Activează Unzip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Activează 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
@@ -2609,7 +2574,7 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing multicore Par2, it is available for many "
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
"platforms."
|
||||
msgstr ""
|
||||
|
||||
@@ -3099,6 +3064,10 @@ msgstr ""
|
||||
"Locaţie a fişierelor jurnal ale SABnzbd.<br /><i>Necesită repornire "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Dosar Copie de Siguranţă .nzb"
|
||||
@@ -3266,14 +3235,6 @@ msgstr ""
|
||||
"Când un script de utilizator returnează o ieșire diferit de codul de ieșire,"
|
||||
" sarcina v fi marcată ca fiind nereușită."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "La eroare, încearcă NZB alternativ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Unele server oferă o alternativă dacă un NZB eșuează."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activează redenumire dosar"
|
||||
@@ -3294,6 +3255,14 @@ msgstr "Script utilizator Pre-Coadă"
|
||||
msgid "Used before an NZB enters the queue."
|
||||
msgstr "Folosit înainte ca un NZB să intre în coadă."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On queue finish script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Executed after the queue finishes downloading."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Parametri Extra PAR2"
|
||||
@@ -3537,26 +3506,6 @@ msgstr ""
|
||||
"Atunci când e clar că o sarcină va eșua din cauza lipsei de date pe "
|
||||
"server(e), anulează sarcina"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Util dacă un server de știri are mai mult decât o adresă IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
@@ -4855,10 +4804,6 @@ msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server quit during login sequence."
|
||||
msgstr "Serverul a renunţat în timpul logării."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Serverul necesită nume utilizator şi parolă"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user