mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-05 14:09:22 -05:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18f4cc25f3 | ||
|
|
b755192600 | ||
|
|
045140cfbc | ||
|
|
ff2b9243e9 | ||
|
|
471fb7a83c | ||
|
|
0db5ae8390 | ||
|
|
e36f60085f | ||
|
|
3718fc36f0 | ||
|
|
71a41f6369 | ||
|
|
47a2f9a4a7 | ||
|
|
a6f0bc0490 | ||
|
|
cb7c37a836 | ||
|
|
e89eba08c4 | ||
|
|
d5d857983d |
13
README.mkd
13
README.mkd
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"""
|
||||
|
||||
@@ -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!"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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())
|
||||
|
||||
|
||||
@@ -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."),
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user