Compare commits

..

14 Commits
4.2.0 ... 4.2.1

Author SHA1 Message Date
Safihre
18f4cc25f3 Add 4.2.1 to appdata 2024-01-05 10:11:07 +01:00
Safihre
b755192600 Update version to 4.2.1 2024-01-05 09:54:19 +01:00
Safihre
045140cfbc Merge branch '4.2.x' 2024-01-05 09:54:04 +01:00
Safihre
ff2b9243e9 Update text files for 4.2.1 2024-01-05 09:53:09 +01:00
Safihre
471fb7a83c Log waiting for download folder at Info level
Closes #2768
2024-01-05 09:34:28 +01:00
Safihre
0db5ae8390 Updates to table structure require commit
Closes #2769
2024-01-05 09:33:46 +01:00
SABnzbd Automation
e36f60085f Update translatable texts
[skip ci]
2024-01-04 13:42:32 +00:00
Safihre
3718fc36f0 Don't block network drives, only warn against them 2024-01-04 14:41:25 +01:00
Safihre
71a41f6369 Catch None-return value from user_version database command
Relates to #2764
2024-01-04 14:06:41 +01:00
SABnzbd Automation
47a2f9a4a7 Update translatable texts
[skip ci]
2024-01-03 21:11:59 +00:00
Safihre
a6f0bc0490 New release check is performed daily 2024-01-03 22:10:08 +01:00
Safihre
cb7c37a836 Remove outdated certificate validation check
It was relevant in Python 2.7-days.
This was we also don't make any external HTTP calls on start-up anymore, so hopefully we upset less virus scanners.
2024-01-03 22:04:42 +01:00
Safihre
e89eba08c4 Add helper function is_none 2024-01-03 15:56:09 +01:00
Sander
d5d857983d Improved IPv6 address detection (#2753)
* happyeyeballs(): you can specify the family

* happyeyeballs(): you can specify the family

* happyeyeballs(): pytest

* happyeyeballs(): measure internetspeed_ipv4 and internetspeed_ipv6

* happyeyeballs(): measure internetspeed_ipv4 and internetspeed_ipv6

* happyeyeballs(): corrected pytest in case no ipv6 in environment

* internetspeed ipv4 and ipv6

* take care when ipv6 is not working

* take care when ipv6 is not working

* take care when ipv6 is not working

* take care when ipv6 is not working

* take care when ipv6 is not working

* black formatting

* faster test-HE on ipv4-only network

* comment in unittest

* requests in requirements.txt

* use urllib, not requests

* use urllib, not requests

* logging: tell family, if specified

* logging: tell family, if specified

* Merge remote-tracking branch 'origin/ipv6_HE_speedtest_address' into ipv6_HE_speedtest_address

* Merge remote-tracking branch 'origin/ipv6_HE_speedtest_address' into ipv6_HE_speedtest_address

* cleanup of getipaddress

* cleanup of getipaddress

* cleanup of getipaddress

* cleanup of getipaddress

* Merge remote-tracking branch 'origin/ipv6_HE_speedtest_address' into ipv6_HE_speedtest_address

* Changes to PR

* Make sure the returned IP is valid

---------

Co-authored-by: sander <san.d.erjonkers+github@gmail.com>
Co-authored-by: Safihre <safihre@sabnzbd.org>
2024-01-03 14:25:34 +01:00
44 changed files with 348 additions and 460 deletions

View File

@@ -1,7 +1,16 @@
Release Notes - SABnzbd 4.2.0
Release Notes - SABnzbd 4.2.1
=========================================================
This is the latest stable SABnzbd release, version 4.2.0, which includes several new features and bug fixes.
This is a bug-fix release of SABnzbd 4.2.0.
## Bug-fixes and changes since 4.2.0:
* **Bug-fixes:**
* New downloads did not appear in the History after the update to 4.2.0.
* **Changes:**
* The external IPv6-address is shown, instead of the internal address.
* Windows: Network drives as `Download Folder` are no longer blocked, only warned against.
## Key changes since 4.1.0

View File

@@ -103,8 +103,7 @@ import sabnzbd.config as config
import sabnzbd.cfg
import sabnzbd.notifier as notifier
import sabnzbd.zconfig
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, dnslookup
from sabnzbd.utils.getperformance import getpystone, getcpu
from sabnzbd.getipaddress import local_ipv4
import sabnzbd.utils.ssdp as ssdp
try:
@@ -1474,7 +1473,7 @@ def main():
external_host = cherryhost
else:
# Fall back to the IPv4 address of the LAN interface
external_host = localipv4()
external_host = local_ipv4()
logging.debug("Using %s as host address for Bonjour and SSDP", external_host)
# Only broadcast to local network addresses. If local ranges have been defined, further

View File

@@ -33,14 +33,6 @@
$ssl_version
</td>
</tr>
<!--#if not $certificate_validation#-->
<tr>
<th scope="row"></th>
<td>
<span class="label label-danger">$T('warning')</span> $T('explain-nosslcontext')
</td>
</tr>
<!--#end if#-->
<!--#if not $windows and not $macos#-->
<tr>
<th scope="row">Par2cmdline-turbo:</th>

View File

@@ -172,11 +172,10 @@
<option value="1" <!--#if $check_new_rel == 1 then 'selected="selected"' else ""#--> >$T('on')</option>
<option value="2" <!--#if $check_new_rel == 2 then 'selected="selected"' else ""#--> >$T('also-test')</option>
</select>
<span class="desc">$T('explain-check_new_rel')</span>
</div>
<div class="field-pair advanced-settings <!--#if int($certificate_validation) == 0 then "disabled" else ""#-->">
<div class="field-pair advanced-settings">
<label class="config" for="enable_https_verification">$T('opt-enable_https_verification')</label>
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#--> />
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('explain-enable_https_verification')</span>
</div>
<div class="field-pair advanced-settings">

View File

@@ -91,9 +91,9 @@
<label class="config" for="timeout">$T('srv-timeout')</label>
<input type="number" name="timeout" id="timeout" min="20" max="240" /> <i>$T('seconds')</i>
</div>
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
<div class="field-pair advanced-settings">
<label class="config" for="ssl_verify">$T('opt-ssl_verify')</label>
<select name="ssl_verify" id="ssl_verify" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<select name="ssl_verify" id="ssl_verify">
<option value="2" selected>$T('ssl_verify-strict')</option>
<option value="1">$T('ssl_verify-normal')</option>
<option value="0">$T('ssl_verify-disabled')</option>
@@ -223,9 +223,9 @@
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="20" max="240" required /> <i>$T('seconds')</i>
</div>
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
<div class="field-pair advanced-settings">
<label class="config" for="ssl_verify$cur">$T('opt-ssl_verify')</label>
<select name="ssl_verify" id="ssl_verify$cur" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<select name="ssl_verify" id="ssl_verify$cur">
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
<option value="0" <!--#if $server['ssl_verify'] == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>

View File

@@ -69,7 +69,7 @@
<div class="form-group">
<label for="ssl_verify" class="col-sm-4 control-label">$T('opt-ssl_verify')</label>
<div class="col-sm-8">
<select name="ssl_verify" id="ssl_verify" class="form-control" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<select name="ssl_verify" id="ssl_verify" class="form-control">
<option value="2" <!--#if $ssl_verify == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
<option value="1" <!--#if $ssl_verify == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
<option value="0" <!--#if $ssl_verify == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>

View File

@@ -30,7 +30,8 @@
<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="2024-01-05" type="stable"/>
<release version="4.2.1" date="2024-01-05" type="stable"/>
<release version="4.2.0" date="2024-01-03" 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"/>

View File

@@ -253,8 +253,9 @@ msgstr ""
msgid "Permissions setting of %s might deny SABnzbd access to the files and folders it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -677,6 +678,10 @@ msgstr ""
msgid "Back"
msgstr ""
#: sabnzbd/misc.py
msgid "To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr ""
@@ -2411,10 +2416,6 @@ msgstr ""
msgid "Enable 7zip"
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 par2cmdline-turbo, it is available for many platforms."
msgstr ""
@@ -3063,10 +3064,6 @@ msgstr ""
msgid "Check for New Release"
msgstr ""
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr ""
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Pavel C <quoing_transifex@mess.cz>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -280,8 +280,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -728,6 +729,11 @@ msgstr "CHYBA:"
msgid "Back"
msgstr "Zpět"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2500,14 +2506,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Povolit 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3216,10 +3214,6 @@ msgstr ""
msgid "Check for New Release"
msgstr ""
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr ""
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -280,8 +280,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -736,6 +737,11 @@ msgstr "FEJL:"
msgid "Back"
msgstr "Tilbage"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2541,14 +2547,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktivere 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3290,10 +3288,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Kontroller for ny version"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Kontroller for ny version af SABnzbd hver uge."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# C E <githubce@eiselt.ch>, 2020
@@ -15,7 +15,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -300,9 +300,10 @@ msgstr ""
"Die aktuellen Zugriffseinstellungen (%s) könnte SABnzbd den Zugriff auf die "
"erstellten Dateien und Ordner von SABnzbd verweigern."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgstr "Netzwerkpfad \"%s\" ist hier nicht erlaubt"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -781,6 +782,11 @@ msgstr "FEHLER:"
msgid "Back"
msgstr "Zurück"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "t"
@@ -2621,18 +2627,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7zip aktivieren"
#: 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 ""
"Sichere (SSL) Verbindungen von SABnzbd zu Newsserver und Webseiten sind "
"verschlüsselt, aber das Validieren der Server Identität mit dessen "
"Zertifikat ist nicht möglich. Vorraussetzungen dafür sind OpenSSL 1.0.2 oder"
" höher und aktuelle lokale CA Zertifikate."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -3424,10 +3418,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Auf neue Version prüfen"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Wöchentlich überprüfen, ob eine neue SABnzbd-Version verfügbar ist."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Ester Molla Aragones <moarages@gmail.com>, 2020
@@ -8,7 +8,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -295,8 +295,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -760,6 +761,11 @@ msgstr "ERROR:"
msgid "Back"
msgstr "Atrás"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2601,20 +2607,6 @@ msgstr "Cuando tu dirección IP cambie o reinicies SABnzbd, la sesión caduca."
msgid "Enable 7zip"
msgstr "Habilitar 7zip"
#: 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 ""
"Las conexiones seguras (capa de puertos seguros, SSL) de SABnzbd a los "
"newsservers (servidores de notícias) y páginas web HTTPS estarán "
"codificadas. Sin embargo, no es posible validar la identidad de un servidor "
"utilizando sus certificados. Se necesitan certificados OpenSSL 1.0.2 o "
"versiones posteriores y certificados actualizados AC (autoridad de "
"certificación) locales."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -3376,10 +3368,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Buscar Nva Versión"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Chequear semanalmente por nuevas versiones de SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -278,8 +278,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -733,6 +734,11 @@ msgstr "VIRHE:"
msgid "Back"
msgstr "Takaisin"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "pv"
@@ -2537,14 +2543,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7zip käytössä"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3299,10 +3297,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Tarkista uusi versio"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Tarkistaa viikottain uusimman SABnzbd version."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -299,9 +299,10 @@ msgstr ""
"Le réglage des permissions de %s pourrait refuser à SABnzbd l'accès aux "
"fichiers et dossiers qu'il crée."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgstr "Le chemin réseau \"%s\" n'est pas autorisé ici"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -776,6 +777,11 @@ msgstr "ERREUR:"
msgid "Back"
msgstr "Retour"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "j"
@@ -2613,18 +2619,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Activer 7zip"
#: 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 ""
"Les connexions sécurisées (SSL) de SABnzbd aux serveurs de news et aux sites"
" web HTTPS seront cryptées, cependant, la validation de l'identité d'un des "
"serveur à l'aide de ses certificats n'est pas possible. OpenSSL 1.0.2, ou "
"supérieur, et des certificats locaux AC à jour sont requis."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -3422,10 +3416,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Vérifier les mises à jour"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Vérifier chaque semaine les mises à jour de SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: ION, 2023\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
@@ -277,9 +277,10 @@ msgid ""
msgstr ""
"הגדרת הרשאות של %s עשויה לדחות גישה מן SABnzbd אל הקבצים והתיקיות שהוא יוצר."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgstr "נתיב הרשת \"%s\" אינו מותר כאן"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -737,6 +738,11 @@ msgstr "שגיאה:"
msgid "Back"
msgstr "הקודם"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "י"
@@ -2547,17 +2553,6 @@ msgstr "כאשר כתובת ה־IP שלך משתנה או כאשר SABnzbd מו
msgid "Enable 7zip"
msgstr "אפשר חילוץ 7zip"
#: 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 ""
"חיבורים מאובטחים (SSL) מן SABnzbd אל שרתי חדשות ואל אתרי HTTPS יוצפנו, עם "
"זאת, וידוא זהות של שרת ע״י שימוש בתעודות שלו הוא בלתי אפשרי. OpenSSL 1.0.2 "
"ומעלה ותעודות CA מקומיות עדכניות דרושים."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -3306,10 +3301,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "בדוק אחר שחרור חדש"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "בדוק פעם בשבוע אחר שחרור SABnzbd חדש."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -274,8 +274,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -728,6 +729,11 @@ msgstr "FEIL:"
msgid "Back"
msgstr "Tilbake"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2531,14 +2537,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktiver 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3276,10 +3274,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Se etter ny utgave"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Se etter ny utgave av SABnzbd hver uke."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Rik Brouwer, 2022
@@ -8,7 +8,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -292,9 +292,10 @@ msgstr ""
"Ingestelde rechten van %s zouden kunnen beletten dat SABnzbd toegang heeft "
"tot de aangemaakte bestanden en mappen."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgstr "Netwerk-pad \"%s\" hier niet toegestaan."
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -773,6 +774,11 @@ msgstr "FOUT:"
msgid "Back"
msgstr "Terug"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2595,18 +2601,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7Zip toestaan"
#: 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 ""
"Beveiligde (SSL) verbindingen van SABnzbd naar nieuwsservers en HTTPS "
"websites worden versleuteld, maar het is niet mogelijk de identiteit van de "
"servers te verifiëren. Voor correcte identificatie zijn OpenSSL 1.0.2 of "
"hoger en bijgewerkte CA-certificaten benodigd."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -3389,10 +3383,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Periodieke controle voor nieuwe versies"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Controleer elke week of er een nieuwe SABnzbd versie beschikbaar is."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -270,8 +270,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -728,6 +729,11 @@ msgstr "BŁĄD:"
msgid "Back"
msgstr "Powrót"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2536,14 +2542,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Włącz 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3284,10 +3282,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Sprawdzaj aktualizacje"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Sprawdzaj co tydzień dostępność nowych wydań SABnzbd"
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Henrique Moreno, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -285,8 +285,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -743,6 +744,11 @@ msgstr "ERRO:"
msgid "Back"
msgstr "Voltar"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2550,14 +2556,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Ativar 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3299,10 +3297,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Procurar por nova versão"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Checar semanalmente por nova versão do SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Eduard Baniceru <war4peace@gmail.com>, 2021
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -285,8 +285,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -749,6 +750,11 @@ msgstr "EROARE:"
msgid "Back"
msgstr "Înapoi"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2569,14 +2575,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Activează 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3316,10 +3314,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Verifică Versiuni Noi"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Verificare săptămânală versiuni noi SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
@@ -274,8 +274,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -728,6 +729,11 @@ msgstr "ОШИБКА"
msgid "Back"
msgstr "Назад"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "д"
@@ -2533,14 +2539,6 @@ msgstr ""
msgid "Enable 7zip"
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 par2cmdline-turbo, it is available for many "
@@ -3279,10 +3277,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Проверять наличие обновлений"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Еженедельно проверять доступность новых версий SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
@@ -272,8 +272,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -725,6 +726,11 @@ msgstr "ГРЕШКА:"
msgid "Back"
msgstr "Назад"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "д"
@@ -2525,14 +2531,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Омогући 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3267,10 +3265,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Провери нове верзије"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Недељно проверавај за новије верзије програма."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
@@ -272,8 +272,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -727,6 +728,11 @@ msgstr "FEL:"
msgid "Back"
msgstr "Bakåt"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2533,14 +2539,6 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktivera 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3277,10 +3275,6 @@ msgstr ""
msgid "Check for New Release"
msgstr "Kolla efter ny utgåva"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Kolla efter ny utgåva av SABnzbd varje vecka."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Kangwei Li <lkw20010211@gmail.com>, 2023\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
@@ -271,8 +271,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" is not allowed here"
msgid "Network path \"%s\" should not be used here"
msgstr ""
#: sabnzbd/cfg.py
@@ -721,6 +722,11 @@ msgstr "错误:"
msgid "Back"
msgstr "返回"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "天"
@@ -2513,14 +2519,6 @@ msgstr "每当您的 IP 地址发生变化,或当 SABnzbd 重启,登录会
msgid "Enable 7zip"
msgstr "启用 7zip"
#: 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 par2cmdline-turbo, it is available for many "
@@ -3227,10 +3225,6 @@ msgstr "在文章发布时长尚不足该值时暂停下载文章。将任务优
msgid "Check for New Release"
msgstr "检查新版本"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "每周检查 SABnzbd 的新版本。"
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -150,7 +150,6 @@ LOG_ALL = False
WIN_SERVICE = None # Instance of our Win32 Service Class
BROWSER_URL = None
CERTIFICATE_VALIDATION = True
NO_DOWNLOADING = False # When essentials are missing (SABCTools/par2/unrar)
WEB_DIR = None

View File

@@ -69,11 +69,15 @@ from sabnzbd.misc import (
calc_age,
opts_to_pp,
format_time_left,
is_none,
history_updated,
request_repair,
change_queue_complete_action,
)
from sabnzbd.filesystem import diskspace, get_ext, clip_path, remove_all, list_scripts, purge_log_files
from sabnzbd.encoding import xml_name, utob
from sabnzbd.utils.servertests import test_nntp_server_dict
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, dnslookup, active_socks5_proxy
from sabnzbd.getipaddress import local_ipv4, public_ipv4, public_ipv6, dnslookup, active_socks5_proxy
from sabnzbd.database import HistoryDB
from sabnzbd.lang import is_rtl
from sabnzbd.nzbstuff import NzbObject
@@ -205,7 +209,7 @@ def _api_queue_rename(value, kwargs):
def _api_queue_change_complete_action(value, kwargs):
"""API: accepts value(=action)"""
sabnzbd.misc.change_queue_complete_action(value)
change_queue_complete_action(value)
return report()
@@ -394,7 +398,7 @@ def _api_change_cat(name, kwargs):
if value and value2:
nzo_id = value
cat = value2
if cat == "None":
if is_none(cat):
cat = None
result = sabnzbd.NzbQueue.change_cat(nzo_id, cat)
return report(keyword="status", data=bool(result > 0))
@@ -409,7 +413,7 @@ def _api_change_script(name, kwargs):
if value and value2:
nzo_id = value
script = value2
if script.lower() == "none":
if is_none(script):
script = None
result = sabnzbd.NzbQueue.change_script(nzo_id, script)
return report(keyword="status", data=bool(result > 0))
@@ -528,7 +532,7 @@ def _api_history(name, kwargs):
history_db.remove_failed(search)
if special in ("all", "completed"):
history_db.remove_completed(search)
sabnzbd.misc.history_updated()
history_updated()
return report()
elif value:
jobs = value.split(",")
@@ -540,7 +544,7 @@ def _api_history(name, kwargs):
if del_files:
remove_all(history_db.get_incomplete_path(job), recursive=True)
history_db.remove_history(job)
sabnzbd.misc.history_updated()
history_updated()
return report()
else:
return report(_MSG_NO_VALUE)
@@ -723,7 +727,7 @@ def _api_restart(name, kwargs):
def _api_restart_repair(name, kwargs):
logging.info("Queue repair requested by API")
sabnzbd.misc.request_repair()
request_repair()
# Do the shutdown async to still send goodbye to browser
Thread(target=sabnzbd.trigger_restart, kwargs={"timeout": 1}).start()
return report()
@@ -1303,9 +1307,9 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
# Dashboard: Connection information
if not int_conv(skip_dashboard):
info["active_socks5_proxy"] = active_socks5_proxy()
info["localipv4"] = localipv4()
info["publicipv4"] = publicipv4()
info["ipv6"] = ipv6()
info["localipv4"] = local_ipv4()
info["publicipv4"] = public_ipv4()
info["ipv6"] = public_ipv6()
info["dnslookup"] = dnslookup()
info["servers"] = []
@@ -1558,7 +1562,7 @@ def del_job_files(job_paths):
def Tspec(txt):
"""Translate special terms"""
if txt == "None":
if is_none(txt):
return T("None")
elif txt in ("Default", "*"):
return T("Default")

View File

@@ -190,7 +190,7 @@ def validate_script(value: str) -> ValidateResult:
"""Check if value is a valid script"""
if not sabnzbd.__INITIALIZED__ or (value and is_valid_script(value)):
return None, value
elif (value and value == "None") or not value:
elif sabnzbd.misc.is_none(value):
return None, "None"
return T("%s is not a valid script") % value, None
@@ -219,10 +219,10 @@ def validate_permissions(value: str) -> ValidateResult:
def validate_safedir(root: str, value: str, default: str) -> ValidateResult:
"""Allow only when queues are empty and not a network-path"""
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
# We allow it, but send a warning
if is_network_path(real_path(root, value)):
return T('Network path "%s" is not allowed here') % value, None
else:
return validate_default_if_empty(root, value, default)
sabnzbd.misc.helpful_warning(T('Network path "%s" should not be used here'), value)
return validate_default_if_empty(root, value, default)
else:
return T("Queue not empty, cannot change folder."), None

View File

@@ -80,32 +80,32 @@ class HistoryDB:
self.execute("PRAGMA user_version;")
try:
version = self.cursor.fetchone()["user_version"]
except IndexError:
except (IndexError, TypeError):
version = 0
# Add any new columns added since last DB version
# Use "and" to stop when database has been reset due to corruption
if version < 1:
_ = (
self.execute("PRAGMA user_version = 1;")
and self.execute("ALTER TABLE history ADD COLUMN series TEXT;")
and self.execute("ALTER TABLE history ADD COLUMN md5sum TEXT;")
self.execute("PRAGMA user_version = 1;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN series TEXT;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN md5sum TEXT;", save=True)
)
if version < 2:
_ = self.execute("PRAGMA user_version = 2;") and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;"
_ = self.execute("PRAGMA user_version = 2;", save=True) and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;", save=True
)
if version < 3:
# Transfer data to new column (requires WHERE-hack), original column should be removed later
_ = (
self.execute("PRAGMA user_version = 3;")
and self.execute("ALTER TABLE history ADD COLUMN duplicate_key TEXT;")
and self.execute("UPDATE history SET duplicate_key = series WHERE 1 = 1;")
self.execute("PRAGMA user_version = 3;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN duplicate_key TEXT;", save=True)
and self.execute("UPDATE history SET duplicate_key = series WHERE 1 = 1;", save=True)
)
def execute(self, command: str, args: Sequence = (), save: bool = False) -> bool:
"""Wrapper for executing SQL commands"""
for tries in range(5, 0, -1):
for tries in (4, 3, 2, 1, 0):
try:
self.cursor.execute(command, args)
if save:
@@ -113,7 +113,7 @@ class HistoryDB:
return True
except:
error = str(sys.exc_info()[1])
if tries >= 0 and "is locked" in error:
if tries > 0 and "is locked" in error:
logging.debug("Database locked, wait and retry")
time.sleep(0.5)
continue
@@ -178,9 +178,10 @@ class HistoryDB:
"password" TEXT,
"duplicate_key" TEXT
)
"""
""",
save=True,
)
self.execute("PRAGMA user_version = 3;")
self.execute("PRAGMA user_version = 3;", save=True)
def close(self):
"""Close database connection"""

