Compare commits

...

57 Commits
4.2.1 ... 4.2.x

Author SHA1 Message Date
Safihre
fcb3d01194 Correct input placeholder styling in Night themes 2024-03-04 09:57:51 +01:00
Safihre
af0b53990c Update text files for 4.2.3RC3 2024-03-04 08:46:42 +01:00
Safihre
e3861954ba Support NNTP code 220 after ARTICLE request
Closes #2817
2024-03-02 21:40:56 +01:00
Safihre
006dd8dc77 Do not log NNTP data in unknown status code warning
See #2817
2024-03-02 21:23:25 +01:00
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
99 changed files with 5627 additions and 556 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,32 @@
Release Notes - SABnzbd 4.2.1
Release Notes - SABnzbd 4.2.3 Release Candidate 3
=========================================================
This is a bug-fix release of SABnzbd 4.2.0.
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 would result in timeouts.
This specifically affects Giganews and its resellers.
* 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:

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,9 +29,7 @@
</tr>
<tr>
<th scope="row">OpenSSL:</th>
<td>
$ssl_version
</td>
<td>$ssl_version</td>
</tr>
<!--#if not $windows and not $macos#-->
<tr>
@@ -81,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#-->

View File

@@ -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" />
@@ -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,
@@ -287,18 +288,9 @@ col2 h3 a,
fill: #555555;
}
/* Placeholders - Will not work if grouped! */
::-webkit-input-placeholder {
color: #EBEBEB !important;
}
::-moz-placeholder {
color: #EBEBEB !important;
opacity: 1 !important;
}
:-ms-input-placeholder {
::placeholder {
color: #EBEBEB !important;
opacity: 0.5;
}
.tooltip-inner {

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,
@@ -266,16 +272,7 @@ button:focus {
outline: initial;
}
/* Placeholders - Will not work if grouped! */
::-webkit-input-placeholder {
color: #EBEBEB !important;
}
::-moz-placeholder {
color: #EBEBEB !important;
opacity: 1 !important;
}
:-ms-input-placeholder {
color: #EBEBEB !important;
::placeholder {
color: #EBEBEB !important;
opacity: 0.5 !important;
}

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"
@@ -2466,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
@@ -4081,6 +4081,10 @@ msgstr ""
msgid "Fetch"
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr ""
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr ""
@@ -4185,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

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2558,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
@@ -4276,6 +4276,10 @@ msgstr ""
msgid "Fetch"
msgstr ""
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Webové rozhraní"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr ""
@@ -4380,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2599,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"
@@ -4374,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"
@@ -4478,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

@@ -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.0\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"
@@ -303,7 +304,7 @@ msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgstr "Netzwerkpfad \"%s\" ist hier nicht erlaubt"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -786,6 +787,8 @@ msgstr "Zurück"
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"
@@ -2176,7 +2179,7 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgstr "Echtzeit Chat"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2632,6 +2635,8 @@ 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"
@@ -2679,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"
@@ -3239,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"
@@ -3262,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
@@ -3359,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"
@@ -4542,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"
@@ -4646,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"
@@ -4700,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

@@ -8,7 +8,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2659,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"
@@ -4471,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"
@@ -4575,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2595,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"
@@ -4382,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"
@@ -4486,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

@@ -3,13 +3,13 @@
#
# 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.0\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"
@@ -302,7 +302,7 @@ msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgstr "Le chemin réseau \"%s\" ne devrait pas être utilisé ici"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -781,6 +781,8 @@ msgstr "Retour"
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"
@@ -2673,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
@@ -4543,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"
@@ -4647,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

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2606,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"
@@ -4392,6 +4392,10 @@ msgstr "אזהרה:"
msgid "Fetch"
msgstr "משוך"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "ממשק רשת"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "קצב רענון"
@@ -4496,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2589,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"
@@ -4354,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"
@@ -4458,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

@@ -4,13 +4,13 @@
# 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.0\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"
@@ -295,7 +295,7 @@ msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgstr "We raden af hier de netwerk-locatie \"%s\" te gebruiken"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -778,6 +778,8 @@ msgstr "Terug"
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"
@@ -2655,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"
@@ -4502,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"
@@ -4606,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2594,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"
@@ -4363,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"
@@ -4467,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

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2608,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"
@@ -4377,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"
@@ -4481,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

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2627,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"
@@ -4394,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"
@@ -4498,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2591,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"
@@ -4361,6 +4361,10 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ"
msgid "Fetch"
msgstr "Загрузить"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб-интерфейс"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Частота обновления"
@@ -4465,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2583,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"
@@ -4341,6 +4341,10 @@ msgstr "ПАЖЊА:"
msgid "Fetch"
msgstr "Преузми"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Веб интерфејс"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "Брзина освежавања"
@@ -4445,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

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2591,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"
@@ -4353,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"
@@ -4457,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

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\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"
@@ -2571,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"
@@ -4293,6 +4293,10 @@ msgstr "警告:"
msgid "Fetch"
msgstr "装取"
#: sabnzbd/skintext.py
msgid "Web Interface"
msgstr "Web 界面"
#: sabnzbd/skintext.py
msgid "Refresh rate"
msgstr "刷新频率"
@@ -4397,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

@@ -657,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)

View File

@@ -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,66 +50,69 @@ 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, TypeError):
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;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN series TEXT;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN md5sum TEXT;", save=True)
)
if version < 2:
_ = self.execute("PRAGMA user_version = 2;", save=True) and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;", save=True
)
if version < 3:
# Transfer data to new column (requires WHERE-hack), original column should be removed later
_ = (
self.execute("PRAGMA user_version = 3;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN duplicate_key TEXT;", save=True)
and self.execute("UPDATE history SET duplicate_key = series WHERE 1 = 1;", save=True)
)
# 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 (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])
@@ -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
@@ -178,10 +183,9 @@ class HistoryDB:
"password" TEXT,
"duplicate_key" TEXT
)
""",
save=True,
"""
)
self.execute("PRAGMA user_version = 3;", save=True)
self.execute("PRAGMA user_version = 3;")
def close(self):
"""Close database connection"""
@@ -196,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)"""
@@ -215,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"""
@@ -228,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):
@@ -247,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?
@@ -261,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):
@@ -274,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

