git: fba7d62c39c3 - main - news/sabnzbd: Update to 4.1.0

From: Fernando Apesteguía <fernape_at_FreeBSD.org>
Date: Thu, 28 Sep 2023 08:43:43 UTC
The branch main has been updated by fernape:

URL: https://cgit.FreeBSD.org/ports/commit/?id=fba7d62c39c329fc92434056bd54dd84937afa84

commit fba7d62c39c329fc92434056bd54dd84937afa84
Author:     James French <james@french.id.au>
AuthorDate: 2023-09-27 06:18:39 +0000
Commit:     Fernando Apesteguía <fernape@FreeBSD.org>
CommitDate: 2023-09-28 08:43:31 +0000

    news/sabnzbd: Update to 4.1.0
    
    ChangeLog: https://github.com/sabnzbd/sabnzbd/releases/tag/4.1.0
    
    Changes since 4.0.3
    
     * Added a dark mode for the Config, Login, and Wizard pages.
     * Added multi-select to the History.
     * Show the number of items in post-processing when in Tabbed mode.
     * Added option verify_xff_header to include X-Forwarded-For when
     * validating if connections should be accepted when using a proxy.
     * Added option to purge log files from the Folders Config page.
     * Moved Server IP address selection and On failure, try alternative NZB to
       Special settings.
     * Special setting ipv6_servers changed to on/off.
     * Only use 7zip to unpack .zip files.
     * Windows: Added option enable_multipar to use par2cmdline-turbo
     * instead of Multipar for verification and repair. It is faster,
     * but on Windows it can fail on special (UTF8) filenames.
     * macOS: Switched to par2cmdline-turbo for verification and repair.
     * Linux: Detect more recent versions of 7zip.
     * Windows: Use All Users locations during installation of shortcuts.
     * Windows/macOS: Updated Python to 3.11.5, 7Zip to 23.01 and
     * UnRar to 6.23. All these updates include security fixes.
    
    Bugfixes since 4.0.3
    
     * Series duplicate detection did not detect duplicates.
     * Sorting would append .1 to some filenames.
     * If a paused queue contained items with Force priority,
     * items with a lower priority would also be downloaded.
     * Not all API-keys were removed during log-sanitization.
     * In certain situations, not all data would be written to disk.
     * Folder names could be sanitized too eagerly.
     * Some articles would fail to decode.
     * QuickCheck could wrongly rename files with identical content.
     * Warning about Scripts Folder location was triggered incorrectly.
    
    PR:             274114
    Reported by:    james@french.id.au (maintainer)
---
 news/sabnzbd/Makefile                          |   3 +-
 news/sabnzbd/distinfo                          |   6 +-
 news/sabnzbd/files/patch-sabctools             | 116 -------------------------
 news/sabnzbd/files/patch-sabnzbd_newsunpack.py |  11 ---
 news/sabnzbd/pkg-plist                         |   2 +
 5 files changed, 6 insertions(+), 132 deletions(-)

diff --git a/news/sabnzbd/Makefile b/news/sabnzbd/Makefile
index 9821244c0149..1b7cbeb9e167 100644
--- a/news/sabnzbd/Makefile
+++ b/news/sabnzbd/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	sabnzbd
-DISTVERSION=	4.0.2
-PORTREVISION=	1
+DISTVERSION=	4.1.0
 CATEGORIES=	news
 MASTER_SITES=	https://github.com/sabnzbd/sabnzbd/releases/download/${DISTVERSION}/
 DISTNAME=	SABnzbd-${DISTVERSION}-src