View File

@@ -223,7 +223,13 @@ class Server:
def request_addrinfo_blocking(self):
"""Blocking attempt to run getaddrinfo() and Happy Eyeballs for specified server"""
logging.debug("Retrieving server address information for %s", self.host)
self.addrinfo = happyeyeballs(self.host, self.port, self.timeout)
# Disable IPV6 if desired
family = socket.AF_UNSPEC
if not cfg.ipv6_servers():
family = socket.AF_INET
self.addrinfo = happyeyeballs(self.host, self.port, self.timeout, family)
if not self.addrinfo:
self.bad_cons += self.threads
# Notify next call to maybe_block_server
@@ -525,10 +531,6 @@ class Downloader(Thread):
sabnzbd.decoder.decode(article, data_view)
def run(self):
# Verify SSL certificate checking
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.misc.test_cert_checking()
logging.debug("SSL verification test: %s", sabnzbd.CERTIFICATE_VALIDATION)
# Warn if there are servers defined, but none are valid
if config.get_servers() and not self.servers:
logging.warning(T("There are no active servers!"))

View File

@@ -1199,7 +1199,7 @@ def load_admin(data_id: str, remove=False, silent=False) -> Any:
def wait_for_download_folder():
"""Wait for download folder to become available"""
while not sabnzbd.cfg.download_dir.test_path():
logging.debug("Waiting for incomplete folder")
logging.info("Waiting for incomplete folder")
time.sleep(2.0)