@@ -209,7 +209,7 @@ def decode_uu(article: Article, raw_data: bytes) -> bytes:
"""Try to uu-decode an article. The raw_data may or may not contain headers.
If there are headers, they will be separated from the body by at least one
empty line. In case of no headers, the first line seems to always be the nntp
response code (222) directly followed by the msg body."""
response code (220/222) directly followed by the msg body."""
if not raw_data:
logging.debug("No data to decode")
raise BadUu
@@ -232,7 +232,7 @@ def decode_uu(article: Article, raw_data: bytes) -> bytes:
uu_start = raw_data[:limit].index(b"") + 1
except ValueError:
# No empty line, look for a response code instead
if raw_data[0].startswith(b"222 "):
if raw_data[0].startswith(b"220 ") or raw_data[0].startswith(b"222 "):
uu_start = 1
else:
# Invalid data?

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
@@ -331,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:
@@ -358,7 +346,6 @@ class Downloader(Thread):
ssl,
ssl_verify,
ssl_ciphers,
send_group,
username,
password,
required,
@@ -742,7 +729,9 @@ class Downloader(Thread):
time.sleep(0.01)
sabnzbd.BPSMeter.update()
if nw.status_code != 222 and not done:
# Response code depends on request command:
# # 220 = ARTICLE, 222 = BODY
if nw.status_code not in (220, 222) and not done:
if not nw.connected or nw.status_code == 480:
if not self.__finish_connect_nw(nw):
return
@@ -754,13 +743,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)",
@@ -783,6 +766,17 @@ 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"),
nw.thrdnum,
nw.server.host,
nw.status_code,
article.article,
)
done = True
nw.reset_data_buffer()
if done:
# Successful data, clear "bad" counter
server.bad_cons = 0
@@ -975,16 +969,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

View File

@@ -141,6 +141,7 @@ def public_ip(family=socket.AF_UNSPEC):
)
return None
# 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
@@ -161,10 +162,14 @@ def local_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_ipv6():
return public_ip(family=socket.AF_INET6)
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

@@ -50,9 +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 (
@@ -69,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,
@@ -81,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 (
@@ -430,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
@@ -1144,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
@@ -1162,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:

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
@@ -381,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)
@@ -402,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])
@@ -482,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
@@ -739,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()

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
@@ -390,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

@@ -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

@@ -265,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"),
@@ -567,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(
@@ -831,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

@@ -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")
)
)

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.1"
__version__ = "4.2.3RC3"
__baseline__ = "unknown"

View File

@@ -1194,16 +1194,25 @@ class TestUnwantedExtensions:
assert filesystem.has_unwanted_extension(filename) is False
class TestDirectoryWriting:
# very basic test of directory_is_writable()
# let's test on the tempdir provided by the OS:
class TestOtherFileSystemFunctions:
def test_directory_is_writable(self):
# verify directory is writable at all
# very basic test of directory_is_writable()
# let's test on the tempdir provided by the OS:
assert filesystem.directory_is_writable(tempfile.gettempdir())
class FilesystemCapabilities:
def test_filesystem_capabilities(self):
# test the filesystem is capable of long and unicode filenames
# any modern filesystem (ext3, ext4, ntfs, modern FAT) should succeed
assert filesystem.check_filesystem_capabilities(tempfile.gettempdir())
@pytest.mark.parametrize(
"name, ext_to_remove, output",
[
("Test.nzb", (".nzb",), "Test"),
("Test.nzb.nzb.nzb.nzb.nzb", (".nzb",), "Test"),
("Test.not", (".nzb",), "Test.not"),
("No.par2.Test.par2.nzb", (".nzb", ".par2"), "No.par2.Test"),
],
)
def test_strip_extensions(self, name, ext_to_remove, output):
assert filesystem.strip_extensions(name, ext_to_remove) == output

View File

@@ -769,7 +769,10 @@ class TestQueueApi(ApiTestFunctions):
("my_scripted_script_.py", True, True),
("유닉스.py", True, True),
pytest.param(
"유닉스.sh", True, True, marks=pytest.mark.skipif(sys.platform.startswith("win"), reason="Not for Windows")
"유닉스.sh",
True,
True,
marks=pytest.mark.skipif(sys.platform.startswith("win"), reason="Not for Windows"),
),
pytest.param(
"لغة برمجة نصية",

View File

@@ -123,17 +123,21 @@ class TestNZBStuffHelpers:
("multiple_pw{{first-pw}}_{{second-pw}}", "multiple_pw", "first-pw}}_{{second-pw"), # Greed is Good
("デビアン", "デビアン", None), # Unicode
("Gentoo_Hobby_Edition {{secret}}", "Gentoo_Hobby_Edition", "secret"), # Space between name and password
("Test {{secret}}.nzb", "Test", "secret"),
("Mandrake{{top{{secret}}", "Mandrake", "top{{secret"), # Double opening {{
("Красная}}{{Шляпа}}", "Красная}}", "Шляпа"), # Double closing }}
("{{Jobname{{PassWord}}", "{{Jobname", "PassWord"), # {{ at start
("Hello/kITTY", "Hello", "kITTY"), # Notation with slash
("Hello/kITTY.nzb", "Hello", "kITTY"), # Notation with slash and extension
("/Jobname", "/Jobname", None), # Slash at start
("Jobname/Top{{Secret}}", "Jobname", "Top{{Secret}}"), # Slash with braces
("Jobname / Top{{Secret}}", "Jobname", "Top{{Secret}}"), # Slash with braces and extra spaces
("Jobname / Top{{Secret}}.nzb", "Jobname", "Top{{Secret}}"),
("לינוקס/معلومات سرية", "לינוקס", "معلومات سرية"), # LTR with slash
("לינוקס{{معلومات سرية}}", "לינוקס", "معلومات سرية"), # LTR with brackets
("thư điện tử password=mật_khẩu", "thư điện tử", "mật_khẩu"), # Password= notation
("password=PartOfTheJobname", "password=PartOfTheJobname", None), # Password= at the start
("Job password=Test.par2", "Job", "Test"), # Password= including extension
("Job}}Name{{FTW", "Job}}Name{{FTW", None), # Both {{ and }} present but incorrect order (no password)
("./Text", "./Text", None), # Name would end up empty after the function strips the dot
],
@@ -141,22 +145,23 @@ class TestNZBStuffHelpers:
def test_scan_password(self, argument, name, password):
assert nzbstuff.scan_password(argument) == (name, password)
def test_create_work_name(self):
@pytest.mark.parametrize(
"file_name, clean_file_name",
[
("my_awesome_nzb_file.pAr2.nZb", "my_awesome_nzb_file"),
("my_awesome_nzb_file.....pAr2.nZb", "my_awesome_nzb_file"),
("my_awesome_nzb_file....par2..", "my_awesome_nzb_file"),
(" my_awesome_nzb_file .pAr.nZb", "my_awesome_nzb_file"),
("with.extension.and.period.par2.", "with.extension.and.period"),
("nothing.in.here", "nothing.in.here"),
(" just.space ", "just.space"),
("http://test.par2 ", "http://test.par2"),
],
)
def test_create_work_name(self, file_name, clean_file_name):
# Only test stuff specific for create_work_name
# The sanitizing is already tested in tests for sanitize_foldername
file_names = {
"my_awesome_nzb_file.pAr2.nZb": "my_awesome_nzb_file",
"my_awesome_nzb_file.....pAr2.nZb": "my_awesome_nzb_file",
"my_awesome_nzb_file....par2..": "my_awesome_nzb_file",
" my_awesome_nzb_file .pAr.nZb": "my_awesome_nzb_file",
"with.extension.and.period.par2.": "with.extension.and.period",
"nothing.in.here": "nothing.in.here",
" just.space ": "just.space",
"http://test.par2 ": "http://test.par2",
}
for file_name, clean_file_name in file_names.items():
assert nzbstuff.create_work_name(file_name) == clean_file_name
assert nzbstuff.create_work_name(file_name) == clean_file_name
@pytest.mark.parametrize(
"subject, filename",
@@ -195,22 +200,20 @@ class TestNZBStuffHelpers:
("Bla [Now it's done.exe]", "Now it's done.exe"),
# If specified between [], the extension should be a valid one
("Bla [Now it's done.123nonsense]", "Bla [Now it's done.123nonsense]"),
# In anyone can improve the one below, that would be great!
('[PRiVATE]-[WtFnZb]-[00000.clpi]-[1/46] - "" yEnc 788 (1/1)', "00000.clpi"),
(
'[PRiVATE]-[WtFnZb]-[Video_(2001)_AC5.1_-RELEASE_[TAoE].mkv]-[1/23] - "" yEnc 1234567890 (1/23456)',
'[PRiVATE]-[WtFnZb]-[Video_(2001)_AC5.1_-RELEASE_[TAoE].mkv]-[1/23] - "" yEnc 1234567890 (1/23456)',
"Video_(2001)_AC5.1_-RELEASE_[TAoE].mkv",
),
(
"[PRiVATE]-[WtFnZb]-[219]-[1/series.name.s01e01.1080p.web.h264-group.mkv] - "
" yEnc (1/[PRiVATE] \\c2b510b594\\::686ea969999193.155368eba4965e56a8cd263382e012.f2712fdc::/97bd201cf931/) 1 (1/0)",
"series.name.s01e01.1080p.web.h264-group.mkv",
),
# This is not correct, but better than nothing
# In anyone can improve, that would be great!
(
"[PRiVATE]-[WtFnZb]-[/More.Bla.S02E01.1080p.WEB.h264-EDITH[eztv.re].mkv-WtF[nZb]/"
"More.Bla.S02E01.1080p.WEB.h264-EDITH.mkv]-[1/2] - &quot;&quot; yEnc 2990558544 (1/4173)",
"More.Bla.S02E01.1080p.WEB.h264",
'More.Bla.S02E01.1080p.WEB.h264-EDITH.mkv]-[1/2] - "" yEnc 2990558544 (1/4173)',
"More.Bla.S02E01.1080p.WEB.h264-EDITH[eztv.re].mkv",
),
],
)

View File

@@ -150,11 +150,11 @@ class TestPostProc:
"order": 0,
"pp": None,
"script": None,
"dir": os.path.join(
SAB_CACHE_DIR, ("category_dir_for_" + category + ("*" if not has_jobdir else ""))
)
if has_catdir
else None,
"dir": (
os.path.join(SAB_CACHE_DIR, ("category_dir_for_" + category + ("*" if not has_jobdir else "")))
if has_catdir
else None
),
"newzbin": "",
"priority": 0,
},