Compare commits

...

64 Commits

Author SHA1 Message Date
Safihre
dbff203c62 Update text files for 4.2.3RC2 2024-02-26 22:30:38 +01:00
Safihre
f45eb891cd Correct translatable texts about connection threads 2024-02-26 22:23:51 +01:00
Safihre
77b58240cf Reduce Server test timeout to 10s
Unless otherwise specified
Related to #2802
2024-02-26 22:23:51 +01:00
Safihre
97ae1ff10e Refactor part of database.py
Use autocommit and skip unnecessary checks on every connect
2024-02-26 22:23:51 +01:00
Safihre
8734a4f24b Update text files for 4.2.3RC1 2024-02-19 22:19:43 +01:00
Shane Mc Cormack
480fce55a8 Handle NNTP error code 451 (#2808)
* Handle error code 451.

This is used by some servers to show that an article was intentionally removed.
Fix #2807

* Add a warning when an unknown status code is given for an article.

* Make warning message translatable.
2024-02-19 22:06:29 +01:00
thezoggy
d4136fadd2 Add missing tooltips (#2800)
Co-authored-by: Safihre <safihre@sabnzbd.org>
2024-02-18 13:42:48 +01:00
Safihre
308bc375bd Update log message about version check 2024-02-18 13:42:31 +01:00
Safihre
3bbcf6a41e Update standby command on macOS 2024-02-18 13:41:33 +01:00
Safihre
3d5d10a4c1 Remove parsing of Group command code
Since we never request it.
2024-02-18 13:41:05 +01:00
Safihre
0e979c14f0 Remove Send Group option
Closes #2715
2024-02-18 13:38:31 +01:00
Safihre
70f49114ac Wrong archive password is used for Retry
Closes #2790
2024-02-18 13:38:13 +01:00
Safihre
699d75bb9f Update text files for 4.2.2 2024-01-30 21:46:56 +01:00
Safihre
95822704c8 Update black formatting 2024-01-30 21:36:34 +01:00
Safihre
76e5f69e67 Only attempt Windows Toasts on Windows 10 and above 2024-01-29 16:34:03 +01:00
Safihre
abd31d0249 Update text files for 4.2.2RC2 2024-01-24 13:28:19 +01:00
Safihre
9ae7ee6e2d Add logging which notification will be sent 2024-01-22 15:15:44 +01:00
renovate[bot]
bf52430da8 Update all dependencies 2024-01-22 01:31:55 +00:00
Safihre
7005b3ee86 Do not trigger Duplicate Check twice on URL's 2024-01-21 22:00:12 +01:00
Safihre
8f2ea239c5 Do not send Windows notifications if ran as Service 2024-01-21 20:35:27 +01:00
Safihre
9ee2a8a98c Add hover to Night style buttons 2024-01-19 13:56:43 +01:00
jcfp
6f0daf9d1b Use local ipv6 if public fails and is rout able (#2783)
* use local ipv6 if routable

* always try a remote lookup anyway, for statistics purposes
2024-01-19 13:01:18 +01:00
Safihre
28ed424fa8 Cache CPU name for 1 hour 2024-01-18 21:40:08 +01:00
SABnzbd Automation
fe3e20b108 Update translatable texts
[skip ci]
2024-01-17 15:11:46 +00:00
Safihre
23f3b901e3 Update text files for 4.2.2RC1 2024-01-17 16:11:00 +01:00
Safihre
567608b3c4 Using password=PW resulted in PW.nzb as password
Closes #2779
2024-01-17 14:51:35 +01:00
Safihre
4ff0f94d41 Add IRC and Discord label 2024-01-17 11:59:57 +01:00
Safihre
a56290489c Only request addrinfo once per internetspeed 2024-01-17 11:53:56 +01:00
Safihre
aac4392f69 Handle brackets in potentical filenames in subjects
Closes #2772
2024-01-15 09:55:22 +01:00
SABnzbd Automation
c130feefc5 Update translatable texts
[skip ci]
2024-01-15 02:00:46 +00:00
renovate[bot]
474bcf5f05 Update dependency more-itertools to v10.2.0 2024-01-15 02:00:04 +00:00
Safihre
cf24ada3f1 Move helpful_warnings declaration so it's read as the very first 2024-01-10 16:23:07 +01:00
Safihre
7b26bb7171 Add 4.2.2 already to appdata 2024-01-10 13:32:35 +01:00
SABnzbd Automation
83d89ff05c Update translatable texts
[skip ci]
2024-01-10 09:53:14 +00:00
Safihre
7034bdcbf6 Update text files for 4.2.2 Beta 1
Closes #2776
2024-01-10 10:52:24 +01:00
Safihre
4c12da5418 Update log anonymization for new IPv4/6 logging
Closes #2775
2024-01-10 09:07:23 +01:00
SABnzbd Automation
8bf1d2bc1f Update translatable texts
[skip ci]
2024-01-10 05:54:35 +00:00
Steve Albrecht
900a99653f Move UI theme selection out of advanced settings (#2774)
* Make UI theme selection a non-advanced setting

* Call stylesheet a "theme" instead of a "skin"

---------

Co-authored-by: sbalbrecht <stpehen.b.albrecht@gmail.com>
2024-01-10 06:53:54 +01:00
Safihre
f33fcfa7b1 Require only 5 characters to define a filename 2024-01-09 16:22:15 +01:00
SABnzbd Automation
130148d475 Update translatable texts
[skip ci]
2024-01-09 09:34:35 +00:00
Safihre
021f87eef3 Correct focus style of Config Night navbar 2024-01-09 10:33:45 +01:00
Safihre
8ef8788152 Correct logic error in guess_what
@jcfp This check seems very specific, are these conditions ever all True at the same time?
2024-01-08 15:34:31 +01:00
renovate[bot]
041756829a Update dependency pyinstaller-hooks-contrib to v2023.12 2024-01-08 00:42:10 +00:00
Safihre
89c7f52d84 Do not ask for feedback about categories based on Groups anymore
It's staying.
2024-01-07 21:18:00 +01:00
SABnzbd Automation
c40b560d15 Update translatable texts
[skip ci]
2024-01-07 19:58:50 +00:00
Safihre
74f9391076 Explain that Retry disabled aborting due to missing articles
Closes #2765
2024-01-07 20:58:12 +01:00
SABnzbd Automation
76dab68759 Update translatable texts
[skip ci]
2024-01-07 19:48:48 +00:00
Safihre
d405548825 Shutdown SABnzbd automatically during update on Windows
Closes #2766
2024-01-07 20:48:05 +01:00
Safihre
b4c76f034f If duplicate is discarded during URL-fetches, no nzo_id is known yet
Closes #2771
2024-01-06 22:53:17 +01:00
Safihre
cda2402d01 Fix typo in asset name of Windows release 2024-01-06 11:37:33 +01:00
Safihre
2cf9ab2620 Build using old PyInstaller so virusscanners don't get upset 2024-01-06 09:26:02 +01:00
Safihre
465f182493 Add 4.2.1 to appdata 2024-01-05 10:11:37 +01:00
SABnzbd Automation
23321a1075 Update translatable texts
[skip ci]
2024-01-05 08:54:08 +00: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
108 changed files with 5923 additions and 949 deletions

View File

@@ -22,7 +22,8 @@
"ignoreDeps": [
"jaraco.text",
"sabctools",
"werkzeug"
"werkzeug",
"pyinstaller"
],
"packageRules": [
{

View File

@@ -39,7 +39,7 @@ jobs:
uses: actions/upload-artifact@v3
with:
path: "*-win64-bin.zip"
name: Windows Windows standalone binary (64bit)
name: Windows standalone binary (64bit)
- name: Upload Windows installer (64bit)
uses: actions/upload-artifact@v3
with:
@@ -71,7 +71,7 @@ jobs:
uses: actions/upload-artifact@v3
with:
path: "*-win32-bin.zip"
name: Windows Windows standalone binary (32bit and legacy)
name: Windows standalone binary (32bit and legacy)
build_macos:
name: Build macOS binary
@@ -81,7 +81,7 @@ jobs:
# We need the official Python, because the GA ones only support newer macOS versions
# The deployment target is picked up by the Python build tools automatically
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
PYTHON_VERSION: "3.12.1"
PYTHON_VERSION: "3.12.2"
MACOSX_DEPLOYMENT_TARGET: "10.9"
# We need to force compile for universal2 support
CFLAGS: -arch x86_64 -arch arm64

View File

@@ -1,7 +1,40 @@
Release Notes - SABnzbd 4.2.0
Release Notes - SABnzbd 4.2.3 Release Candidate 2
=========================================================
This is the latest stable SABnzbd release, version 4.2.0, which includes several new features and bug fixes.
This is the third bug-fix release of SABnzbd 4.2.0.
## Bug-fixes and changes since 4.2.2:
* **Bug-fixes:**
* Handle new status code for missing articles, which could result in timeouts.
* Retry of failed job would not use the password provided.
* Optimize database handling in order to prevent locking errors.
* macOS: System standby after finishing the queue would not always work.
* **Changes:**
* Remove `Send Group` option for Servers.
## Bug-fixes and changes since 4.2.1:
* **Bug-fixes:**
* RSS readout could result in a crash if Duplicate Detection was enabled.
* Passwords were not always correctly parsed.
* Warnings could show even if `helpful_warnings` was disabled.
* Duplicate Detection would trigger again on URLs if they were resumed.
* Windows: Fatal crash could occur if ran as Service or on older Windows versions.
* **Changes:**
* Parsing of filenames from the NZB was extended to allow more exotic formatting.
* Windows: Installer will automatically shutdown SABnzbd if it is running.
## 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

@@ -1,8 +1,8 @@
# Basic build requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
pyinstaller==6.3.0
pyinstaller==5.13.2
packaging==23.2
pyinstaller-hooks-contrib==2023.11
pyinstaller-hooks-contrib==2024.0
altgraph==0.17.4
wrapt==1.16.0
setuptools==69.0.3
@@ -14,7 +14,7 @@ importlib_resources==6.1.1; python_version < '3.10'
zipp==3.17.0; python_version < '3.10'
# orjson does not support 32bit Windows, also exclude based on Python-version
orjson==3.9.10; python_version > '3.8'
orjson==3.9.12; python_version > '3.8'
# For the Windows build
pefile==2023.2.7; sys_platform == 'win32'

View File

@@ -170,6 +170,24 @@ Section "SABnzbd" SecDummy
SetOutPath "$INSTDIR"
SetShellVarContext all
DetailPrint $(MsgShutting)
;------------------------------------------------------------------
; Shutdown any running service
!insertmacro SERVICE "stop" "SABnzbd" ""
;------------------------------------------------------------------
; Terminate SABnzbd.exe
loop:
${nsProcess::FindProcess} "SABnzbd.exe" $R0
StrCmp $R0 0 0 endcheck
${nsProcess::CloseProcess} "SABnzbd.exe" $R0
Sleep 500
Goto loop
endcheck:
${nsProcess::Unload}
;------------------------------------------------------------------
; Make sure old versions are gone (reg-key already read in onInt)
StrCmp $PREV_INST_DIR "" noPrevInstallRemove
@@ -291,31 +309,6 @@ Function .onInit
; Display language chooser
!insertmacro MUI_LANGDLL_DISPLAY
;------------------------------------------------------------------
; make sure user terminates sabnzbd.exe or else abort
;
loop:
${nsProcess::FindProcess} "SABnzbd.exe" $R0
StrCmp $R0 0 0 endcheck
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall
exitinstall:
${nsProcess::Unload}
Abort
endcheck:
;------------------------------------------------------------------
; make sure both services aren't running
;
!insertmacro SERVICE "running" "SABnzbd" ""
Pop $0 ;response
!insertmacro SERVICE "running" "SABHelper" ""
Pop $1
${If} $0 == true
${OrIf} $1 == true
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall
; exitinstall already defined above
${EndIf}
;------------------------------------------------------------------
; Tell users about the service change
;
@@ -323,7 +316,8 @@ Function .onInit
Pop $0 ;response
${If} $0 == true
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgServChange) IDOK removeservices IDCANCEL exitinstall
; exitinstall already defined above
exitinstall:
Abort
removeservices:
!insertmacro SERVICE "delete" "SABHelper" ""
!insertmacro SERVICE "delete" "SABnzbd" ""
@@ -345,9 +339,9 @@ UninstallText $(MsgUninstall)
Section "un.$(MsgDelProgram)" Uninstall
;make sure sabnzbd.exe isn't running..if so shut it down
DetailPrint $(MsgShutting)
${nsProcess::KillProcess} "SABnzbd.exe" $R0
${nsProcess::Unload}
DetailPrint "Process Killed"
; add delete commands to delete whatever files/registry keys/etc you installed here.
Delete "$INSTDIR\uninstall.exe"
@@ -409,14 +403,14 @@ SectionEnd
LangString MsgSupportUs ${LANG_ENGLISH} "Support the project, Donate!"
LangString MsgCloseSab ${LANG_ENGLISH} "Please close $\"SABnzbd.exe$\" first"
LangString MsgServChange ${LANG_ENGLISH} "The SABnzbd Windows Service changed in SABnzbd 3.0.0. $\nYou will need to reinstall the SABnzbd service. $\n$\nClick `OK` to remove the existing services or `Cancel` to cancel this upgrade."
LangString MsgOnly64bit ${LANG_ENGLISH} "The installer only supports 64-bit Windows, use the standalone version to run on 32-bit Windows."
LangString MsgNoWin7 ${LANG_ENGLISH} "The installer only supports Windows 8.1 and above, use the standalone legacy version to run on older Windows version."
LangString MsgShutting ${LANG_ENGLISH} "Shutting down SABnzbd"
LangString MsgUninstall ${LANG_ENGLISH} "This will uninstall SABnzbd from your system"
LangString MsgRunAtStart ${LANG_ENGLISH} "Run at startup"

View File

@@ -29,18 +29,8 @@
</tr>
<tr>
<th scope="row">OpenSSL:</th>
<td>
$ssl_version
</td>
<td>$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>
@@ -89,7 +79,7 @@
</tr>
<tr>
<th scope="row">$T('menu-live-chat') </th>
<td><a href="https://sabnzbd.org/live-chat/" target="_blank">https://sabnzbd.org/live-chat/</a></td>
<td><a href="https://sabnzbd.org/live-chat/" target="_blank">https://sabnzbd.org/live-chat/</a> (IRC &amp; Discord)</td>
</tr>
<tr>
<th scope="row">$T('menu-issues') </th>

View File

@@ -35,7 +35,7 @@
<span class="desc">$T('explain-enable_https')</span>
<span class="desc"><span class="label label-warning">$T('warning').upper()</span> $T('explain-enable_https_warning')</span>
</div>
<div class="field-pair advanced-settings">
<div class="field-pair">
<label class="config" for="web_dir">$T('opt-web_dir')</label>
<select name="web_dir" id="web_dir">
<!--#for $webline in $web_list#-->
@@ -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>
@@ -106,11 +106,6 @@
<span class="desc">$T('explain-ssl_ciphers') <br>$T('readwiki')
<a href="https://sabnzbd.org/wiki/advanced/ssl-ciphers" target="_blank">https://sabnzbd.org/wiki/advanced/ssl-ciphers</a></span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="send_group">$T('srv-send_group')</label>
<input type="checkbox" name="send_group" id="send_group" value="1" />
<span class="desc">$T('srv-explain-send_group')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="required">$T('srv-required')</label>
<input type="checkbox" name="required" id="required" value="1" />
@@ -223,9 +218,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>
@@ -248,11 +243,6 @@
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('explain-optional')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="send_group$cur">$T('srv-send_group')</label>
<input type="checkbox" name="send_group" id="send_group$cur" value="1" <!--#if int($server['send_group']) != 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('srv-explain-send_group')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="expire_date$cur">$T('srv-expire_date')</label>
<input type="date" name="expire_date" id="expire_date$cur" value="$server['expire_date']" />

View File

@@ -47,6 +47,7 @@ textarea,
.navbar-default .navbar-nav>.open>a:hover,
.navbar-default .navbar-nav>li>a.active,
.navbar-default .navbar-nav>li>a:hover,
.navbar-default .navbar-nav>li>a:focus,
.navbar-logo:hover,
.quoteBlock,
.selected,

View File

@@ -140,7 +140,7 @@
</label>
</div>
<a href="#" class="hover-button" data-bind="visible: history.isMultiEditing(), click: history.doMultiDelete">
<a href="#" class="hover-button" title="$T('nzo-delete')" data-bind="visible: history.isMultiEditing(), click: history.doMultiDelete">
<span class="glyphicon glyphicon-trash"></span>
</a>
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-bind="visible: !history.isMultiEditing()" data-toggle="modal" data-tooltip="true" data-placement="left">

View File

@@ -665,6 +665,9 @@
</div>
</div>
</fieldset>
<fieldset>
$T('Glitter-retryNoChecks')
</fieldset>
</div>
<div class="modal-footer">
<button class="btn btn-default"><span class="glyphicon glyphicon-repeat"></span> $T('button-retry')</button>

View File

@@ -174,7 +174,7 @@
<label for="multiedit-checkall-queue">
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
</label>
<a href="#" class="hover-button" data-bind="click: queue.doMultiDelete">
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: queue.doMultiDelete">
<span class="glyphicon glyphicon-trash"></span>
</a>
</div>

View File

@@ -140,6 +140,12 @@ select.form-control,
color: #EBEBEB;
}
.btn-default:not(.navbar-btn):hover,
select:hover,
input:hover {
background-color: #666666;
}
/* Needed to force the text-color */
.table-striped>tbody>tr:nth-child(odd)>td,
.table>tbody>tr:nth-child(odd)>td,

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,10 @@
<url type="faq">https://sabnzbd.org/wiki/faq</url>
<url type="contact">https://sabnzbd.org/live-chat.html</url>
<releases>
<release version="4.2.0" date="2024-01-05" type="stable"/>
<release version="4.2.3" date="2024-03-10" type="stable"/>
<release version="4.2.2" date="2024-01-31" 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

@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.2RC1\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"

View File

@@ -1,9 +1,9 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
"MIME-Version: 1.0\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# ION, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: ION, 2020\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"

113
po/email/it.po Normal file
View File

@@ -0,0 +1,113 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Italian (https://app.transifex.com/sabnzbd/teams/111101/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: email/email.tmpl:1
msgid ""
"##\n"
"## Default Email template for SABnzbd\n"
"## This a Cheetah template\n"
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
"##\n"
"## Newlines and whitespace are significant!\n"
"##\n"
"## These are the email headers\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"Subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> job $name\n"
"X-priority: 5\n"
"X-MS-priority: 5\n"
"## After this comes the body, the empty line is required!\n"
"\n"
"Hi,\n"
"<!--#if $status #-->\n"
"SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
"<!--#else#-->\n"
"SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
"<!--#end if#-->\n"
"Finished at $end_time\n"
"Downloaded $size\n"
"\n"
"Results of the job:\n"
"<!--#for $stage in $stages #-->\n"
"Stage $stage <!--#slurp#-->\n"
"<!--#for $result in $stages[$stage]#-->\n"
" $result <!--#slurp#-->\n"
"<!--#end for#-->\n"
"<!--#end for#-->\n"
"<!--#if $script!=\"\" #-->\n"
"Output from user script \"$script\" (Exit code = $script_ret):\n"
"$script_output\n"
"<!--#end if#-->\n"
"<!--#if $status #-->\n"
"Enjoy!\n"
"<!--#else#-->\n"
"Sorry!\n"
"<!--#end if#-->\n"
msgstr ""
#: email/rss.tmpl:1
msgid ""
"##\n"
"## RSS Email template for SABnzbd\n"
"## This a Cheetah template\n"
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
"##\n"
"## Newlines and whitespace are significant!\n"
"##\n"
"## These are the email headers\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"Subject: SABnzbd has added $amount jobs to the queue\n"
"X-priority: 5\n"
"X-MS-priority: 5\n"
"## After this comes the body, the empty line is required!\n"
"\n"
"Hi,\n"
"\n"
"SABnzbd has added $amount job(s) to the queue.\n"
"They are from RSS feed \"$feed\".\n"
"<!--#for $job in $jobs#-->\n"
" $job <!--#slurp#-->\n"
"<!--#end for#-->\n"
"\n"
"Bye\n"
msgstr ""
#: email/badfetch.tmpl:1
msgid ""
"##\n"
"## Bad URL Fetch Email template for SABnzbd\n"
"## This a Cheetah template\n"
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
"##\n"
"## Newlines and whitespace are significant!\n"
"##\n"
"## These are the email headers\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"Subject: SABnzbd failed to fetch an NZB\n"
"X-priority: 5\n"
"X-MS-priority: 5\n"
"## After this comes the body, the empty line is required!\n"
"\n"
"Hi,\n"
"\n"
"SABnzbd has failed to retrieve the NZB from $url.\n"
"The error message was: $msg\n"
"\n"
"Bye\n"
msgstr ""

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"

View File

@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.2RC1\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
@@ -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 ""
@@ -2465,11 +2466,11 @@ msgid "Port SABnzbd should listen on."
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
@@ -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"
@@ -4084,6 +4081,10 @@ msgstr ""
msgid "Fetch"
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr ""
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr ""
@@ -4188,6 +4189,10 @@ msgstr ""
msgid "Bottom"
msgstr ""
#: sabnzbd/skintext.py
msgid "When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr ""

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.1\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 "
@@ -2560,11 +2558,11 @@ msgid "Port SABnzbd should listen on."
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webové rozhraní"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
@@ -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"
@@ -4282,6 +4276,10 @@ msgstr ""
msgid "Fetch"
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webové rozhraní"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr ""
@@ -4386,6 +4384,12 @@ msgstr ""
msgid "Bottom"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr ""

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.1\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 "
@@ -2601,12 +2599,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Port som SABnzbd ska lytte på."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webgrænseflade"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Vælg et Web-grænseflade udseende."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4380,6 +4374,10 @@ msgstr "ADVARSEL:"
msgid "Fetch"
msgstr "Hent"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webgrænseflade"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Opdateringsfrekvens"
@@ -4484,6 +4482,12 @@ msgstr "Øverst"
msgid "Bottom"
msgstr "Bunden"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Vis scriptlog"

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
@@ -12,12 +12,13 @@
# reloxx13 <reloxx@interia.pl>, 2022
# kameb, 2023
# Safihre <safihre@sabnzbd.org>, 2023
# HandyDandy04, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Last-Translator: HandyDandy04, 2024\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -300,8 +301,9 @@ 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"
msgid "Network path \"%s\" should not be used here"
msgstr "Netzwerkpfad \"%s\" ist hier nicht erlaubt"
#: sabnzbd/cfg.py
@@ -781,6 +783,13 @@ msgstr "FEHLER:"
msgid "Back"
msgstr "Zurück"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
"Um alle hilfreichen Warnungen zu verbergen, deaktiviere die extra "
"Einstellung 'helpful_warnings'."
#: sabnzbd/misc.py
msgid "d"
msgstr "t"
@@ -2170,7 +2179,7 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgstr "Echtzeit Chat"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2621,23 +2630,13 @@ 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 "
"platforms."
msgstr ""
"Erhöhe Reparaturgeschwindigkeit durch installation von Multicore Par2, "
"verfügbar auf vielen Plattformen."
#: sabnzbd/skintext.py
msgid "Version"
@@ -2685,12 +2684,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Port, auf dem SABnzbd auf Anfragen warten soll."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web-Oberfläche"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Gestaltung der Web-Oberfläche verändern."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -3245,19 +3244,20 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr ""
msgstr "Erkennung identischer Downloads"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
"Erkenne identische Downloads anhand des Dateinamens oder des NZB-Inhalts."
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
msgstr "Intelligente Duplikat Erkennung"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgstr ""
msgstr "Erkenne Duplikate durch Analyse der Dateinamen."
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3268,6 +3268,8 @@ msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
msgstr ""
"Umgehe intelligente Duplikat-Erkennung, wenn PROPER, REAL oder REPACK im "
"Download-Namen erkannt wird"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3365,6 +3367,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Executed after the queue finishes downloading."
msgstr ""
"Wurde nach Fertigstellung des Downloads der eingereihten Aufträge "
"ausgeführt."
#: sabnzbd/skintext.py
msgid "Extra PAR2 Parameters"
@@ -3424,10 +3428,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"
@@ -4552,6 +4552,10 @@ msgstr "WARNUNG:"
msgid "Fetch"
msgstr "Abrufen"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web-Oberfläche"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Aktualisierungsrate"
@@ -4656,6 +4660,12 @@ msgstr "Ganz nach oben"
msgid "Bottom"
msgstr "Ganz nach unten"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Skript-Protokoll anzeigen"
@@ -4710,7 +4720,7 @@ msgstr "Tastaturkürzel"
#: sabnzbd/skintext.py
msgid "Shift+Arrow key: Browse Queue and History pages"
msgstr ""
msgstr "Shift+Pfeil-Taste: Durchsuche eingereihte Aufträge und Verlaufsseiten"
#: sabnzbd/skintext.py
msgid "How long or untill when do you want to pause? (in English!)"

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.1\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 "
@@ -2667,12 +2659,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Puerto en que SABnzbd debería escuchar"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfaz web"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Elije una piel"
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4483,6 +4471,10 @@ msgstr "AVISO:"
msgid "Fetch"
msgstr "Obtener"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfaz web"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Frecuencia de actualización"
@@ -4587,6 +4579,12 @@ msgstr "Superior"
msgid "Bottom"
msgstr "Último"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Ver bitacora de Scripts"

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.1\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 "
@@ -2597,12 +2595,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Portti jota SABnzbdn tulisi kuunnella."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web-käyttöliittymä"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Valitse teema."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4388,6 +4382,10 @@ msgstr "VAROITUS:"
msgid "Fetch"
msgstr "Nouda"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web-käyttöliittymä"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Päivitysväli"
@@ -4492,6 +4490,12 @@ msgstr "Ylin"
msgid "Bottom"
msgstr "Alin"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Näytä skriptien loki"

View File

@@ -1,15 +1,15 @@
# 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
# Fred L <88com88@gmail.com>, 2023
# Fred L <88com88@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC2\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2023\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2024\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -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 "Le chemin réseau \"%s\" ne devrait pas être utilisé ici"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -776,6 +777,13 @@ msgstr "ERREUR:"
msgid "Back"
msgstr "Retour"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
"Pour éviter tous les avertissements utiles, désactivez le paramètre spécial "
"'helpful_warnings'."
#: sabnzbd/misc.py
msgid "d"
msgstr "j"
@@ -2613,18 +2621,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 "
@@ -2679,11 +2675,11 @@ msgid "Port SABnzbd should listen on."
msgstr "Port que SABnzbd doit surveiller."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interface Web"
msgid "Web Interface Theme"
msgstr "Thème de l'interface web"
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgid "Choose a theme."
msgstr "Choisissez un thème."
#: sabnzbd/skintext.py
@@ -3422,10 +3418,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"
@@ -4553,6 +4545,10 @@ msgstr "AVERTISSEMENT :"
msgid "Fetch"
msgstr "Charger"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interface Web"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Taux de rafraîchissement"
@@ -4657,6 +4653,14 @@ msgstr "Tout en haut"
msgid "Bottom"
msgstr "Tout en bas"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
"Lorsque vous réessayez une tâche, la \"Détection des doublons\" et "
"\"Abandonner les travaux qui ne peuvent pas être terminés\" sont désactivés."
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Afficher le journal des scripts"

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.1\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 "
@@ -2611,12 +2606,12 @@ msgid "Port SABnzbd should listen on."
msgstr "פתחה אשר SABnzbd צריך להאזין אליה."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "ממשק רשת"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "בחר עור."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4401,6 +4392,10 @@ msgstr "אזהרה:"
msgid "Fetch"
msgstr "משוך"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "ממשק רשת"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "קצב רענון"
@@ -4505,6 +4500,12 @@ msgstr "ראש"
msgid "Bottom"
msgstr "תחתית"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "הצג יומן תסריטים"

4663
po/main/it.po Normal file
View File

File diff suppressed because it is too large Load Diff

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.1\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 "
@@ -2591,12 +2589,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Porten som SABnzbd skal bruke."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webgrensesnitt"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Velg et skall."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4360,6 +4354,10 @@ msgstr "ADVARSEL:"
msgid "Fetch"
msgstr "Hent"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webgrensesnitt"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Oppdateringsfrekvens"
@@ -4464,6 +4462,12 @@ msgstr "Topp"
msgid "Bottom"
msgstr "Bunn"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Se skriptlogg"

View File

@@ -1,16 +1,16 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Rik Brouwer, 2022
# Robert Lampe, 2023
# Safihre <safihre@sabnzbd.org>, 2023
# Safihre <safihre@sabnzbd.org>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2024\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -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 "We raden af hier de netwerk-locatie \"%s\" te gebruiken"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -773,6 +774,13 @@ msgstr "FOUT:"
msgid "Back"
msgstr "Terug"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
"Om alle waarschuwingen met mogelijke problemen te blokkeren kan de Speciale "
"optie 'helpful_warnings' uitgezet worden."
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -2595,18 +2603,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 "
@@ -2661,12 +2657,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Poort waar op SABnzbd luistert."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webinterface"
msgid "Web Interface Theme"
msgstr "Webinterface Stijl"
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Kies een bedieningsstijl (<i>herstart nodig</i>)."
msgid "Choose a theme."
msgstr "Kies een stijl voor de webinterface."
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -3389,10 +3385,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"
@@ -4512,6 +4504,10 @@ msgstr "WAARSCHUWING:"
msgid "Fetch"
msgstr "Ophalen"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webinterface"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Ververssnelheid"
@@ -4616,6 +4612,15 @@ msgstr "Boven"
msgid "Bottom"
msgstr "Onder"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
"Wanneer een download Opnieuw geprobeerd wordt, staan 'Identieke/Slimme "
"downloaddetectie' en 'Download afbreken als deze zeker niet kan worden "
"voltooid' uit."
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Toon Script resultaat"

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.1\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 "
@@ -2596,12 +2594,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Port, na którym ma nasłuchiwać SABnzbd"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfejs WWW"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Wybierz skórkę"
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4369,6 +4363,10 @@ msgstr "UWAGA:"
msgid "Fetch"
msgstr "Pobierz"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfejs WWW"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Częstotliwość odświeżania"
@@ -4473,6 +4471,12 @@ msgstr "Na górę"
msgid "Bottom"
msgstr "Na dół"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Zobacz log skryptu"

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.1\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 "
@@ -2610,12 +2608,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Porta onde o SABnzbd será ativado."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interface Web"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Escolha uma skin."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4383,6 +4377,10 @@ msgstr "AVISO:"
msgid "Fetch"
msgstr "Obter"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interface Web"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Taxa de atualização"
@@ -4487,6 +4485,12 @@ msgstr "Topo"
msgid "Bottom"
msgstr "Base"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Exibir Log do Script"

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.1\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 "
@@ -2629,12 +2627,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Portul pe care SABnzbd îl va asculta."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfață Web"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Alege o temă."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4400,6 +4394,10 @@ msgstr "ATENŢIE:"
msgid "Fetch"
msgstr "Descarcă"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Interfață Web"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Rată actualizare"
@@ -4504,6 +4502,12 @@ msgstr "Vârf"
msgid "Bottom"
msgstr "Coadă"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Vezi Jurnal Script"

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.1\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 "
@@ -2593,12 +2591,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Порт, по которому будет доступна служба SABnzbd."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб-интерфейс"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Выберите тему."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4367,6 +4361,10 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ"
msgid "Fetch"
msgstr "Загрузить"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб-интерфейс"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Частота обновления"
@@ -4471,6 +4469,12 @@ msgstr "В начало"
msgid "Bottom"
msgstr "В конец"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Просмотреть журнал сценария"

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.1\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 "
@@ -2585,12 +2583,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Порт на који SABnzbd чека везе."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб интерфејс"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Odaberi izgled"
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4347,6 +4341,10 @@ msgstr "ПАЖЊА:"
msgid "Fetch"
msgstr "Преузми"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб интерфејс"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Брзина освежавања"
@@ -4451,6 +4449,12 @@ msgstr "Врх"
msgid "Bottom"
msgstr "Дно"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Види извештај скрипта"

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.1\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 "
@@ -2593,12 +2591,12 @@ msgid "Port SABnzbd should listen on."
msgstr "Port som SABnzbd ska lyssna på."
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webbkontrollsutseende"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "Välj ett skin."
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4359,6 +4353,10 @@ msgstr "VARNING:"
msgid "Fetch"
msgstr "Hämta"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webbkontrollsutseende"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Uppdateringsfrekvens"
@@ -4463,6 +4461,12 @@ msgstr "Topp"
msgid "Bottom"
msgstr "Botten"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "Visa skriptlogg"

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.1\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 "
@@ -2573,12 +2571,12 @@ msgid "Port SABnzbd should listen on."
msgstr "SABnzbd 应监听的端口。"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web 界面"
msgid "Web Interface Theme"
msgstr ""
#: sabnzbd/skintext.py
msgid "Choose a skin."
msgstr "选择皮肤。"
msgid "Choose a theme."
msgstr ""
#: sabnzbd/skintext.py
msgid "SABnzbd Username"
@@ -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"
@@ -4299,6 +4293,10 @@ msgstr "警告:"
msgid "Fetch"
msgstr "装取"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web 界面"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "刷新频率"
@@ -4403,6 +4401,12 @@ msgstr "置顶"
msgid "Bottom"
msgstr "置底"
#: sabnzbd/skintext.py
msgid ""
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
"completed' are disabled."
msgstr ""
#: sabnzbd/skintext.py
msgid "View Script Log"
msgstr "查看脚本日志"

View File

@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.2RC1\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
@@ -20,10 +20,6 @@ msgstr ""
msgid "Support the project, Donate!"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to reinstall the SABnzbd service. \\n\\nClick `OK` to remove the existing services or `Cancel` to cancel this upgrade."
msgstr ""
@@ -36,6 +32,10 @@ msgstr ""
msgid "The installer only supports Windows 8.1 and above, use the standalone legacy version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr ""

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Pavel C <quoing_transifex@mess.cz>, 2022
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Pavel C <quoing_transifex@mess.cz>, 2022\n"
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
@@ -24,10 +24,6 @@ msgstr ""
msgid "Support the project, Donate!"
msgstr "Podpořte projekt!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr ""

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
@@ -24,10 +24,6 @@ msgstr "Vis udgivelsesbemærkninger"
msgid "Support the project, Donate!"
msgstr "Støt projektet, donér!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Luk venligst \"SABnzbd.exe\" først"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Dette vil afinstallere SABnzbd fra dit system"

View File

@@ -1,15 +1,16 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# reloxx13 <reloxx@interia.pl>, 2022
# HandyDandy04, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC4\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: reloxx13 <reloxx@interia.pl>, 2022\n"
"Last-Translator: HandyDandy04, 2024\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,10 +26,6 @@ msgstr "Versionshinweise anzeigen"
msgid "Support the project, Donate!"
msgstr "Bitte unterstützen Sie das Projekt durch eine Spende!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Schliessen Sie bitte zuerst \"SABnzbd.exe\"."
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -54,6 +51,10 @@ msgstr ""
"Der Installer unterstützt nur Windows 8.1 und höher. Benutze die Standalone-"
"Version für ältere Windows Versionen."
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr "Beende SABnzbd"
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Dies entfernt SABnzbd von Ihrem System"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Ester Molla Aragones <moarages@gmail.com>, 2020\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
@@ -25,10 +25,6 @@ msgstr "Mostrar notas de la versión"
msgid "Support the project, Donate!"
msgstr "¡Apoye el proyecto, haga una donación!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Por favor cierre primero \"SABnzbd.exe\""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -54,6 +50,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Esto desinstalará SABnzbd de su sistema"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
@@ -24,10 +24,6 @@ msgstr "Näytä julkaisutiedot"
msgid "Support the project, Donate!"
msgstr "Tue projektia, lahjoita!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Ole hyvä ja sulje \"SABnzbd.exe\" ensin"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Tämä poistaa SABnzbd:n tietokoneestasi"

View File

@@ -1,15 +1,15 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# Fred L <88com88@gmail.com>, 2021
# Fred L <88com88@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2021\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2024\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,10 +25,6 @@ msgstr "Afficher les notes de version"
msgid "Support the project, Donate!"
msgstr "Soutenez le projet, faites un don !"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Merci de fermer \"SABnzbd.exe\" avant l'installation"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -56,6 +52,10 @@ msgstr ""
" utilisez la version autonome legacy pour les versions antérieures de "
"Windows."
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr "Arrêt de SABnzbd"
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Ceci désinstallera SABnzbd de votre système"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: ION, 2021\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
@@ -25,10 +25,6 @@ msgstr "הראה הערות שחרור"
msgid "Support the project, Donate!"
msgstr "תמוך במיזם, תרום!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "אנא סגור את \"SABnzbd.exe\" תחילה"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -55,6 +51,10 @@ msgstr ""
"המתקין תומך רק במערכת Windows 8.1 ומעלה, השתמש בגרסה העצמאית המיושנת כדי "
"להריץ על גרסת Windows ישנה יותר."
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "זה יסיר את SABnzbd מהמערכת שלך"

78
po/nsis/it.po Normal file
View File

@@ -0,0 +1,78 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.2Beta1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Italian (https://app.transifex.com/sabnzbd/teams/111101/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: builder/win/NSIS_Installer.nsi
msgid "Show Release Notes"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Support the project, Donate!"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
"reinstall the SABnzbd service. \\n\\nClick `OK` to remove the existing "
"services or `Cancel` to cancel this upgrade."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The installer only supports 64-bit Windows, use the standalone version to "
"run on 32-bit Windows."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The installer only supports Windows 8.1 and above, use the standalone legacy"
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Run at startup"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Desktop Icon"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "NZB File association"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Delete Program"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Delete Settings"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid ""
"You cannot overwrite an existing installation. \\n\\nClick `OK` to remove "
"the previous version or `Cancel` to cancel this upgrade."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Your settings and data will be preserved."
msgstr ""

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
@@ -24,10 +24,6 @@ msgstr "Vis versjonsmerknader"
msgid "Support the project, Donate!"
msgstr "Støtt prosjektet, donèr!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Vennligst lukk \"SABnzbd.exe\" først"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Dette vil avinstallere SABnzbd fra ditt system"

View File

@@ -1,14 +1,14 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2021
# Safihre <safihre@sabnzbd.org>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC4\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2024\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,10 +24,6 @@ msgstr "Toon opmerkingen bij deze uitgave"
msgid "Support the project, Donate!"
msgstr "Steun het project, doneer!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Sluit \"SABnzbd.exe\" eerst af"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -54,6 +50,10 @@ msgstr ""
" de standalone legacy versie om SABnzbd uit te voeren op oudere versies van "
"Windows."
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr "SABnzbd wordt afgesloten"
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Dit verwijdert SABnzbd van je systeem"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
@@ -24,10 +24,6 @@ msgstr "Pokaż informacje o wydaniu"
msgid "Support the project, Donate!"
msgstr "Wspomóż projekt!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Najpierw zamknij SABnzbd.exe"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "To odinstaluje SABnzbd z systemu"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
@@ -24,10 +24,6 @@ msgstr "Mostrar Notas de Lançamento"
msgid "Support the project, Donate!"
msgstr "Apoie o projeto. Faça uma doação!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Por favor, feche \"SABnzbd.exe\" primeiro"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Isso irá desinstalar SABnzbd de seu sistema"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
@@ -24,10 +24,6 @@ msgstr "Arată Notele de Publicare"
msgid "Support the project, Donate!"
msgstr "Susţine proiectul, Donează!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Închideţi mai întâi \"SABnzbd.exe\""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Acest lucru va dezinstala SABnzbd din sistem"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
@@ -24,10 +24,6 @@ msgstr "Показать заметки о выпуске"
msgid "Support the project, Donate!"
msgstr "Поддержите проект. Сделайте пожертвование!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Завершите сначала работу процесса SABnzbd.exe"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Приложение SABnzbd будет удалено из вашей системы"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
@@ -24,10 +24,6 @@ msgstr "Прикажи белешке о издању"
msgid "Support the project, Donate!"
msgstr "Подржите пројекат, дајте добровољан прилог!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Прво затворите „SABnzbd.exe“"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "Ово ће уклонити САБнзбд са вашег система"

View File

@@ -1,14 +1,15 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# Petter Ramme, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Last-Translator: Petter Ramme, 2024\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,28 +25,35 @@ msgstr "Visa releasenoteringar"
msgid "Support the project, Donate!"
msgstr "Donera och stöd detta projekt!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "Var vänlig stäng \"SABnzbd.exe\" först"
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
"reinstall the SABnzbd service. \\n\\nClick `OK` to remove the existing "
"services or `Cancel` to cancel this upgrade."
msgstr ""
"SABnzbd Windows tjänsten ändrades i SABnzbd 3.0.0.\\nSABnzbd tjänsten "
"behöver installeras om.\\n\\Välj OK` för att ta bort den befintliga "
"tjänsten, eller välj `Cancel`för att avbryta uppdateringen."
#: builder/win/NSIS_Installer.nsi
msgid ""
"The installer only supports 64-bit Windows, use the standalone version to "
"run on 32-bit Windows."
msgstr ""
"Installationen stödjer endast 64-bitars Windows, använd den fristående "
"versionen för att köra installationen på 32-bitars Windows."
#: builder/win/NSIS_Installer.nsi
msgid ""
"The installer only supports Windows 8.1 and above, use the standalone legacy"
" version to run on older Windows version."
msgstr ""
"Installationen kräver Windows 8.1 eller högre. Använd en fristående äldre "
"version av installationen för en äldre version av Windows."
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr "Stänger av SABnzbd."
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2023 The SABnzbd-Team
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.1\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
@@ -24,10 +24,6 @@ msgstr "显示版本说明"
msgid "Support the project, Donate!"
msgstr "支持该项目,捐助!"
#: builder/win/NSIS_Installer.nsi
msgid "Please close \"SABnzbd.exe\" first"
msgstr "请先关闭 \"SABnzbd.exe\""
#: builder/win/NSIS_Installer.nsi
msgid ""
"The SABnzbd Windows Service changed in SABnzbd 3.0.0. \\nYou will need to "
@@ -47,6 +43,10 @@ msgid ""
" version to run on older Windows version."
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "Shutting down SABnzbd"
msgstr ""
#: builder/win/NSIS_Installer.nsi
msgid "This will uninstall SABnzbd from your system"
msgstr "这将从您的系统中卸载 SABnzbd"

View File

@@ -14,7 +14,7 @@ jaraco.collections==5.0.0
jaraco.text==3.8.1 # Newer version introduces irrelevant extra dependencies
jaraco.classes==3.3.0
jaraco.context==4.3.0
more-itertools==10.1.0
more-itertools==10.2.0
zc.lockfile==3.0.post1
python-dateutil==2.8.2
tempora==5.5.0

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)
@@ -653,7 +657,7 @@ def _api_warnings(name, kwargs):
LOG_JSON_RE = re.compile(rb"'(apikey|api|username|password)': '(.*?)'", re.I)
LOG_INI_HIDE_RE = re.compile(
rb"(apikey|api|user|username|password|email_pwd|email_account|email_to|email_from|pushover_token|pushover_userkey"
rb"|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=.*",
rb"|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address|Public address IPv[4|6]-only|Local IPv6 address)\s?=.*",
re.I,
)
LOG_HASH_RE = re.compile(rb"([a-zA-Z\d]{25})", re.I)
@@ -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
@@ -277,6 +277,9 @@ def validate_default_if_empty(root: str, value: str, default: str) -> Tuple[None
# Special settings
##############################################################################
# This should be here so it's initialized first when the config is read
helpful_warnings = OptionBool("misc", "helpful_warnings", True)
queue_complete = OptionStr("misc", "queue_complete")
queue_complete_pers = OptionBool("misc", "queue_complete_pers", False)
bandwidth_perc = OptionNumber("misc", "bandwidth_perc", 100, minval=0, maxval=100)
@@ -452,7 +455,7 @@ rss_filenames = OptionBool("misc", "rss_filenames", False)
api_logging = OptionBool("misc", "api_logging", True)
html_login = OptionBool("misc", "html_login", True)
warn_dupl_jobs = OptionBool("misc", "warn_dupl_jobs", False)
helpful_warnings = OptionBool("misc", "helpful_warnings", True)
keep_awake = OptionBool("misc", "keep_awake", True)
tray_icon = OptionBool("misc", "tray_icon", True)
allow_incomplete_nzb = OptionBool("misc", "allow_incomplete_nzb", False)

View File

@@ -447,7 +447,6 @@ class ConfigServer:
self.expire_date = OptionStr(name, "expire_date", add=False)
self.quota = OptionStr(name, "quota", add=False)
self.usage_at_start = OptionNumber(name, "usage_at_start", add=False)
self.send_group = OptionBool(name, "send_group", False, add=False)
self.priority = OptionNumber(name, "priority", 0, 0, 99, add=False)
self.notes = OptionStr(name, "notes", add=False)
@@ -473,7 +472,6 @@ class ConfigServer:
"ssl",
"ssl_verify",
"ssl_ciphers",
"send_group",
"enable",
"required",
"optional",
@@ -516,7 +514,6 @@ class ConfigServer:
output_dict["expire_date"] = self.expire_date()
output_dict["quota"] = self.quota()
output_dict["usage_at_start"] = self.usage_at_start()
output_dict["send_group"] = self.send_group()
output_dict["priority"] = self.priority()
output_dict["notes"] = self.notes()
return output_dict
@@ -556,13 +553,6 @@ class ConfigCat:
except KeyError:
continue
# TODO: Remove after next release
if "alt.bin" in self.newzbin.get_string():
sabnzbd.misc.helpful_warning(
"You have set a newsgroup for category %s. Could you let us know why? https://github.com/sabnzbd/sabnzbd/discussions/2758",
self.__name,
)
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
"""Return a dictionary with all attributes"""
output_dict = {}

View File

@@ -75,6 +75,7 @@ DEF_LOG_CHERRY = "cherrypy.log"
DEF_ARTICLE_CACHE_DEFAULT = "500M"
DEF_ARTICLE_CACHE_MAX = "1G"
DEF_TIMEOUT = 60
DEF_TEST_TIMEOUT = 10
DEF_SCANRATE = 5
DEF_HTTPS_CERT_FILE = "server.cert"
DEF_HTTPS_KEY_FILE = "server.key"
@@ -171,6 +172,7 @@ class DuplicateStatus:
DUPLICATE_ALTERNATIVE = "Duplicate Alternative" # Alternative duplicate for a queued job
SMART_DUPLICATE = "Smart Duplicate" # Simple Series duplicate
SMART_DUPLICATE_ALTERNATIVE = "Smart Duplicate Alternative" # Alternative duplicate for a queued job
DUPLICATE_IGNORED = "Duplicate Ignored"
class AddNzbFileResult:

View File

@@ -38,7 +38,7 @@ from sabnzbd.encoding import ubtou, utob
from sabnzbd.misc import int_conv, caller_name, opts_to_pp, to_units
from sabnzbd.filesystem import remove_file, clip_path
DB_LOCK = threading.RLock()
DB_LOCK = threading.Lock()
class HistoryDB:
@@ -50,70 +50,73 @@ class HistoryDB:
# These class attributes will be accessed directly because
# they need to be shared by all instances
db_path = None # Will contain full path to history database
done_cleaning = False # Ensure we only do one Vacuum per session
db_path = None # Full path to history database
startup_done = False
@synchronized(DB_LOCK)
def __init__(self):
"""Determine database path and create connection"""
self.connection: Optional[Connection] = None
self.cursor: Optional[Cursor] = None
if not HistoryDB.db_path:
HistoryDB.db_path = os.path.join(sabnzbd.cfg.admin_dir.get_path(), DB_HISTORY_NAME)
self.connect()
def connect(self):
"""Create a connection to the database"""
create_table = not os.path.exists(HistoryDB.db_path)
if not HistoryDB.db_path:
HistoryDB.db_path = os.path.join(sabnzbd.cfg.admin_dir.get_path(), DB_HISTORY_NAME)
create_table = not HistoryDB.startup_done and not os.path.exists(HistoryDB.db_path)
self.connection = sqlite3.connect(HistoryDB.db_path)
self.connection.isolation_level = None # autocommit attribute only introduced in Python 3.12
self.connection.row_factory = sqlite3.Row
self.cursor = self.connection.cursor()
if create_table:
self.create_history_db()
elif not HistoryDB.done_cleaning:
# Run VACUUM on sqlite
# Perform initialization only once
if not HistoryDB.startup_done:
if create_table:
self.create_history_db()
# When an object (table, index, or trigger) is dropped from the database, it leaves behind empty space
# http://www.sqlite.org/lang_vacuum.html
HistoryDB.done_cleaning = True
self.execute("VACUUM")
self.execute("PRAGMA user_version;")
try:
version = self.cursor.fetchone()["user_version"]
except IndexError:
version = 0
# See if we need to perform any updates
self.execute("PRAGMA user_version;")
try:
version = self.cursor.fetchone()["user_version"]
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;")
)
if version < 2:
_ = self.execute("PRAGMA user_version = 2;") and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;"
)
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;")
)
# 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;")
)
if version < 2:
_ = self.execute("PRAGMA user_version = 2;") and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;"
)
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;")
)
HistoryDB.startup_done = True
def execute(self, command: str, args: Sequence = (), save: bool = False) -> bool:
def execute(self, command: str, args: Sequence = ()) -> 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:
self.connection.commit()
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
@@ -129,6 +132,7 @@ class HistoryDB:
remove_file(HistoryDB.db_path)
except:
pass
HistoryDB.startup_done = False
self.connect()
# Return False in case of "duplicate column" error
# because the column addition in connect() must be terminated
@@ -141,6 +145,7 @@ class HistoryDB:
try:
self.connection.rollback()
except:
# Can fail in case of automatic rollback
logging.debug("Rollback Failed:", exc_info=True)
return False
@@ -195,9 +200,7 @@ class HistoryDB:
"""Remove all completed jobs from the database, optional with `search` pattern"""
search = convert_search(search)
logging.info("Removing all completed jobs from history")
return self.execute(
"""DELETE FROM history WHERE name LIKE ? AND status = ?""", (search, Status.COMPLETED), save=True
)
return self.execute("""DELETE FROM history WHERE name LIKE ? AND status = ?""", (search, Status.COMPLETED))
def get_failed_paths(self, search=None):
"""Return list of all storage paths of failed jobs (may contain non-existing or empty paths)"""
@@ -214,9 +217,7 @@ class HistoryDB:
"""Remove all failed jobs from the database, optional with `search` pattern"""
search = convert_search(search)
logging.info("Removing all failed jobs from history")
return self.execute(
"""DELETE FROM history WHERE name LIKE ? AND status = ?""", (search, Status.FAILED), save=True
)
return self.execute("""DELETE FROM history WHERE name LIKE ? AND status = ?""", (search, Status.FAILED))
def remove_history(self, jobs=None):
"""Remove all jobs in the list `jobs`, empty list will remove all completed jobs"""
@@ -227,7 +228,7 @@ class HistoryDB:
jobs = [jobs]
for job in jobs:
self.execute("""DELETE FROM history WHERE nzo_id = ?""", (job,), save=True)
self.execute("""DELETE FROM history WHERE nzo_id = ?""", (job,))
logging.info("[%s] Removing job %s from history", caller_name(), job)
def auto_history_purge(self):
@@ -246,9 +247,7 @@ class HistoryDB:
if days_to_keep > 0:
logging.info("Removing completed jobs older than %s days from history", days_to_keep)
return self.execute(
"""DELETE FROM history WHERE status = ? AND completed < ?""",
(Status.COMPLETED, seconds_to_keep),
save=True,
"""DELETE FROM history WHERE status = ? AND completed < ?""", (Status.COMPLETED, seconds_to_keep)
)
else:
# How many to keep?
@@ -260,7 +259,6 @@ class HistoryDB:
SELECT id FROM history WHERE status = ? ORDER BY completed DESC LIMIT ?
)""",
(Status.COMPLETED, Status.COMPLETED, to_keep),
save=True,
)
def add_history_db(self, nzo, storage: str, postproc_time: int, script_output: str, script_line: str):
@@ -273,7 +271,6 @@ class HistoryDB:
downloaded, fail_message, url_info, bytes, duplicate_key, md5sum, password)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
t,
save=True,
)
logging.info("Added job %s to history", nzo.final_name)

View File

@@ -80,7 +80,6 @@ class Server:
"required",
"optional",
"retention",
"send_group",
"username",
"password",
"busy_threads",
@@ -111,7 +110,6 @@ class Server:
use_ssl,
ssl_verify,
ssl_ciphers,
send_group,
username=None,
password=None,
required=False,
@@ -134,15 +132,6 @@ class Server:
self.required: bool = required
self.optional: bool = optional
self.retention: int = retention
self.send_group: bool = send_group
# TODO: Remove after next release
if send_group:
helpful_warning(
"You have 'Send Group' enabled for %s. Could you let us know why? https://github.com/sabnzbd/sabnzbd/discussions/2715",
self.displayname,
)
self.username: Optional[str] = username
self.password: Optional[str] = password
@@ -223,7 +212,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
@@ -325,7 +320,6 @@ class Downloader(Thread):
required = srv.required()
optional = srv.optional()
retention = int(srv.retention() * 24 * 3600) # days ==> seconds
send_group = srv.send_group()
create = True
if oldserver:
@@ -352,7 +346,6 @@ class Downloader(Thread):
ssl,
ssl_verify,
ssl_ciphers,
send_group,
username,
password,
required,
@@ -525,10 +518,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!"))
@@ -752,13 +741,7 @@ class Downloader(Thread):
done = True
logging.debug("Article <%s> is present", article.article)
elif nw.status_code == 211:
logging.debug("group command ok -> %s", nw.nntp_msg)
nw.group = nw.article.nzf.nzo.group
nw.reset_data_buffer()
self.__request_article(nw)
elif nw.status_code in (411, 423, 430):
elif nw.status_code in (411, 423, 430, 451):
done = True
logging.debug(
"Thread %s@%s: Article %s missing (error=%s)",
@@ -781,6 +764,18 @@ class Downloader(Thread):
nw.reset_data_buffer()
self.__request_article(nw)
else:
logging.warning(
T("%s@%s: Received unknown status code %s for article %s: %s"),
nw.thrdnum,
nw.server.host,
nw.status_code,
article.article,
nw.nntp_msg.splitlines()[0],
)
done = True
nw.reset_data_buffer()
if done:
# Successful data, clear "bad" counter
server.bad_cons = 0
@@ -973,16 +968,9 @@ class Downloader(Thread):
def __request_article(self, nw: NewsWrapper):
try:
nzo = nw.article.nzf.nzo
if nw.server.send_group and nzo.group != nw.group:
group = nzo.group
if sabnzbd.LOG_ALL:
logging.debug("Thread %s@%s: GROUP <%s>", nw.thrdnum, nw.server.host, group)
nw.send_group(group)
else:
if sabnzbd.LOG_ALL:
logging.debug("Thread %s@%s: BODY %s", nw.thrdnum, nw.server.host, nw.article.article)
nw.body()
if sabnzbd.LOG_ALL:
logging.debug("Thread %s@%s: BODY %s", nw.thrdnum, nw.server.host, nw.article.article)
nw.body()
# Mark as ready to be read
self.add_socket(nw.nntp.fileno, nw)
except socket.error as err:

View File

@@ -351,6 +351,15 @@ def sanitize_files(folder: Optional[str] = None, filelist: Optional[List[str]] =
return output_filelist
def strip_extensions(name: str, ext_to_remove: Tuple[str, ...] = (".nzb", ".par", ".par2")):
"""Strip extensions from a filename, without sanitizing the filename"""
name_base, ext = os.path.splitext(name)
while ext.lower() in ext_to_remove:
name = name_base
name_base, ext = os.path.splitext(name)
return name
def real_path(loc: str, path: str) -> str:
"""When 'path' is relative, return normalized join of 'loc' and 'path'
When 'path' is absolute, return normalized path
@@ -1199,7 +1208,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,57 @@ 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
# If text is updated, make sure to update log-anonymization
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
@@ -162,5 +162,14 @@ def ipv6():
except:
ipv6_address = None
logging.debug("IPv6 address = %s", ipv6_address)
# If text is updated, make sure to update log-anonymization
logging.debug("Local IPv6 address = %s", ipv6_address)
return ipv6_address
def public_ipv6():
if local_address := local_ipv6():
if public_address := public_ip(family=socket.AF_INET6):
return public_address
elif not sabnzbd.misc.is_lan_addr(local_address):
return local_address

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