View File

@@ -19,18 +19,20 @@
sabnzbd.getipaddress
"""
import socket
import functools
import urllib.request
import urllib.error
import socks
import logging
import socket
import time
import urllib.error
import urllib.request
from typing import Callable
import socks
import sabnzbd
import sabnzbd.cfg
from sabnzbd.encoding import ubtou
from sabnzbd.happyeyeballs import happyeyeballs, family_type
def timeout(max_timeout: float):
@@ -88,7 +90,7 @@ def dnslookup():
return result
def localipv4():
def local_ipv4():
try:
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s_ipv4:
# Option: use 100.64.1.1 (IANA-Reserved IPv4 Prefix for Shared Address Space)
@@ -101,59 +103,56 @@ def localipv4():
return ipv4
def publicipv4():
"""Because of dual IPv4/IPv6 clients, finding the
public ipv4 needs special attention, meaning forcing
IPv4 connections, and not allowing IPv6 connections
Function uses sabnzbd.cfg.selftest_host(), which must report our public IPv4 address over which we access it
def public_ip(family=socket.AF_UNSPEC):
"""
Reports the client's public IP address (IPv4 or IPv6, if specified by family), as reported by selftest host
"""
start = time.time()
if resolvehostaddress := happyeyeballs(sabnzbd.cfg.selftest_host(), port=443, family=family):
resolvehostip = resolvehostaddress.ipaddress
else:
logging.debug("Error resolving my IP address: resolvehost not found")
return None
if sabnzbd.misc.is_ipv4_addr(resolvehostip):
resolveurl = f"http://{resolvehostip}/?ipv4test"
elif sabnzbd.misc.is_ipv6_addr(resolvehostip):
resolveurl = f"http://[{resolvehostip}]/?ipv6test" # including square brackets
else:
logging.debug("Error resolving public IP address: no valid IPv4 or IPv6 address found")
return None
try:
# look up IPv4 addresses of selftest_host
lookup_result_iv4 = addresslookup4(sabnzbd.cfg.selftest_host())
req = urllib.request.Request(resolveurl)
req.add_header("Host", sabnzbd.cfg.selftest_host())
req.add_header("User-Agent", "SABnzbd/%s" % sabnzbd.__version__)
with urllib.request.urlopen(req, timeout=2) as open_req:
client_ip = ubtou(open_req.read().strip())
# Make sure there is a result, abort otherwise
if not lookup_result_iv4:
raise Exception
except Exception:
# something very bad: no name resolving of selftest_host
logging.debug("Failed to detect public IPv4 address: looking up %s failed", sabnzbd.cfg.selftest_host())
# Make sure it's a valid IPv4 or IPv6 address
if not sabnzbd.misc.is_ipv4_addr(client_ip) and not sabnzbd.misc.is_ipv6_addr(client_ip):
raise ValueError
except urllib.error.URLError:
logging.debug(
"Failed to get public address from %s (%s)",
sabnzbd.cfg.selftest_host(),
family_type(family),
exc_info=True,
)
return None
public_ipv4 = None
# we got one or more IPv4 address(es) for selftest_host, so let's connect and ask for our own public IPv4
for item in lookup_result_iv4:
# get next IPv4 address of sabnzbd.cfg.selftest_host()
selftest_ipv4 = item[4][0]
try:
# put the selftest_host's IPv4 address into the URL
req = urllib.request.Request("http://" + selftest_ipv4 + "/")
# specify the User-Agent, because certain sites refuse connections with "python urllib2" as User-Agent:
req.add_header("User-Agent", "SABnzbd/%s" % sabnzbd.__version__)
# specify the Host, because we only provide the IPv4 address in the URL:
req.add_header("Host", sabnzbd.cfg.selftest_host())
# get the response, timeout 2 seconds, in case the website is not accessible
public_ipv4 = ubtou(urllib.request.urlopen(req, timeout=2).read())
# ... check the response is indeed an IPv4 address:
# if we got anything else than a plain IPv4 address, this will raise an exception
socket.inet_aton(public_ipv4)
# if we get here without exception, we found our public IPv4, and we're done:
break
except (socket.error, urllib.error.URLError):
# the connect OR the inet_aton raised an exception, so:
public_ipv4 = None # reset
# continue the for loop to try next server IPv4 address
pass
if not public_ipv4:
logging.debug("Failed to get public IPv4 address from %s", sabnzbd.cfg.selftest_host())
return None
logging.debug("Public IPv4 address = %s (in %.2f seconds)", public_ipv4, time.time() - start)
return public_ipv4
logging.debug("Public address %s = %s (in %.2f seconds)", family_type(family), client_ip, time.time() - start)
return client_ip
def ipv6():
def public_ipv4():
return public_ip(family=socket.AF_INET)
def local_ipv6():
"""
return IPv6 address on local LAN interface. So a first check if there is IPv6 connectivity
"""
try:
with socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) as s_ipv6:
# IPv6 prefix for documentation purpose
@@ -164,3 +163,8 @@ def ipv6():
logging.debug("IPv6 address = %s", ipv6_address)
return ipv6_address
def public_ipv6():
if local_ipv6():
return public_ip(family=socket.AF_INET6)

