mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-02-27 20:18:52 -05:00
Compare commits
32 Commits
5.0.0Beta1
...
5.0.0Beta2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07c5c40d58 | ||
|
|
ba7446daac | ||
|
|
e8791f9c7b | ||
|
|
aa64cd8e0a | ||
|
|
ea84aefaf4 | ||
|
|
9b1b503ce6 | ||
|
|
bc4c4bbcfa | ||
|
|
33072154d2 | ||
|
|
f9c5b8fc41 | ||
|
|
4f3ee059f9 | ||
|
|
d7b7377b42 | ||
|
|
787c51fa8e | ||
|
|
8bc81bc4ce | ||
|
|
4a8f7ef98c | ||
|
|
aa87657552 | ||
|
|
4917885ea1 | ||
|
|
8c7a70b6c4 | ||
|
|
7f8d7d80d2 | ||
|
|
40ea82a8bb | ||
|
|
2122503762 | ||
|
|
507edc3ddf | ||
|
|
920e23e11e | ||
|
|
e898f92f49 | ||
|
|
9a37306ce5 | ||
|
|
47e71912d5 | ||
|
|
b90be6e35a | ||
|
|
4e7a70c5e7 | ||
|
|
9fc2215fc8 | ||
|
|
cba63c0c3e | ||
|
|
2b62846122 | ||
|
|
cb5030d152 | ||
|
|
499e9639e9 |
5
.github/workflows/build_release.yml
vendored
5
.github/workflows/build_release.yml
vendored
@@ -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
|
||||
|
||||
29
.github/workflows/integration_testing.yml
vendored
29
.github/workflows/integration_testing.yml
vendored
@@ -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 }}
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding">
|
||||
<h5 class="copyright">Copyright © 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
|
||||
<h5 class="copyright">Copyright © 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>
|
||||
|
||||
|
||||
@@ -784,7 +784,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p><small>Copyright © 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
|
||||
<p><small>Copyright © 2007-2026 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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>
|
||||
|
||||
BIN
macos/7zip/7zz
BIN
macos/7zip/7zz
Binary file not shown.
BIN
macos/par2/par2
BIN
macos/par2/par2
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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 ""
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user