Compare commits

...

32 Commits

Author SHA1 Message Date
Safihre
07c5c40d58 Update text files for 5.0.0Beta2 2026-02-27 14:16:03 +01:00
Safihre
ba7446daac Prevent logging sensitive information in the URLs called by Apprise
Closes #3328
2026-02-27 14:10:56 +01:00
mnightingale
e8791f9c7b Leave the log header unsanitized (#3324) 2026-02-23 10:01:02 +01:00
SABnzbd Automation
aa64cd8e0a Update translatable texts
[skip ci]
2026-02-23 09:00:50 +00:00
mnightingale
ea84aefaf4 Fix queuing requests on reset connections (#3332) 2026-02-23 09:59:49 +01:00
mnightingale
9b1b503ce6 Allow direct write usage without the cache (#3326) 2026-02-20 09:06:30 +00:00
mnightingale
bc4c4bbcfa Fix adding articles to cache for finished jobs (#3325) 2026-02-19 22:16:08 +00:00
mnightingale
33072154d2 Reduce assembler trigger (#3322)
* Tweak assembler trigger

* Inline assembler_trigger calculation
2026-02-17 15:04:09 +00:00
SABnzbd Automation
f9c5b8fc41 Update translatable texts
[skip ci]
2026-02-17 15:03:25 +00:00
mnightingale
4f3ee059f9 Increase test file size for sparse support detection (#3319)
* Increase test file size for sparse support detection

* Document why testing with a 1 MiB file
2026-02-17 15:02:44 +00:00
mnightingale
d7b7377b42 Upgrade sabctools to 9.3.2 (#3323) 2026-02-16 21:24:02 +00:00
thezoggy
787c51fa8e 7zip 26.0 + par2cmdline-turbo 1.4.0 (#3321) 2026-02-16 09:25:29 +00:00
SABnzbd Automation
8bc81bc4ce Update translatable texts
[skip ci]
2026-02-16 02:23:59 +00:00
renovate[bot]
4a8f7ef98c Update all dependencies (#3320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 02:23:20 +00:00
mnightingale
aa87657552 Prevent enqueuing requests while force_disconnect is set (#3318) 2026-02-12 08:48:51 +01:00
Safihre
4917885ea1 Simplify black formatting validation step 2026-02-10 13:22:45 +01:00
mnightingale
8c7a70b6c4 Add socket for read/write if next request or partial write (#3313)
* Add for read/write if next request or partial write

* Refactor to also call on partial write but no full response path and add comments
2026-02-10 10:18:10 +01:00
mnightingale
7f8d7d80d2 Make conditional_cache exception safe and exclude force from the key (#3317) 2026-02-09 21:27:15 +01:00
SABnzbd Automation
40ea82a8bb Update translatable texts
[skip ci]
2026-02-09 15:45:29 +00:00
Safihre
2122503762 Update copyright to 2026 2026-02-09 16:44:38 +01:00
mnightingale
507edc3ddf Revert allow_new_fetcher for stuck jobs (#3314) 2026-02-09 09:07:14 +01:00
renovate[bot]
920e23e11e Update dependency setuptools to v82 (#3315)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 02:20:51 +00:00
SABnzbd Automation
e898f92f49 Update translatable texts
[skip ci]
2026-02-08 15:26:45 +00:00
mnightingale
9a37306ce5 Only increment next index if expected (#3312) 2026-02-08 16:26:03 +01:00
mnightingale
47e71912d5 Ignore all OSError from FakeNNTPServer (#3309) 2026-02-06 18:18:18 +01:00
mnightingale
b90be6e35a Allow new fetcher for stuck articles (#3308) 2026-02-06 18:17:32 +01:00
mnightingale
4e7a70c5e7 Fix server retention not always applied (#3304)
* Fix server retention not always applied

* Comment why safe to discard remaining queue and not check retention for each
2026-02-06 13:04:16 +01:00
Safihre
9fc2215fc8 Skip orjson on Python 3.9 2026-02-06 12:01:31 +01:00
Safihre
cba63c0c3e No longer specify cryptography version
To support win_arm64 again
See https://github.com/pyca/cryptography/pull/14216
2026-02-06 12:01:30 +01:00
renovate[bot]
2b62846122 Update all dependencies 2026-02-05 19:13:22 +00:00
thezoggy
cb5030d152 bump mac to build with python 3.14.3 (#3307) 2026-02-05 20:12:49 +01:00
thezoggy
499e9639e9 unrar 7.20 (#3306) 2026-02-05 20:12:23 +01:00
181 changed files with 356 additions and 295 deletions

View File

@@ -32,10 +32,11 @@ jobs:
cache-dependency-path: "**/requirements.txt"
- name: Install Python dependencies
# Without dependencies to make sure everything is covered in the requirements.txt
# Special cryptography is due to https://github.com/pyca/cryptography/pull/14216
run: |
python --version
python -m pip install --upgrade pip wheel
pip install --upgrade -r requirements.txt --no-dependencies
pip install --upgrade -r requirements.txt --no-dependencies --only-binary=cryptography
pip install --upgrade -r builder/requirements.txt --no-dependencies
- name: Build Windows standalone binary
id: windows_binary
@@ -101,7 +102,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.14.2"
PYTHON_VERSION: "3.14.3"
MACOSX_DEPLOYMENT_TARGET: "10.15"
# We need to force compile for universal2 support
CFLAGS: -arch x86_64 -arch arm64

View File

@@ -8,21 +8,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Black Code Formatter
uses: lgeiger/black-action@master
with:
# Tools folder excluded for now due to https://github.com/psf/black/issues/4963
args: >
SABnzbd.py
sabnzbd
scripts
builder
builder/SABnzbd.spec
tests
--line-length=120
--target-version=py39
--check
--diff
- run: pip install black
# Tools folder excluded for now due to https://github.com/psf/black/issues/4963
- run: >
black
SABnzbd.py
sabnzbd
scripts
builder
builder/SABnzbd.spec
tests
--line-length=120
--target-version=py39
--check
--diff
test:
name: Test ${{ matrix.name }} - Python ${{ matrix.python-version }}

View File

@@ -1,5 +1,5 @@
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
The SABnzbd-Team is:

View File

@@ -4,7 +4,7 @@
0) LICENSE
-------------------------------------------------------------------------------
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License

View File

@@ -1,4 +1,4 @@
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
Release Notes - SABnzbd 5.0.0 Beta 1
Release Notes - SABnzbd 5.0.0 Beta 2
=========================================================
This is the first beta release of version 5.0.
This is the second beta release of version 5.0.
Due to several fundamental changes we decided to
not just call this 4.6 but promote it to 5.0!
@@ -22,6 +22,8 @@ not just call this 4.6 but promote it to 5.0!
* No longer show tracebacks in the browser, only in the logs.
* Dropped support for Python 3.8.
* Windows: Added Windows ARM (portable) release.
* Windows and macOS: Update Python to 3.14.3, Unrar to 7.20,
par2cmdline-turbo to 1.4 and 7zip to 26.00.
## Bug fixes since 4.5.0
@@ -56,4 +58,4 @@ It simplifies the process of downloading from Usenet dramatically, thanks to its
user interface and advanced built-in post-processing options that automatically verify, repair,
extract and clean up posts downloaded from Usenet.
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -239,7 +239,7 @@ def print_version():
print(("""
%s-%s
(C) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
(C) Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
SABnzbd comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. It is licensed under the

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,11 +1,11 @@
# Basic build requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
pyinstaller==6.18.0
pyinstaller==6.19.0
packaging==26.0
pyinstaller-hooks-contrib==2026.0
altgraph==0.17.5
wrapt==2.0.1
setuptools==80.10.2
wrapt==2.1.1
setuptools==82.0.0
# For the Windows build
pefile==2024.8.26; sys_platform == 'win32'

View File

@@ -96,7 +96,7 @@
<div class="colmask">
<div class="padding">
<h5 class="copyright">Copyright &copy; 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
<h5 class="copyright">Copyright &copy; 2007-2026 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
<p class="copyright"><small>$T('yourRights')</small></p>
</div>

View File

@@ -784,7 +784,7 @@
</tbody>
</table>
<hr/>
<p><small>Copyright &copy; 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
<p><small>Copyright &copy; 2007-2026 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
</div>
</div>
</div>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2022-2025 by The SABnzbd-Team (sabnzbd.org) -->
<!-- Copyright 2022-2026 by The SABnzbd-Team (sabnzbd.org) -->
<component type="desktop-application">
<id>org.sabnzbd.sabnzbd</id>
<metadata_license>MIT</metadata_license>

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\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

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
"MIME-Version: 1.0\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
"MIME-Version: 1.0\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2025\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\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"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
"MIME-Version: 1.0\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
"MIME-Version: 1.0\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
"MIME-Version: 1.0\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: mauron, 2025\n"
"Language-Team: Turkish (https://app.transifex.com/sabnzbd/teams/111101/tr/)\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
"MIME-Version: 1.0\n"

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Pavel C <quoing_transifex@mess.cz>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# C E <githubce@eiselt.ch>, 2020

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Ester Molla Aragones <moarages@gmail.com>, 2020

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,15 +1,15 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# ION, 2025
# Safihre <safihre@sabnzbd.org>, 2025
# ION, 2026
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
"Last-Translator: ION, 2026\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -146,7 +146,7 @@ msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Windows ARM version of SABnzbd is available from our Downloads page!"
msgstr ""
msgstr "גרסת Windows ARM של SABnzbd זמינה מדף ההורדות שלנו!"
#. Warning message
#: sabnzbd/__init__.py
@@ -3304,7 +3304,7 @@ msgstr "אפשר בדיקות מבוססות SFV"
#: sabnzbd/skintext.py
msgid ""
"If no par2 files are available, use sfv files (if present) to verify files"
msgstr ""
msgstr "אם קבצי par2 אינם זמינים, השתמש בקבצי SFV (אם קיימים) כדי לוודא קבצים"
#: sabnzbd/skintext.py
msgid "User script can flag job as failed"
@@ -3708,7 +3708,7 @@ msgstr "אפשר"
#: sabnzbd/skintext.py
msgid "Articles per request"
msgstr ""
msgstr "מאמרים לבקשה"
#: sabnzbd/skintext.py
msgid ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Rik Brouwer, 2022

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Henrique Moreno, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Eduard Baniceru <war4peace@gmail.com>, 2021

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.6.0\n"
"Project-Id-Version: SABnzbd-5.0.0\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: ST02, 2026\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Taylan Tatlı, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Kangwei Li <lkw20010211@gmail.com>, 2023

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
msgid ""
msgstr ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Pavel C <quoing_transifex@mess.cz>, 2022

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# HandyDandy04, 2024

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Ester Molla Aragones <moarages@gmail.com>, 2020

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Fred L <88com88@gmail.com>, 2024

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# ION, 2024

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Petter Ramme, 2024

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# mauron, 2025

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2025

View File

@@ -1,7 +1,7 @@
# Main requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
apprise==1.9.7
sabctools==9.3.1
sabctools==9.3.2
CT3==3.4.0.post5
cffi==2.0.0
pycparser # Version-less for Python 3.9 and below
@@ -33,12 +33,13 @@ rebulk==3.2.0
# Recent cryptography versions require Rust. If you run into issues compiling this
# SABnzbd will also work with older pre-Rust versions such as cryptography==3.3.2
cryptography==46.0.3
# Using older versions can have security implications!
cryptography>=3.0
# We recommend using "orjson" as it is 2x as fast as "ujson". However, it requires
# Rust so SABnzbd works just as well with "ujson" or the Python built in "json" module
ujson==5.11.0
orjson==3.11.5
orjson==3.11.7; python_version > '3.9'
# Windows system integration
pywin32==311; sys_platform == 'win32'
@@ -62,7 +63,7 @@ requests==2.32.5
requests-oauthlib==2.0.0
PyYAML==6.0.3
markdown # Version-less for Python 3.9 and below
markdown==3.10.1; python_version > '3.9'
markdown==3.10.2; python_version > '3.9'
paho-mqtt==1.6.1 # Pinned, newer versions don't work with AppRise yet
# Requests Requirements
@@ -71,7 +72,7 @@ idna==3.11
urllib3==2.6.3
certifi==2026.1.4
oauthlib==3.3.1
PyJWT==2.10.1
PyJWT==2.11.0
blinker==1.9.0
# Optional support for *nix tray icon.

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -29,7 +29,7 @@ import time
import getpass
import cherrypy
from threading import Thread
from typing import Optional, Any, Union
from typing import Optional, Any, Union, Generator
import sabctools
@@ -690,8 +690,11 @@ LOG_INI_HIDE_RE = re.compile(
LOG_HASH_RE = re.compile(rb"([a-zA-Z\d]{25})", re.I)
def _api_showlog(name: str, kwargs: dict[str, Union[str, list[str]]]) -> bytes:
def _api_showlog(name: str, kwargs: dict[str, Union[str, list[str]]]) -> Generator[bytes, Any, None]:
"""Fetch the INI and the log-data and add a message at the top"""
# Set headers
cherrypy.response.headers["Content-Type"] = "application/x-download;charset=utf-8"
cherrypy.response.headers["Content-Disposition"] = 'attachment;filename="sabnzbd.log"'
# Build header with version and environment info
header = "--------------------------------\n"
header += f"SABnzbd version: {sabnzbd.__version__}\n"
@@ -701,33 +704,37 @@ def _api_showlog(name: str, kwargs: dict[str, Union[str, list[str]]]) -> bytes:
header += "--------------------------------\n\n"
header += "The log includes a copy of your sabnzbd.ini with\nall usernames, passwords and API-keys removed."
header += "\n\n--------------------------------\n"
log_data = header.encode("utf-8")
if sabnzbd.LOGFILE and os.path.exists(sabnzbd.LOGFILE):
with open(sabnzbd.LOGFILE, "rb") as f:
log_data += f.read()
else:
log_data += b"\nFile log disabled or not found.\n\n"
with open(config.get_filename(), "rb") as f:
log_data += f.read()
# We need to remove all passwords/usernames/api-keys
log_data = LOG_JSON_RE.sub(b"'REMOVED': '<REMOVED>'", log_data)
log_data = LOG_INI_HIDE_RE.sub(b"\\1 = <REMOVED>", log_data)
log_data = LOG_HASH_RE.sub(b"<HASH>", log_data)
yield header.encode("utf-8")
# Try to replace the username
try:
cur_user_bytes = None
if cur_user := getpass.getuser():
log_data = log_data.replace(utob(cur_user), b"<USERNAME>")
cur_user_bytes = utob(cur_user)
except Exception:
pass
# Set headers
cherrypy.response.headers["Content-Type"] = "application/x-download;charset=utf-8"
cherrypy.response.headers["Content-Disposition"] = 'attachment;filename="sabnzbd.log"'
return log_data
def sanitize_line(line: bytes) -> bytes:
"""Apply regex substitutions to a single line to remove sensitive data"""
line = LOG_JSON_RE.sub(b"'REMOVED': '<REMOVED>'", line)
line = LOG_INI_HIDE_RE.sub(b"\\1 = <REMOVED>", line)
line = LOG_HASH_RE.sub(b"<HASH>", line)
if cur_user_bytes:
line = line.replace(cur_user_bytes, b"<USERNAME>")
return line
# Stream log file line by line
if sabnzbd.LOGFILE and os.path.exists(sabnzbd.LOGFILE):
with open(sabnzbd.LOGFILE, "rb") as f:
for line in f:
yield sanitize_line(line)
else:
yield b"\nFile log disabled or not found.\n\n"
# Stream config file line by line
with open(config.get_filename(), "rb") as f:
for line in f:
yield sanitize_line(line)
def _api_get_cats(name: str, kwargs: dict[str, Union[str, list[str]]]) -> bytes:

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -63,7 +63,7 @@ class ArticleCache(threading.Thread):
self.__cache_upper_limit = 4 * GIGI
def change_direct_write(self, direct_write: bool) -> None:
self.__direct_write = direct_write and self.__cache_limit > 1
self.__direct_write = direct_write
def stop(self):
self.shutdown = True
@@ -128,7 +128,6 @@ class ArticleCache(threading.Thread):
self.__non_contiguous_trigger = self.__cache_limit * ARTICLE_CACHE_NON_CONTIGUOUS_FLUSH_PERCENTAGE
if self.__cache_limit:
logging.debug("Article cache trigger:%s", to_units(self.__non_contiguous_trigger))
self.change_direct_write(cfg.direct_write())
@synchronized(ARTICLE_COUNTER_LOCK)
def reserve_space(self, data_size: int) -> bool:
@@ -153,12 +152,12 @@ class ArticleCache(threading.Thread):
def save_article(self, article: Article, data: bytearray):
"""Save article in cache, either memory or disk"""
nzo = article.nzf.nzo
# Skip if already post-processing or fully finished
if nzo.pp_or_finished:
return
# Register article for bookkeeping in case the job is deleted
with nzo.lock:
# Skip if already post-processing or fully finished, check inside lock to synchronize with purge_data
if nzo.pp_or_finished:
return
nzo.saved_articles.add(article)
if article.lowest_partnum and not (article.nzf.import_finished or article.nzf.filename_checked):
@@ -227,7 +226,7 @@ class ArticleCache(threading.Thread):
# Save data, but don't complain when destination folder is missing
# because this flush may come after completion of the NZO.
# Direct write to destination if cache is being used
if self.__cache_limit and self.__direct_write and sabnzbd.Assembler.assemble_article(article, data):
if self.__direct_write and sabnzbd.Assembler.assemble_article(article, data):
with article.nzf.nzo.lock:
article.nzf.nzo.saved_articles.discard(article)
return

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -45,13 +45,11 @@ from sabnzbd.filesystem import (
from sabnzbd.constants import (
Status,
GIGI,
ASSEMBLER_WRITE_THRESHOLD_FACTOR_APPEND,
ASSEMBLER_WRITE_THRESHOLD_FACTOR_DIRECT_WRITE,
ASSEMBLER_MAX_WRITE_THRESHOLD_DIRECT_WRITE,
SOFT_ASSEMBLER_QUEUE_LIMIT,
ASSEMBLER_DELAY_FACTOR_DIRECT_WRITE,
ARTICLE_CACHE_NON_CONTIGUOUS_FLUSH_PERCENTAGE,
ASSEMBLER_WRITE_INTERVAL,
ASSEMBLER_TRIGGER_PERCENTAGE,
)
import sabnzbd.cfg as cfg
from sabnzbd.nzb import NzbFile, NzbObject, Article
@@ -72,10 +70,8 @@ class Assembler(Thread):
self.max_queue_size: int = cfg.assembler_max_queue_size()
self.direct_write: bool = cfg.direct_write()
self.cache_limit: int = 0
# Contiguous bytes required to trigger append writes
self.append_trigger: int = 1
# Total bytes required to trigger direct-write assembles
self.direct_write_trigger: int = 1
# Total bytes required per file to trigger the assembler
self.assembler_trigger: int = 0
self.delay_trigger: int = 1
self.queue: queue.Queue[AssemblerTask] = queue.Queue()
self.queued_lock = threading.Lock()
@@ -91,25 +87,16 @@ class Assembler(Thread):
def new_limit(self, limit: int):
"""Called when cache limit changes"""
self.cache_limit = limit
self.append_trigger = max(1, int(limit * ASSEMBLER_WRITE_THRESHOLD_FACTOR_APPEND))
self.direct_write_trigger = max(
1,
min(
max(1, int(limit * ASSEMBLER_WRITE_THRESHOLD_FACTOR_DIRECT_WRITE)),
ASSEMBLER_MAX_WRITE_THRESHOLD_DIRECT_WRITE,
),
)
self.calculate_delay_trigger()
self.assembler_trigger = max(1, int(self.cache_limit * ASSEMBLER_TRIGGER_PERCENTAGE))
self.change_direct_write(cfg.direct_write())
logging.debug(
"Assembler trigger append=%s, direct=%s, delay=%s",
to_units(self.append_trigger),
to_units(self.direct_write_trigger),
"Assembler trigger=%s, delay=%s",
to_units(self.assembler_trigger),
to_units(self.delay_trigger),
)
def change_direct_write(self, direct_write: bool) -> None:
self.direct_write = direct_write and self.direct_write_trigger > 1
self.direct_write = direct_write
self.calculate_delay_trigger()
def calculate_delay_trigger(self):
@@ -124,7 +111,7 @@ class Assembler(Thread):
(
self.cache_limit * ARTICLE_CACHE_NON_CONTIGUOUS_FLUSH_PERCENTAGE
if self.direct_write
else min(self.append_trigger * self.max_queue_size, int(self.cache_limit * 0.5))
else min(self.assembler_trigger * self.max_queue_size, int(self.cache_limit * 0.5))
),
)
)
@@ -225,12 +212,16 @@ class Assembler(Thread):
return True
# Append
if not self.direct_write or nzf.type != "yenc":
return nzf.contiguous_ready_bytes() >= self.append_trigger
return (
next_ready
and ready_bytes >= self.assembler_trigger
and nzf.contiguous_ready_bytes() >= self.assembler_trigger
)
# Direct Write
if allow_non_contiguous:
return True
# Direct Write ready bytes trigger if next is also ready
if next_ready and ready_bytes >= self.direct_write_trigger:
if next_ready and ready_bytes >= self.assembler_trigger:
return True
return False
@@ -400,7 +391,8 @@ class Assembler(Thread):
offset += article.decoded_size
if not skipped:
with nzf.lock:
nzf.assembler_next_index = idx + 1
if nzf.assembler_next_index == idx:
nzf.assembler_next_index = idx + 1
continue
# stop if next piece not yet decoded

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -50,7 +50,7 @@ RENAMES_FILE = "__renames__"
ATTRIB_FILE = "SABnzbd_attrib"
REPAIR_REQUEST = "repair-all.sab"
SABCTOOLS_VERSION_REQUIRED = "9.3.1"
SABCTOOLS_VERSION_REQUIRED = "9.3.2"
DB_HISTORY_VERSION = 1
DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
@@ -100,9 +100,7 @@ CONFIG_BACKUP_HTTPS = { # "basename": "associated setting"
DEF_MAX_ASSEMBLER_QUEUE = 12
SOFT_ASSEMBLER_QUEUE_LIMIT = 0.5
# Percentage of cache to use before adding file to assembler
ASSEMBLER_WRITE_THRESHOLD_FACTOR_APPEND = 0.05
ASSEMBLER_WRITE_THRESHOLD_FACTOR_DIRECT_WRITE = 0.75
ASSEMBLER_MAX_WRITE_THRESHOLD_DIRECT_WRITE = int(1 * GIGI)
ASSEMBLER_TRIGGER_PERCENTAGE = 0.05
ASSEMBLER_DELAY_FACTOR_DIRECT_WRITE = 1.5
ASSEMBLER_WRITE_INTERVAL = 5.0
NNTP_BUFFER_SIZE = int(256 * KIBI)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -86,6 +86,9 @@ def conditional_cache(cache_time: int):
def wrapper(*args, **kwargs):
current_time = time.time()
# Exclude force from the cache key
force = kwargs.pop("force", False)
# Create cache key using functools._make_key
try:
key = functools._make_key(args, kwargs, typed=False)
@@ -95,15 +98,16 @@ def conditional_cache(cache_time: int):
# If args/kwargs aren't hashable, skip caching entirely
return func(*args, **kwargs)
# Allow force kward to skip cache
if not kwargs.get("force"):
# Allow force kwarg to skip cache
if not force:
# Check if we have a valid cached result
if key in cache:
cached_result, timestamp = cache[key]
if current_time - timestamp < cache_time:
entry = cache.get(key)
if entry is not None:
cached_result, expires_at = entry
if current_time < expires_at:
return cached_result
# Cache entry expired, remove it
del cache[key]
cache.pop(key, None)
# Call the original function
result = func(*args, **kwargs)
@@ -111,7 +115,7 @@ def conditional_cache(cache_time: int):
# Only cache non-empty results
# This excludes None, [], {}, "", 0, False, etc.
if result:
cache[key] = (result, current_time)
cache[key] = (result, current_time + cache_time)
return result

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -188,8 +188,12 @@ class Server:
if self.article_queue:
article = self.article_queue[0] if peek else self.article_queue.popleft()
# Mark expired articles as tried on this server
if not peek and self.retention and article.nzf.nzo.avg_stamp < time.time() - self.retention:
sabnzbd.Downloader.decode(article)
if self.retention and article.nzf.nzo.avg_stamp < time.time() - self.retention:
if not peek:
sabnzbd.Downloader.decode(article)
# sabnzbd.NzbQueue.get_articles stops after each nzo with articles.
# As a result, if one article is out of retention, all remaining
# entries in article_queue will also be out of retention.
while self.article_queue:
sabnzbd.Downloader.decode(self.article_queue.pop())
else:

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -54,6 +54,7 @@ from sabnzbd.constants import (
IGNORED_FILES_AND_FOLDERS,
DEF_LOG_FILE,
DEX_FILE_EXTENSION_MAX,
MEBI,
)
from sabnzbd.encoding import correct_unknown_encoding, utob, limit_encoded_length
import rarfile
@@ -1426,10 +1427,17 @@ def is_sparse(path: str) -> bool:
def is_sparse_supported(check_dir: str) -> bool:
"""Check if a directory supports sparse files"""
"""
Check if a directory supports sparse files.
A 1 MiB sparse file is created because some filesystems allocate at
least one physical block even for sparse files. Using a size that spans
many 512-byte blocks ensures we can reliably detect whether fewer
blocks than the logical size were actually allocated.
"""
sparse_file = tempfile.NamedTemporaryFile(dir=check_dir, delete=False)
try:
sabctools.sparse(sparse_file.fileno(), 64)
sabctools.sparse(sparse_file.fileno(), int(MEBI))
sparse_file.close()
return is_sparse(sparse_file.name)
finally:

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,6 +1,6 @@
#!/usr/bin/python3 -OO
# -*- coding: utf-8 -*-
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

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