diff --git a/news/sabnzbd/distinfo b/news/sabnzbd/distinfo
index 6433ee11ccf8..eb7593029619 100644
--- a/news/sabnzbd/distinfo
+++ b/news/sabnzbd/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1688165296
-SHA256 (SABnzbd-4.0.2-src.tar.gz) = 2783f225057031869dff74f7eb191f54f35e8abe60906fcaaa94ab7772166c4e
-SIZE (SABnzbd-4.0.2-src.tar.gz) = 5081392
+TIMESTAMP = 1695777660
+SHA256 (SABnzbd-4.1.0-src.tar.gz) = 24cdc711a9a9425b65b53dd5c084f78cc0f6d978c5c712481b7031751d569588
+SIZE (SABnzbd-4.1.0-src.tar.gz) = 5074695
diff --git a/news/sabnzbd/files/patch-sabctools b/news/sabnzbd/files/patch-sabctools
deleted file mode 100644
index da0463501ac0..000000000000
--- a/news/sabnzbd/files/patch-sabctools
+++ /dev/null
@@ -1,116 +0,0 @@
-Obtained from:	https://github.com/sabnzbd/sabnzbd/commit/a179f2a895259e49f3679405ad59cac06e0bf2d9
-		https://github.com/sabnzbd/sabnzbd/commit/a951361fa639235e9252cd32c5c7264ff0f1a70a
-
---- requirements.txt.orig	2023-06-07 19:24:42 UTC
-+++ requirements.txt
-@@ -1,6 +1,6 @@
- # Main requirements
- # Note that not all sub-dependencies are listed, but only ones we know could cause trouble
--sabctools==7.0.2
-+sabctools==7.1.1
- cheetah3==3.2.6.post1
- cffi==1.15.1
- pycparser==2.21
---- sabnzbd/assembler.py.orig	2023-06-07 19:24:42 UTC
-+++ sabnzbd/assembler.py
-@@ -27,6 +27,7 @@ from threading import Thread
- import ctypes
- from typing import Tuple, Optional, List
- 
-+import sabctools
- import sabnzbd
- from sabnzbd.misc import get_all_passwords, match_str
- from sabnzbd.filesystem import (
-@@ -160,13 +161,21 @@ class Assembler(Thread):
- 
-     @staticmethod
-     def assemble(nzo: NzbObject, nzf: NzbFile, file_done: bool):
--        """Assemble a NZF from its table of articles
--        1) Partial write: write what we have
--        2) Nothing written before: write all
--        """
-+        """Assemble a NZF from its table of articles"""
- 
-+        # When a file exists, we cannot use "w+b"
-+        if os.path.exists(nzf.filepath):
-+            open_mode = "r+b"
-+            file_sparse = True
-+        else:
-+            open_mode = "w+b"
-+            file_sparse = False
-+
-         # We write large article-sized chunks, so we can safely skip the buffering of Python
--        with open(nzf.filepath, "ab", buffering=0) as fout:
-+        with open(nzf.filepath, open_mode, buffering=0) as fout:
-+            # Track position, so we can prevent a seek if writing continuous
-+            file_position = 0
-+
-             for article in nzf.decodetable:
-                 # Break if deleted during writing
-                 if nzo.status is Status.DELETED:
-@@ -178,9 +187,25 @@ class Assembler(Thread):
- 
-                 # Write all decoded articles
-                 if article.decoded:
-+                    # On first write try to make the file sparse
-+                    if not file_sparse and article.file_size is not None and article.file_size > 0:
-+                        file_sparse = True
-+                        try:
-+                            sabctools.sparse(fout, article.file_size)
-+                        except:
-+                            logging.debug("Failed to make %s sparse with length %d", nzf.filepath, article.file_size)
-+                            logging.debug("Traceback: ", exc_info=True)
-+
-                     data = sabnzbd.ArticleCache.load_article(article)
-                     # Could be empty in case nzo was deleted
-                     if data:
-+                        if article.data_begin is not None:
-+                            # Seek ahead if needed
-+                            if article.data_begin != file_position:
-+                                fout.seek(article.data_begin)
-+                            file_position = article.data_begin + len(data)
-+                        else:
-+                            fout.seek(0, os.SEEK_END)
-                         fout.write(data)
-                         nzf.update_crc32(article.crc32, len(data))
-                         article.on_disk = True
---- sabnzbd/constants.py.orig	2023-06-07 19:24:42 UTC
-+++ sabnzbd/constants.py
-@@ -49,7 +49,7 @@ RENAMES_FILE = "__renames__"
- ATTRIB_FILE = "SABnzbd_attrib"
- REPAIR_REQUEST = "repair-all.sab"
- 
--SABCTOOLS_VERSION_REQUIRED = "7.0.2"
-+SABCTOOLS_VERSION_REQUIRED = "7.1.0"
- 
- DB_HISTORY_VERSION = 1
- DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
---- sabnzbd/decoder.py.orig	2023-06-07 19:24:42 UTC
-+++ sabnzbd/decoder.py
-@@ -172,7 +172,7 @@ def decode(article: Article, raw_data: bytearray):
- 
- def decode_yenc(article: Article, data: bytearray) -> bytearray:
-     # Let SABCTools do all the heavy lifting
--    yenc_filename, article.data_begin, article.data_size, crc_correct = sabctools.yenc_decode(data)
-+    yenc_filename, article.file_size, article.data_begin, article.data_size, crc_correct = sabctools.yenc_decode(data)
- 
-     nzf = article.nzf
-     # Assume it is yenc
---- sabnzbd/nzbstuff.py.orig	2023-06-07 19:24:42 UTC
-+++ sabnzbd/nzbstuff.py
-@@ -163,6 +163,7 @@ ArticleSaver = (
-     "bytes",
-     "lowest_partnum",
-     "decoded",
-+    "file_size",
-     "data_begin",
-     "data_size",
-     "on_disk",
-@@ -187,6 +188,7 @@ class Article(TryList):
-         self.fetcher_priority: int = 0
-         self.tries: int = 0  # Try count
-         self.decoded: bool = False
-+        self.file_size: Optional[int] = None
-         self.data_begin: Optional[int] = None
-         self.data_size: Optional[int] = None
-         self.on_disk: bool = False
diff --git a/news/sabnzbd/files/patch-sabnzbd_newsunpack.py b/news/sabnzbd/files/patch-sabnzbd_newsunpack.py
deleted file mode 100644
index 65a739398ad0..000000000000
--- a/news/sabnzbd/files/patch-sabnzbd_newsunpack.py
+++ /dev/null
@@ -1,11 +0,0 @@
---- sabnzbd/newsunpack.py.orig	2022-01-28 10:50:34 UTC
-+++ sabnzbd/newsunpack.py
-@@ -136,6 +136,8 @@ def find_programs(curdir: str):
-         if not sabnzbd.newsunpack.SEVENZIP_COMMAND:
-             sabnzbd.newsunpack.SEVENZIP_COMMAND = find_on_path("7za")  # 7za = 7z stand-alone executable
-         if not sabnzbd.newsunpack.SEVENZIP_COMMAND:
-+            sabnzbd.newsunpack.SEVENZIP_COMMAND = find_on_path("7zz")
-+        if not sabnzbd.newsunpack.SEVENZIP_COMMAND:
-             sabnzbd.newsunpack.SEVENZIP_COMMAND = find_on_path("7z")
- 
-     if not (sabnzbd.WIN32 or sabnzbd.DARWIN):
diff --git a/news/sabnzbd/pkg-plist b/news/sabnzbd/pkg-plist
index 331b71e6b415..fe81e5ab6dcf 100644
--- a/news/sabnzbd/pkg-plist
+++ b/news/sabnzbd/pkg-plist
@@ -143,6 +143,8 @@ bin/SABnzbd.py
 %%DATADIR%%/interfaces/Config/templates/staticcfg/bootstrap/fonts/glyphicons-halflings-regular.svg
 %%DATADIR%%/interfaces/Config/templates/staticcfg/bootstrap/fonts/glyphicons-halflings-regular.ttf
 %%DATADIR%%/interfaces/Config/templates/staticcfg/bootstrap/js/bootstrap.min.js
+%%DATADIR%%/interfaces/Config/templates/staticcfg/css/Auto.css
+%%DATADIR%%/interfaces/Config/templates/staticcfg/css/Night.css
 %%DATADIR%%/interfaces/Config/templates/staticcfg/css/chartist.min.css
 %%DATADIR%%/interfaces/Config/templates/staticcfg/css/login.css
 %%DATADIR%%/interfaces/Config/templates/staticcfg/css/style.css