@@ -50,8 +50,9 @@ from sabnzbd.misc import (
is_lan_addr,
is_local_addr,
is_loopback_addr,
helpful_warning,
recursive_html_escape,
is_none,
get_cpu_name,
)
from sabnzbd.happyeyeballs import happyeyeballs
from sabnzbd.filesystem import (
@@ -68,7 +69,6 @@ import sabnzbd.cfg as cfg
import sabnzbd.notifier as notifier
import sabnzbd.newsunpack
from sabnzbd.utils.servertests import test_nntp_server_dict
from sabnzbd.utils.getperformance import getcpu
import sabnzbd.utils.ssdp
from sabnzbd.constants import (
DEF_STD_CONFIG,
@@ -80,7 +80,7 @@ from sabnzbd.constants import (
GUESSIT_SORT_TYPES,
VALID_NZB_FILES,
VALID_ARCHIVES,
DEF_TIMEOUT,
DEF_TEST_TIMEOUT,
)
from sabnzbd.lang import list_languages
from sabnzbd.api import (
@@ -429,7 +429,7 @@ class MainPage:
info["have_rss_defined"] = bool(config.get_rss())
info["have_watched_dir"] = bool(cfg.dirscan_dir())
info["cpumodel"] = getcpu()
info["cpumodel"] = get_cpu_name()
info["cpusimd"] = sabnzbd.decoder.SABCTOOLS_SIMD
# Have logout only with HTML and if inet=5, only when we are external
@@ -517,7 +517,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 +681,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 +796,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 +951,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 +1064,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"),
@@ -1152,7 +1143,7 @@ def handle_server(kwargs, root=None, new_svr=False):
kwargs["connections"] = "1"
if kwargs.get("enable") == "1":
if not happyeyeballs(host, int_conv(port), int_conv(kwargs.get("timeout"), default=DEF_TIMEOUT)):
if not happyeyeballs(host, int_conv(port), int_conv(kwargs.get("timeout"), default=DEF_TEST_TIMEOUT)):
return badParameterResponse(T('Server address "%s:%s" is not valid.') % (host, port), ajax)
# Default server name is just the host name
@@ -1170,7 +1161,7 @@ def handle_server(kwargs, root=None, new_svr=False):
if new_svr:
server = unique_svr_name(server)
for kw in ("ssl", "send_group", "enable", "required", "optional"):
for kw in ("ssl", "enable", "required", "optional"):
if kw not in kwargs.keys():
kwargs[kw] = None
if svr and not new_svr:
@@ -1386,7 +1377,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

@@ -82,8 +82,8 @@ def internetspeed(test_time_limit: int = TIME_LIMIT) -> float:
socket_speed = {}
try:
addrinfo = happyeyeballs(TEST_HOSTNAME, TEST_PORT, SOCKET_TIMEOUT)
for _ in range(NR_CONNECTIONS):
addrinfo = happyeyeballs(TEST_HOSTNAME, TEST_PORT, SOCKET_TIMEOUT)
sock = socket.socket(addrinfo.family, addrinfo.type)
sock.settimeout(SOCKET_TIMEOUT)
sock.connect(addrinfo.sockaddr)

View File

@@ -20,9 +20,11 @@ sabnzbd.misc - misc classes
"""
import os
import platform
import ssl
import sys
import logging
import functools
import urllib.request
import urllib.parse
import re
@@ -51,11 +53,13 @@ from sabnzbd.constants import (
)
import sabnzbd.config as config
import sabnzbd.cfg as cfg
from sabnzbd.encoding import ubtou
from sabnzbd.decorators import cache_maintainer
from sabnzbd.encoding import ubtou, platform_btou
from sabnzbd.filesystem import userxbit, make_script_path, remove_file
if sabnzbd.WIN32:
try:
import winreg
import win32process
import win32con
@@ -83,11 +87,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 +172,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 +345,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:
@@ -375,8 +385,6 @@ _SERVICE_PARM = "CommandLine"
def get_serv_parms(service):
"""Get the service command line parameters from Registry"""
import winreg
service_parms = []
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, _SERVICE_KEY + service)
@@ -396,8 +404,6 @@ def get_serv_parms(service):
def set_serv_parms(service, args):
"""Set the service command line parameters in Registry"""
import winreg
serv = []
for arg in args:
serv.append(arg[0])
@@ -476,7 +482,7 @@ def check_latest_version():
# Fetch version info
data = get_from_url("https://sabnzbd.org/latest.txt")
if not data:
logging.info("Cannot retrieve version information from GitHub.com")
logging.info("Cannot retrieve version information from sabnzbd.org")
logging.debug("Traceback: ", exc_info=True)
return
@@ -733,6 +739,51 @@ def get_macos_memory():
return float(system_output.split()[1])
@cache_maintainer(clear_time=3600)
@functools.lru_cache(maxsize=None)
def get_cpu_name():
"""Find the CPU name (which needs a different method per OS), and return it
If none found, return platform.platform()"""
cputype = None
try:
if sabnzbd.WIN32:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Hardware\Description\System\CentralProcessor\0")
cputype = winreg.QueryValueEx(key, "ProcessorNameString")[0]
winreg.CloseKey(key)
elif sabnzbd.MACOS:
cputype = subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"]).strip()
else:
with open("/proc/cpuinfo") as fp:
for myline in fp.readlines():
if myline.startswith("model name"):
# Typical line:
# model name : Intel(R) Xeon(R) CPU E5335 @ 2.00GHz
cputype = myline.split(":", 1)[1] # get everything after the first ":"
break # we're done
cputype = platform_btou(cputype)
except:
# An exception, maybe due to a subprocess call gone wrong
pass
if cputype:
# OK, found. Remove unwanted spaces:
cputype = " ".join(cputype.split())
else:
try:
# Not found, so let's fall back to platform()
cputype = platform.platform()
except:
# Can fail on special platforms (like Snapcraft or embedded)
pass
logging.debug("CPU model = %s", cputype)
return cputype
def on_cleanup_list(filename: str, skip_nzb: bool = False) -> bool:
"""Return True if a filename matches the clean-up list"""
cleanup_list = cfg.cleanup_list()
@@ -1226,33 +1277,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

@@ -177,13 +177,6 @@ class NewsWrapper:
self.nntp.sock.sendall(command)
self.reset_data_buffer()
def send_group(self, group: str):
"""Send the NNTP GROUP command"""
self.timeout = time.time() + self.server.timeout
command = utob("GROUP %s\r\n" % group)
self.nntp.sock.sendall(command)
self.reset_data_buffer()
def recv_chunk(self) -> Tuple[int, bool]:
"""Receive data, return #bytes, done, skip"""
# Resize the buffer in the extremely unlikely case that it got full
@@ -308,11 +301,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()
@@ -395,7 +383,7 @@ class NNTP:
# Ignore if the socket was already closed, resulting in errors
if not self.closed:
msg = "Failed to connect: %s %s@%s:%s (%s)" % (
msg = T("Failed to connect: %s %s@%s:%s (%s)") % (
str(error),
self.nw.thrdnum,
self.nw.server.host,

View File

@@ -23,6 +23,7 @@ sabnzbd.notifier - Send notifications to any notification services
import os.path
import logging
import platform
import urllib.request
import urllib.parse
import http.client
@@ -34,7 +35,7 @@ import sabnzbd
import sabnzbd.cfg
from sabnzbd.encoding import utob
from sabnzbd.filesystem import make_script_path
from sabnzbd.misc import build_and_run_command
from sabnzbd.misc import build_and_run_command, int_conv
from sabnzbd.newsunpack import create_env
if sabnzbd.WIN32:
@@ -42,11 +43,15 @@ if sabnzbd.WIN32:
from win32comext.shell import shell
from windows_toasts import InteractableWindowsToaster, Toast, ToastActivatedEventArgs, ToastButton
# Only Windows 10 and above are supported
if int_conv(platform.release()) < 10:
raise OSError
# Set a custom AUMID to display the right icon, it is written to the registry by the installer
shell.SetCurrentProcessExplicitAppUserModelID("SABnzbd")
_HAVE_WINDOWS_TOASTER = True
except:
# Only supported on Windows 10 and above
# Sending toasts on non-supported platforms results in segfaults
_HAVE_WINDOWS_TOASTER = False
try:
@@ -210,6 +215,7 @@ def send_notify_osd(title, message):
def send_notification_center(title: str, msg: str, notification_type: str, actions: Optional[Dict[str, str]] = None):
"""Send message to macOS Notification Center.
Only 1 button is possible on macOS!"""
logging.debug("Sending macOS notification")
try:
subtitle = T(NOTIFICATION_TYPES.get(notification_type, "other"))
button_text = button_action = None
@@ -228,7 +234,7 @@ def send_notification_center(title: str, msg: str, notification_type: str, actio
def send_prowl(title, msg, notification_type, force=False, test=None):
"""Send message to Prowl"""
logging.debug("Sending Prowl notification")
if test:
apikey = test.get("prowl_apikey")
else:
@@ -261,7 +267,7 @@ def send_prowl(title, msg, notification_type, force=False, test=None):
def send_pushover(title, msg, notification_type, force=False, test=None):
"""Send message to pushover"""
logging.debug("Sending Pushover notification")
if test:
apikey = test.get("pushover_token")
userkey = test.get("pushover_userkey")
@@ -328,7 +334,7 @@ def do_send_pushover(body):
def send_pushbullet(title, msg, notification_type, force=False, test=None):
"""Send message to Pushbullet"""
logging.debug("Sending Pushbullet notification")
if test:
apikey = test.get("pushbullet_apikey")
device = test.get("pushbullet_device")
@@ -363,6 +369,7 @@ def send_pushbullet(title, msg, notification_type, force=False, test=None):
def send_nscript(title, msg, notification_type, force=False, test=None):
"""Run user's notification script"""
logging.debug("Sending notification script notification")
if test:
script = test.get("nscript_script")
env_params = {"notification_parameters": test.get("nscript_parameters")}
@@ -406,6 +413,12 @@ def send_nscript(title, msg, notification_type, force=False, test=None):
def send_windows(title: str, msg: str, notification_type: str, actions: Optional[Dict[str, str]] = None):
"""Send Windows notifications, either fancy with buttons (Windows 10+) or basic ones"""
# Skip any notifications if ran as a Windows Service, it can result in crashes
if sabnzbd.WIN_SERVICE:
return None
logging.debug("Sending Windows notification")
try:
if _HAVE_WINDOWS_TOASTER:
notification_sender = InteractableWindowsToaster("SABnzbd", notifierAUMID="SABnzbd")

View File

@@ -62,6 +62,7 @@ def add_nzbfile(
reuse: Optional[str] = None,
password: Optional[str] = None,
nzo_id: Optional[str] = None,
dup_check: bool = True,
):
"""Add file, either a single NZB-file or an archive.
All other parameters are passed to the NZO-creation.
@@ -119,6 +120,7 @@ def add_nzbfile(
url=url,
password=password,
nzo_id=nzo_id,
dup_check=dup_check,
)
else:
return process_single_nzb(
@@ -136,6 +138,7 @@ def add_nzbfile(
url=url,
password=password,
nzo_id=nzo_id,
dup_check=dup_check,
)
@@ -151,10 +154,10 @@ def process_nzb_archive_file(
nzbname: Optional[str] = None,
reuse: Optional[str] = None,
nzo_info: Optional[Dict[str, Any]] = None,
dup_check: bool = True,
url: Optional[str] = None,
password: Optional[str] = None,
nzo_id: Optional[str] = None,
dup_check: bool = True,
) -> Tuple[AddNzbFileResult, List[str]]:
"""Analyse archive and create job(s).
Accepts archive files with ONLY nzb/nfo/folder files in it.
@@ -266,10 +269,10 @@ def process_single_nzb(
nzbname: Optional[str] = None,
reuse: Optional[str] = None,
nzo_info: Optional[Dict[str, Any]] = None,
dup_check: bool = True,
url: Optional[str] = None,
password: Optional[str] = None,
nzo_id: Optional[str] = None,
dup_check: bool = True,
) -> Tuple[AddNzbFileResult, List[str]]:
"""Analyze file and create a job from it
Supports NZB, NZB.BZ2, NZB.GZ and GZ.NZB-in-disguise

View File

@@ -979,7 +979,7 @@ class NzbQueue:
# Unfortunately we need a copy, since we might remove items from the list
for nzo in self.__nzo_list[:]:
if not nzo.duplicate:
if not nzo.duplicate or nzo.duplicate == DuplicateStatus.DUPLICATE_IGNORED:
continue
# URL's do not have an MD5!

View File

@@ -88,6 +88,7 @@ from sabnzbd.filesystem import (
save_compressed,
backup_nzb,
remove_data,
strip_extensions,
)
from sabnzbd.par2file import FilePar2Info
from sabnzbd.decorators import synchronized
@@ -102,7 +103,7 @@ from sabnzbd.deobfuscate_filenames import is_probably_obfuscated
# In the subject, we expect the filename within double quotes
RE_SUBJECT_FILENAME_QUOTES = re.compile(r'"([^"]*)"')
# Otherwise something that looks like a filename
RE_SUBJECT_BASIC_FILENAME = re.compile(r"([\w\-+()'\s.,]{6,}\.[A-Za-z0-9]{2,4})[^A-Za-z0-9]")
RE_SUBJECT_BASIC_FILENAME = re.compile(r"\b([\w\-+()' .,]+(?:\[[\w\-/+()' .,]*][\w\-+()' .,]*)*\.[A-Za-z0-9]{2,4})\b")
RE_RAR = re.compile(r"(\.rar|\.r\d\d|\.s\d\d|\.t\d\d|\.u\d\d|\.v\d\d)$", re.I)
@@ -1432,12 +1433,13 @@ class NzbObject(TryList):
# If user resumes after encryption warning, no more auto-pauses
self.encrypted = 2
# If user resumes after warning, reset duplicate/oversized/incomplete/unwanted indicators
self.duplicate = None
self.oversized = False
self.incomplete = False
if self.unwanted_ext:
# If user resumes after "unwanted" warning, no more auto-pauses
self.unwanted_ext = 2
if self.duplicate:
self.duplicate = DuplicateStatus.DUPLICATE_IGNORED
@synchronized(NZO_LOCK)
def add_parfile(self, parfile: NzbFile) -> bool:
@@ -1813,8 +1815,10 @@ class NzbObject(TryList):
# Delete all, or just basic files
if self.futuretype:
# Remove temporary file left from URL-fetches
remove_data(self.nzo_id, self.admin_path)
# If duplicate is discarded during URL-fetches, no nzo_id is known yet
if self.nzo_id:
# Remove temporary file left from URL-fetches
remove_data(self.nzo_id, self.admin_path)
elif delete_all_data:
remove_all(self.download_path, recursive=True)
else:
@@ -1880,11 +1884,15 @@ class NzbObject(TryList):
return None, None, None
# Only a subset we want to apply directly to the NZO
for attrib in ("final_name", "priority", "password", "url"):
for attrib in ("final_name", "priority", "url"):
# Only set if it is present and has a value
if attribs.get(attrib):
setattr(self, attrib, attribs[attrib])
# Only set password if it wasn't already set
if not self.password and attribs.get("password"):
self.password = attribs["password"]
# Rest is to be used directly in the NZO-init flow
return attribs["cat"], attribs["pp"], attribs["script"]
@@ -2108,14 +2116,8 @@ def nzf_cmp_name(nzf1: NzbFile, nzf2: NzbFile):
def create_work_name(name: str) -> str:
"""Remove ".nzb" and ".par(2)" and sanitize, skip URL's"""
if name.find("://") < 0:
# In case it was one of these, there might be more
# Need to remove any invalid characters before starting
name_base, ext = os.path.splitext(sanitize_foldername(name))
while ext.lower() in (".nzb", ".par", ".par2"):
name = name_base
name_base, ext = os.path.splitext(name)
# And make sure we remove invalid characters again
return sanitize_foldername(name)
# Invalid charters need to be removed before and after (see unit-tests)
return sanitize_foldername(strip_extensions(sanitize_foldername(name)))
else:
return name.strip()
@@ -2125,6 +2127,10 @@ def scan_password(name: str) -> Tuple[str, Optional[str]]:
if "http://" in name or "https://" in name:
return name, None
# Strip any unwanted usenet-related extensions
name = strip_extensions(name)
# Identify any braces
braces = name[1:].find("{{")
if braces < 0:
braces = len(name)

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

@@ -92,7 +92,7 @@ def osx_shutdown():
def osx_standby():
"""Make macOS system sleep, returns after wakeup"""
try:
subprocess.call(["osascript", "-e", 'tell app "System Events" to sleep'])
subprocess.call(["pmset", "sleepnow"])
time.sleep(10)
except:
logging.error(T("Failed to standby system"))

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"),
@@ -268,8 +265,8 @@ SKIN_TEXT = {
"explain-host": TT("Host SABnzbd should listen on."),
"opt-port": TT("SABnzbd Port"),
"explain-port": TT("Port SABnzbd should listen on."),
"opt-web_dir": TT("Web Interface"),
"explain-web_dir": TT("Choose a skin."),
"opt-web_dir": TT("Web Interface Theme"),
"explain-web_dir": TT("Choose a theme."),
"opt-web_username": TT("SABnzbd Username"),
"explain-web_username": TT("Optional authentication username."),
"opt-web_password": TT("SABnzbd Password"),
@@ -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."),
@@ -571,8 +567,6 @@ SKIN_TEXT = {
"button-clrServer": TT("Clear Counters"), #: Button: Clear server's byte counters
"srv-testing": TT("Testing server details..."),
"srv-bandwidth": TT("Bandwidth"),
"srv-send_group": TT("Send Group"),
"srv-explain-send_group": TT("Send group command before requesting articles."),
"srv-notes": TT("Personal notes"),
"srv-article-availability": TT("Article availability"),
"srv-articles-tried": TT(
@@ -835,6 +829,9 @@ SKIN_TEXT = {
"Glitter-top": TT("Top"),
"Glitter-bottom": TT("Bottom"),
"Glitter-retryJob": TT("Retry"),
"Glitter-retryNoChecks": TT(
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be completed' are disabled."
),
"Glitter-more": TT("More"),
"Glitter-scriptLog": TT("View Script Log"),
"Glitter-clearHistory": TT("Purge History"),

View File

@@ -678,7 +678,7 @@ def guess_what(name: str) -> MatchesDict:
or (
name.lower().startswith(("http://", "https://"))
and name.lower().endswith(".nzb")
and guess.get("container" == "nzb")
and guess.get("container") == "nzb"
) # URL to an nzb file, can happen when pre-queue script rejects a job
):
guess["type"] = "unknown"

View File

@@ -34,7 +34,7 @@ import base64
from typing import Tuple, Optional, Union, List, Dict, Any
import sabnzbd
from sabnzbd.constants import DEF_TIMEOUT, FUTURE_Q_FOLDER, VALID_NZB_FILES, Status, VALID_ARCHIVES
from sabnzbd.constants import DEF_TIMEOUT, FUTURE_Q_FOLDER, VALID_NZB_FILES, Status, VALID_ARCHIVES, DuplicateStatus
import sabnzbd.misc as misc
import sabnzbd.filesystem
import sabnzbd.cfg as cfg
@@ -243,6 +243,10 @@ class URLGrabber(Thread):
# Check if nzb file
if sabnzbd.filesystem.get_ext(filename) in VALID_ARCHIVES + VALID_NZB_FILES:
# If the user resumed a duplicate detected URL, skip the check
dup_check = future_nzo.duplicate != DuplicateStatus.DUPLICATE_IGNORED
# Add the new job to the queue
res, _ = sabnzbd.nzbparser.add_nzbfile(
path,
pp=future_nzo.pp,
@@ -255,6 +259,7 @@ class URLGrabber(Thread):
keep=False,
password=future_nzo.password,
nzo_id=future_nzo.nzo_id,
dup_check=dup_check,
)
if res is AddNzbFileResult.RETRY:
logging.info("Incomplete NZB, retry after 5 min %s", url)

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"):
@@ -29,7 +29,7 @@ def generate_key(key_size=2048, output_file="key.pem"):
private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption()
encryption_algorithm=serialization.NoEncryption(),
# encryption_algorithm=serialization.BestAvailableEncryption(b"passphrase")
)
)
@@ -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

@@ -1,56 +1,9 @@
import platform
import subprocess
import locale
import logging
import time
from .pystone import pystones
def getcpu():
# find the CPU name (which needs a different method per OS), and return it
# If none found, return platform.platform().
cputype = None
try:
if platform.system() == "Windows":
import winreg
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Hardware\Description\System\CentralProcessor\0")
cputype = winreg.QueryValueEx(key, "ProcessorNameString")[0]
winreg.CloseKey(key)
elif platform.system() == "Darwin":
cputype = subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"]).strip()
elif platform.system() == "Linux":
with open("/proc/cpuinfo") as fp:
for myline in fp.readlines():
if myline.startswith("model name"):
# Typical line:
# model name : Intel(R) Xeon(R) CPU E5335 @ 2.00GHz
cputype = myline.split(":", 1)[1] # get everything after the first ":"
break # we're done
cputype = cputype.decode(locale.getpreferredencoding())
except:
# An exception, maybe due to a subprocess call gone wrong
pass
if cputype:
# OK, found. Remove unwanted spaces:
cputype = " ".join(cputype.split())
else:
try:
# Not found, so let's fall back to platform()
cputype = platform.platform()
except:
# Can fail on special platforms (like Snapcraft or embedded)
pass
logging.debug("CPU model = %s", cputype)
return cputype
def getpystone():
# Start calculation
maxpystone = 0
@@ -69,4 +22,3 @@ def getpystone():
if __name__ == "__main__":
print(getpystone())
print(getcpu())

View File

@@ -241,7 +241,6 @@ kDNSServiceInterfaceIndexLocalOnly = -1
class BonjourError(Exception):
"""
Exception representing an error returned by the DNS-SD library.
@@ -321,7 +320,6 @@ _DNSServiceErrorType = ctypes.c_int32
class DNSRecordRef(ctypes.c_void_p):
"""
A DNSRecordRef pointer. DO NOT CREATE INSTANCES OF THIS CLASS!
@@ -367,7 +365,6 @@ class _DNSRecordRef_or_null(DNSRecordRef):
class DNSServiceRef(DNSRecordRef):
"""
A DNSServiceRef pointer. DO NOT CREATE INSTANCES OF THIS CLASS!
@@ -1740,7 +1737,6 @@ def DNSServiceConstructFullName(service=None, regtype=_NO_DEFAULT, domain=_NO_DE
class TXTRecord(object):
"""
A mapping representing a DNS TXT record. The TXT record's

View File

@@ -20,9 +20,8 @@ sabnzbd.utils.servertests - Debugging server connections. Currently only NNTP se
"""
import socket
import sys
from sabnzbd.constants import DEF_TIMEOUT
from sabnzbd.constants import DEF_TEST_TIMEOUT
from sabnzbd.newswrapper import NewsWrapper, NNTPPermanentError
from sabnzbd.downloader import Server, clues_login, clues_too_many
from sabnzbd.config import get_servers
@@ -37,7 +36,7 @@ def test_nntp_server_dict(kwargs):
password = kwargs.get("password", "").strip()
server = kwargs.get("server", "").strip()
connections = int_conv(kwargs.get("connections", 0))
timeout = int_conv(kwargs.get("timeout", DEF_TIMEOUT))
timeout = int_conv(kwargs.get("timeout", DEF_TEST_TIMEOUT))
ssl = int_conv(kwargs.get("ssl", 0))
ssl_verify = int_conv(kwargs.get("ssl_verify", 1))
ssl_ciphers = kwargs.get("ssl_ciphers", "").strip()
@@ -56,7 +55,7 @@ def test_nntp_server_dict(kwargs):
if not timeout:
# Lower value during new server testing
timeout = 10
timeout = DEF_TEST_TIMEOUT
if "*" in password and not password.strip("*"):
# If the password is masked, try retrieving it from the config
@@ -78,7 +77,6 @@ def test_nntp_server_dict(kwargs):
use_ssl=ssl,
ssl_verify=ssl_verify,
ssl_ciphers=ssl_ciphers,
send_group=False,
username=username,
password=password,
)

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"
__version__ = "4.2.3RC2"
__baseline__ = "unknown"

Some files were not shown because too many files have changed in this diff Show More