View File

@@ -33,7 +33,6 @@ from dataclasses import dataclass
from typing import Tuple, Union, Optional
from more_itertools import roundrobin
from sabnzbd import cfg as cfg
from sabnzbd.constants import DEF_TIMEOUT
from sabnzbd.decorators import cache_maintainer
@@ -58,6 +57,17 @@ class AddrInfo:
self.ipaddress = self.sockaddr[0]
def family_type(family) -> str:
"""Human-readable socket type"""
if family not in (socket.AF_INET, socket.AF_INET6, socket.AF_UNSPEC):
raise ValueError("Invalid family")
if family == socket.AF_INET:
return "IPv4-only"
elif family == socket.AF_INET6:
return "IPv6-only"
return "IPv4 and IPv6"
# Called by each thread
def do_socket_connect(result_queue: queue.Queue, addrinfo: AddrInfo, timeout: int):
"""Connect to the ip, and put the result into the queue"""
@@ -89,16 +99,12 @@ def do_socket_connect(result_queue: queue.Queue, addrinfo: AddrInfo, timeout: in
@cache_maintainer(clear_time=10)
@functools.lru_cache(maxsize=None)
def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT) -> Optional[AddrInfo]:
def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT, family=socket.AF_UNSPEC) -> Optional[AddrInfo]:
"""Return the fastest result of getaddrinfo() based on RFC 6555/8305 (Happy Eyeballs),
including IPv6 addresses if desired. Returns None in case no addresses were returned
by getaddrinfo or if no connection could be made to any of the addresses"""
by getaddrinfo or if no connection could be made to any of the addresses.
If family is specified, only that family is tried"""
try:
# Get address information, by default both IPV4 and IPV6
family = socket.AF_UNSPEC
if not cfg.ipv6_servers():
family = socket.AF_INET
ipv4_addrinfo = []
ipv6_addrinfo = []
last_canonname = ""
@@ -128,9 +134,10 @@ def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT) -> Optional[
raise
logging.debug(
"Available addresses for %s (port=%d): %d IPv4 and %d IPv6",
"Available addresses for %s (port=%d, %s): %d IPv4 and %d IPv6",
host,
port,
family_type(family),
len(ipv4_addrinfo),
len(ipv6_addrinfo),
)
@@ -159,7 +166,14 @@ def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT) -> Optional[
except queue.Empty:
raise ConnectionError("No addresses could be resolved")
logging.info("Quickest IP address for %s (port=%d): %s (%s)", host, port, result.ipaddress, result.canonname)
logging.info(
"Quickest IP address for %s (port=%d, %s): %s (%s)",
host,
port,
family_type(family),
result.ipaddress,
result.canonname,
)
return result
except Exception as e:
logging.debug("Failed Happy Eyeballs lookup: %s", e)

View File

@@ -52,6 +52,7 @@ from sabnzbd.misc import (
is_loopback_addr,
helpful_warning,
recursive_html_escape,
is_none,
)
from sabnzbd.happyeyeballs import happyeyeballs
from sabnzbd.filesystem import (
@@ -517,7 +518,6 @@ class Wizard:
cfg.language.set(kwargs.get("lang"))
info = build_header(sabnzbd.WIZARD_DIR)
info["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
# Just in case, add server
servers = config.get_servers()
@@ -682,11 +682,8 @@ class ConfigPage:
conf["configfn"] = clip_path(config.get_filename())
conf["cmdline"] = sabnzbd.CMDLINE
conf["build"] = sabnzbd.__baseline__[:7]
conf["have_7zip"] = bool(sabnzbd.newsunpack.SEVENZIP_COMMAND)
conf["have_par2_turbo"] = sabnzbd.newsunpack.PAR2_TURBO
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
conf["ssl_version"] = ssl.OPENSSL_VERSION
return template_filtered_response(
@@ -800,8 +797,6 @@ class ConfigSwitches:
@secured_expose(check_configlock=True)
def index(self, **kwargs):
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
conf["have_nice"] = bool(sabnzbd.newsunpack.NICE_COMMAND)
conf["have_ionice"] = bool(sabnzbd.newsunpack.IONICE_COMMAND)
@@ -957,8 +952,6 @@ class ConfigGeneral:
def index(self, **kwargs):
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
web_list = []
for interface_dir in globber_full(sabnzbd.DIR_INTERFACES):
# Ignore the config
@@ -1072,7 +1065,6 @@ class ConfigServer:
conf["servers"] = new
conf["cats"] = list_cats(default=True)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
return template_filtered_response(
file=os.path.join(sabnzbd.WEB_DIR_CONFIG, "config_server.tmpl"),
@@ -1386,7 +1378,7 @@ class ConfigRss:
raise rssRaiser(self.__root, kwargs)
pp = kwargs.get("pp", "")
if pp.lower() == "none":
if is_none(pp):
pp = ""
script = ConvertSpecials(kwargs.get("script"))
cat = ConvertSpecials(kwargs.get("cat"))

View File

@@ -83,11 +83,12 @@ RE_IP6 = re.compile(r"inet6\s+(addr:\s*)?([0-9a-f:]+)", re.I)
HAVE_AMPM = bool(time.strftime("%p"))
def helpful_warning(*args, **kwargs):
def helpful_warning(msg, *args, **kwargs):
"""Wrapper to ignore helpful warnings if desired"""
if cfg.helpful_warnings():
return logging.warning(*args, **kwargs)
return logging.info(*args, **kwargs)
msg = "%s\n%s" % (msg, T("To prevent all helpful warnings, disable Special setting 'helpful_warnings'."))
return logging.warning(msg, *args, **kwargs)
return logging.info(msg, *args, **kwargs)
def duplicate_warning(*args, **kwargs):
@@ -167,6 +168,11 @@ def safe_lower(txt: Any) -> str:
return ""
def is_none(inp: Any) -> bool:
"""Check for 'not X' but also if it's maybe the string 'None'"""
return not inp or (isinstance(inp, str) and inp.lower() == "none")
def cmp(x, y):
"""
Replacement for built-in function cmp that was removed in Python 3
@@ -335,7 +341,7 @@ def cat_convert(cat):
If no match found, but the indexer-cat starts with the user-cat, return user-cat
If no match found, return None
"""
if cat and cat.lower() != "none":
if not is_none(cat):
cats = config.get_ordered_categories()
raw_cats = config.get_categories()
for ucat in cats:
@@ -1226,33 +1232,6 @@ def set_https_verification(value):
return prev
def test_cert_checking():
"""Test quality of certificate validation"""
# User disabled the test, assume proper SSL certificates
if not cfg.selftest_host():
return True
# Try a connection to our test-host
try:
ctx = ssl.create_default_context()
base_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ctx.wrap_socket(base_sock, server_hostname=cfg.selftest_host())
ssl_sock.settimeout(2.0)
ssl_sock.connect((cfg.selftest_host(), 443))
ssl_sock.close()
return True
except (socket.gaierror, socket.timeout):
# Non-SSL related error.
# We now assume that certificates work instead of forcing
# lower quality just because some (temporary) internet problem
logging.info("Could not determine system certificate validation quality due to connection problems")
return True
except:
# Seems something is still wrong
set_https_verification(False)
return False
def request_repair():
"""Request a full repair on next restart"""
path = os.path.join(cfg.admin_dir.get_path(), REPAIR_REQUEST)

