mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-02-07 14:22:33 -05:00
Compare commits
8 Commits
5.0.0Beta1
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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
|
||||
|
||||
@@ -4,7 +4,7 @@ pyinstaller==6.18.0
|
||||
packaging==26.0
|
||||
pyinstaller-hooks-contrib==2026.0
|
||||
altgraph==0.17.5
|
||||
wrapt==2.0.1
|
||||
wrapt==2.1.1
|
||||
setuptools==80.10.2
|
||||
|
||||
# For the Windows build
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -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'
|
||||
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -899,31 +899,23 @@ class NzbQueue:
|
||||
nzo.increase_bad_articles_counter("missing_articles")
|
||||
sabnzbd.NzbQueue.register_article(article, success=False)
|
||||
|
||||
logging.info("Resetting bad trylist for file %s in job %s", nzf.filename, nzo.final_name)
|
||||
nzf.reset_try_list()
|
||||
if not nzf.assembled and not nzf.articles:
|
||||
logging.debug("Not assembled but no remaining articles for file %s", nzf.filename)
|
||||
if not nzf.assembled and (next_article := nzf.assembler_next_article):
|
||||
logging.debug(
|
||||
"Next article to assemble for file %s is %s, decoded: %s, on_disk: %s, decoded_size: %s",
|
||||
"Next article to assemble for file %s is %s, decoded: %s, on_disk: %s, decoded_size: %s, has_fetcher: %s, tries: %s",
|
||||
nzf.filename,
|
||||
next_article,
|
||||
next_article.decoded,
|
||||
next_article.on_disk,
|
||||
next_article.decoded_size,
|
||||
next_article.fetcher is not None,
|
||||
next_article.tries,
|
||||
)
|
||||
|
||||
for article in nzo.first_articles.copy():
|
||||
logging.debug(
|
||||
"First article for file %s is %s, decoded: %s, on_disk: %s, decoded_size: %s, has_fetcher: %s, tries: %s",
|
||||
article.nzf.filename,
|
||||
article,
|
||||
article.decoded,
|
||||
article.on_disk,
|
||||
article.decoded_size,
|
||||
article.fetcher is not None,
|
||||
article.tries,
|
||||
)
|
||||
if not next_article.decoded and not next_article.on_disk:
|
||||
next_article.allow_new_fetcher()
|
||||
logging.info("Resetting bad trylist for file %s in job %s", nzf.filename, nzo.final_name)
|
||||
nzf.reset_try_list()
|
||||
|
||||
# Reset main try list, minimal performance impact
|
||||
logging.info("Resetting bad trylist for job %s", nzo.final_name)
|
||||
|
||||
@@ -57,8 +57,8 @@ class FakeNNTPServer:
|
||||
conn, addr = self.server_socket.accept()
|
||||
self.connections.append(conn)
|
||||
threading.Thread(target=self._handle_client, args=(conn,), daemon=True).start()
|
||||
except socket.timeout:
|
||||
continue
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def _handle_client(self, conn):
|
||||
try:
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user