View File

@@ -43,6 +43,7 @@ from sabnzbd.misc import (
run_command,
build_and_run_command,
format_time_left,
is_none,
)
from sabnzbd.filesystem import (
make_script_path,
@@ -2143,7 +2144,7 @@ def pre_queue(nzo: NzbObject, pp, cat):
def fix(p):
# If added via API, some items can still be "None" (as a string)
if not p or str(p).lower() == "none":
if is_none(p):
return ""
return str(p)

View File

@@ -308,11 +308,6 @@ class NNTP:
# We want a modern TLS (1.2 or higher), so we disallow older protocol versions (<= TLS 1.1)
self.nw.server.ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
# Disable any verification if the setup is bad
if not sabnzbd.CERTIFICATE_VALIDATION:
self.nw.server.ssl_context.check_hostname = False
self.nw.server.ssl_context.verify_mode = ssl.CERT_NONE
# Create socket and store fileno of the socket
self.sock: Union[socket.socket, ssl.SSLSocket] = socket.socket(self.addrinfo.family, self.addrinfo.type)
self.fileno: int = self.sock.fileno()

View File

@@ -46,6 +46,7 @@ from sabnzbd.misc import (
history_updated,
change_queue_complete_action,
run_script,
is_none,
)
from sabnzbd.filesystem import (
real_path,
@@ -1098,7 +1099,7 @@ def handle_empty_queue():
)
# Perform end-of-queue script
if cfg.end_queue_script():
if not is_none(cfg.end_queue_script()):
logging.info("Queue has finished, launching script: %s ", cfg.end_queue_script())
run_script(cfg.end_queue_script())

View File

@@ -252,9 +252,6 @@ SKIN_TEXT = {
"confirmWithoutSavingPrompt": TT("Changes have not been saved, and will be lost."),
"explain-sessionExpire": TT("When your IP address changes or SABnzbd is restarted the session will expire."),
"opt-enable_7zip": TT("Enable 7zip"),
"explain-nosslcontext": TT(
"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."
),
"explain-getpar2turbo": TT("Speed up repairs by installing par2cmdline-turbo, it is available for many platforms."),
"version": TT("Version"),
"uptime": TT("Uptime"),
@@ -473,7 +470,6 @@ SKIN_TEXT = {
"Posts will be paused untill they are at least this age. Setting job priority to Force will skip the delay."
),
"opt-check_new_rel": TT("Check for New Release"),
"explain-check_new_rel": TT("Weekly check for new SABnzbd release."),
"also-test": TT("Also test releases"), #: Pick list for weekly test for new releases
"opt-replace_spaces": TT("Replace Spaces in Foldername"),
"explain-replace_spaces": TT("Replace spaces with underscores in folder names."),

View File

@@ -13,7 +13,7 @@ from cryptography.x509.oid import NameOID
import datetime
import socket
from sabnzbd.getipaddress import localipv4
from sabnzbd.getipaddress import local_ipv4
def generate_key(key_size=2048, output_file="key.pem"):
@@ -64,7 +64,7 @@ def generate_local_cert(private_key, days_valid=3560, output_file="cert.cert", L
san_list.append(x509.IPAddress(ipaddress.IPv6Address("::1")))
# append local v4 ip
mylocalipv4 = localipv4()
mylocalipv4 = local_ipv4()
if mylocalipv4:
san_list.append(x509.IPAddress(ipaddress.IPv4Address(str(mylocalipv4))))
except:

View File

@@ -6,5 +6,5 @@
# You MUST use double quotes (so " and not ')
# Do not forget to update the appdata file for every major release!
__version__ = "4.2.0"
__baseline__ = "5c4dfa4cc65084a5052efe52d98bda7b698439be"
__version__ = "4.2.1"
__baseline__ = "045140cfbc0ad66b1d540587b9834e1181213cc5"

View File

@@ -111,10 +111,6 @@ class TestValidators:
assert cfg.validate_safedir("", "", "def") == (None, "def")
assert cfg.validate_safedir("", "C:\\", "") == (None, "C:\\")
@pytest.mark.skipif(not sys.platform.startswith("win"), reason="Windows tests")
def test_validate_safedir_win(self):
assert "Network path" in cfg.validate_safedir("", "\\\\NAS\\foo", "")[0]
def test_validate_host(self):
# valid input
assert cfg.validate_host("127.0.0.1") == (None, "127.0.0.1")

View File

@@ -31,16 +31,16 @@ class TestGetIpAddress:
for item in address:
assert isinstance(item[0], type(socket.AF_INET))
def test_publicipv4(self):
public_ipv4 = publicipv4()
assert is_ipv4_addr(public_ipv4)
def test_public_ipv4(self):
publicipv4 = public_ipv4()
assert is_ipv4_addr(publicipv4)
def test_localipv4(self):
local_ipv4 = localipv4()
assert is_ipv4_addr(local_ipv4)
def test_local_ipv4(self):
localipv4 = local_ipv4()
assert is_ipv4_addr(localipv4)
def test_ipv6(self):
test_ipv6 = ipv6()
def test_public_ipv6(self):
test_ipv6 = public_ipv6()
# Not all systems have IPv6
if test_ipv6:
assert is_ipv6_addr(test_ipv6)

View File

@@ -45,11 +45,23 @@ class TestHappyEyeballs:
assert "." in addrinfo.ipaddress or ":" in addrinfo.ipaddress
assert "google" in addrinfo.canonname
def test_google_http_want_ipv4(self):
addrinfo = happyeyeballs("www.google.com", port=80, family=socket.AF_INET)
assert "." in addrinfo.ipaddress and not ":" in addrinfo.ipaddress
assert "google" in addrinfo.canonname
def test_google_http_want_ipv6(self):
# TODO: timeout needed for IPv4-only CI environment?
addrinfo = happyeyeballs("www.google.com", port=80, timeout=2, family=socket.AF_INET6)
if addrinfo:
assert not "." in addrinfo.ipaddress and ":" in addrinfo.ipaddress
assert "google" in addrinfo.canonname
def test_not_resolvable(self):
assert happyeyeballs("not.resolvable.invalid", port=80) is None
def test_ipv6_only(self):
if addrinfo := happyeyeballs("ipv6.google.com", port=443):
if addrinfo := happyeyeballs("ipv6.google.com", port=443, timeout=2):
assert ":" in addrinfo.ipaddress
assert "google" in addrinfo.canonname

View File

@@ -62,6 +62,18 @@ class TestMisc:
assert "all caps" == misc.safe_lower("ALL CAPS")
assert "" == misc.safe_lower(None)
def test_is_none(self):
assert misc.is_none(None) is True
assert misc.is_none(0) is True
assert misc.is_none(False) is True
assert misc.is_none("None") is True
assert misc.is_none("nOne") is True
assert misc.is_none(True) is False
assert misc.is_none(1) is False
assert misc.is_none(True) is False
assert misc.is_none("Not None") is False
def test_cmp(self):
assert misc.cmp(1, 2) < 0
assert misc.cmp(2, 1) > 0