git: 8c2ae4599b60 - main - deskutils/calibre: Update to 8.8.0

From: Guido Falsi <madpilot_at_FreeBSD.org>
Date: Sun, 10 Aug 2025 20:30:24 UTC
The branch main has been updated by madpilot:

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

commit 8c2ae4599b60ed67f7b5016acc3733299a440371
Author:     Guido Falsi <madpilot@FreeBSD.org>
AuthorDate: 2025-08-10 20:29:42 +0000
Commit:     Guido Falsi <madpilot@FreeBSD.org>
CommitDate: 2025-08-10 20:29:42 +0000

    deskutils/calibre: Update to 8.8.0
    
    - Disabling piper voices plugin unconditionally. It depends on
      unreleased espeak features and fails to compile at present.
    - Remove usage of != Makefile operator
---
 deskutils/calibre/Makefile                       |  23 ++---
 deskutils/calibre/distinfo                       |  16 ++-
 deskutils/calibre/files/patch-setup_build.py     |  13 ++-
 deskutils/calibre/files/patch-setup_commands.py  |  21 ++++
 deskutils/calibre/files/patch-setup_resources.py |  11 ++
 deskutils/calibre/files/patch-tts-missing-fix    |  81 +++++++++++++++
 deskutils/calibre/files/user-agent-data.json     | 126 +++++++++++------------
 deskutils/calibre/pkg-plist                      |   2 +
 8 files changed, 204 insertions(+), 89 deletions(-)

diff --git a/deskutils/calibre/Makefile b/deskutils/calibre/Makefile
index 4cf6d8af658a..2e4dfec5df9f 100644
--- a/deskutils/calibre/Makefile
+++ b/deskutils/calibre/Makefile
@@ -1,12 +1,9 @@
 PORTNAME=	calibre
-PORTVERSION=	8.7.0
-PORTREVISION=	1
+PORTVERSION=	8.8.0
 CATEGORIES=	deskutils python
-MASTER_SITES=	https://download.calibre-ebook.com/${PORTVERSION}/:DEFAULT \
-		https://raw.githubusercontent.com/rhasspy/piper/${PIPER_VOICES_HASH}/:piper
-DISTFILES=	${DISTNAME}${EXTRACT_SUFX}:DEFAULT VOICES.md:piper
+MASTER_SITES=	https://download.calibre-ebook.com/${PORTVERSION}/
+DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
 DIST_SUBDIR=	${PORTNAME}
-EXTRACT_ONLY=	${DISTFILES:C/:.*//:S/VOICES.md//1}
 
 MAINTAINER=	madpilot@FreeBSD.org
 COMMENT=	Ebook management application
@@ -69,9 +66,8 @@ USES=		desktop-file-utils gettext-runtime:build gl localbase:ldflags \
 		pkgconfig pyqt:6 python:3.11+ qt:6 shared-mime-info shebangfix sqlite ssl \
 		tar:xz xorg
 USE_GITHUB=	nodefault
-GH_TUPLE=	kovidgoyal:calibre-translations:8abf932:translations \
-		LibreOffice:dictionaries:537912c:hypenation
-PIPER_VOICES_HASH=	4147f9629e88d3c1d4915a127f2d843f98347303
+GH_TUPLE=	kovidgoyal:calibre-translations:3f9e7e2:translations \
+		LibreOffice:dictionaries:ea41884:hypenation
 USE_GL=		opengl
 USE_PYQT=	pyqt6 pysip webengine qtbuilder:build sip:build
 USE_QT=		base
@@ -97,9 +93,7 @@ MAKE_ENV=	CALIBRE_CONFIG_DIRECTORY=${WRKDIR}/calibre-config \
 		XDG_UTILS_INSTALL_MODE=system
 SUB_LIST=	PYTHON_VERSION=${PYTHON_VERSION}
 
-.include <bsd.port.pre.mk>
-
-ISOCODESWRKSRC!=	${BSDMAKE} -C ${.CURDIR}/../../misc/iso-codes -V WRKSRC
+ISOCODESWRKSRC_CMD=	${BSDMAKE} -C ${.CURDIR}/../../misc/iso-codes -V WRKSRC
 
 post-extract:
 	@${CP} ${FILESDIR}/user-agent-data.json ${WRKSRC}/resources
@@ -125,8 +119,7 @@ do-build:
 		--path-to-hyphenation=${WRKSRC_hypenation} \
 		--path-to-translations=${WRKSRC_translations} \
 		--path-to-cacerts=${LOCALBASE}/share/certs/ca-root-nss.crt \
-		--path-to-isocodes=${ISOCODESWRKSRC} --isocodes-extracted \
-		--path-to-piper_voices=${DISTDIR}/${DIST_SUBDIR}/VOICES.md \
+		--path-to-isocodes=$$(${ISOCODESWRKSRC_CMD}) --isocodes-extracted \
 	)
 	@${RMDIR} ${LOCALBASE}/libexec/qt6/locales 2>/dev/null || ${TRUE}
 
@@ -151,4 +144,4 @@ update-recent-uas: patch
 		${PYSETUP} recent_uas)
 	${CP} ${BUILD_WRKSRC}/resources/user-agent-data.json ${FILESDIR}
 
-.include <bsd.port.post.mk>
+.include <bsd.port.mk>
diff --git a/deskutils/calibre/distinfo b/deskutils/calibre/distinfo
index 645fa54f448b..71f252afcf17 100644
--- a/deskutils/calibre/distinfo
+++ b/deskutils/calibre/distinfo
@@ -1,9 +1,7 @@
-TIMESTAMP = 1752825052
-SHA256 (calibre/calibre-8.7.0.tar.xz) = 2cfe587e3773d8607fe8bbefbcd77b5cfb816124cac89e491353deb8f2fa9324
-SIZE (calibre/calibre-8.7.0.tar.xz) = 45111468
-SHA256 (calibre/VOICES.md) = 4ce53d3bfb2460ab7ef2bc42c2a651912bf270da700afd62c81390fcaed133a5
-SIZE (calibre/VOICES.md) = 44563
-SHA256 (calibre/kovidgoyal-calibre-translations-8abf932_GH0.tar.gz) = e81c1ec5c38a7c635ff7bd6182bd99665a7de2171518f8ea8b4fd706a7b29456
-SIZE (calibre/kovidgoyal-calibre-translations-8abf932_GH0.tar.gz) = 75154993
-SHA256 (calibre/LibreOffice-dictionaries-537912c_GH0.tar.gz) = 46a7c03354dca09227fa415c20f51614bc3bfb07f05ff28d7228cf2ebb83138e
-SIZE (calibre/LibreOffice-dictionaries-537912c_GH0.tar.gz) = 117692382
+TIMESTAMP = 1754742536
+SHA256 (calibre/calibre-8.8.0.tar.xz) = f030eb078de561e40a1244071145daafcdcb7f09e2daeba1e29ae2150412ac03
+SIZE (calibre/calibre-8.8.0.tar.xz) = 44991676
+SHA256 (calibre/kovidgoyal-calibre-translations-3f9e7e2_GH0.tar.gz) = 23374fa9d374e07ab86b6b987ebb9b9d108d443ad3fd849ffc52cd97fcf028fd
+SIZE (calibre/kovidgoyal-calibre-translations-3f9e7e2_GH0.tar.gz) = 75234844
+SHA256 (calibre/LibreOffice-dictionaries-ea41884_GH0.tar.gz) = 53f3ac3a62d9bfcf84a5e244a34fabe0c048bf83e01ce9fd852089778529b81a
+SIZE (calibre/LibreOffice-dictionaries-ea41884_GH0.tar.gz) = 117695663
diff --git a/deskutils/calibre/files/patch-setup_build.py b/deskutils/calibre/files/patch-setup_build.py
index d2e31e3be30a..7aec05b4d2b3 100644
--- a/deskutils/calibre/files/patch-setup_build.py
+++ b/deskutils/calibre/files/patch-setup_build.py
@@ -1,6 +1,15 @@
---- setup/build.py.orig	2025-04-18 03:14:01 UTC
+--- setup/build.py.orig	2025-08-08 02:10:36 UTC
 +++ setup/build.py
-@@ -701,6 +701,7 @@ sip-file = {os.path.basename(sipf)!r}
+@@ -446,6 +446,8 @@ class Build(Command):
+                 continue
+             if not is_ext_allowed(self.compiling_for, ext):
+                 continue
++            if ext.name == 'piper':
++                continue
+             if ext.error:
+                 if ext.optional:
+                     self.warn(ext.error)
+@@ -703,6 +705,7 @@ sip-file = {os.path.basename(sipf)!r}
  include-dirs = {ext.inc_dirs}
  qmake-QT = {ext.qt_modules}
  sip-file = {os.path.basename(sipf)!r}
diff --git a/deskutils/calibre/files/patch-setup_commands.py b/deskutils/calibre/files/patch-setup_commands.py
new file mode 100644
index 000000000000..72f524b88ac4
--- /dev/null
+++ b/deskutils/calibre/files/patch-setup_commands.py
@@ -0,0 +1,21 @@
+--- setup/commands.py.orig	2025-08-08 02:10:36 UTC
++++ setup/commands.py
+@@ -30,7 +30,6 @@ __all__ = [
+     'manual',
+     'mathjax',
+     'osx',
+-    'piper_voices',
+     'pot',
+     'publish',
+     'publish_betas',
+@@ -93,10 +92,6 @@ hyphenation = Hyphenation()
+ from setup.hyphenation import Hyphenation
+ 
+ hyphenation = Hyphenation()
+-
+-from setup.piper import PiperVoices
+-
+-piper_voices = PiperVoices()
+ 
+ from setup.liberation import LiberationFonts
+ 
diff --git a/deskutils/calibre/files/patch-setup_resources.py b/deskutils/calibre/files/patch-setup_resources.py
new file mode 100644
index 000000000000..4f8d77906778
--- /dev/null
+++ b/deskutils/calibre/files/patch-setup_resources.py
@@ -0,0 +1,11 @@
+--- setup/resources.py.orig	2025-08-08 02:10:36 UTC
++++ setup/resources.py
+@@ -104,7 +104,7 @@ class Resources(Command):  # {{{
+ class Resources(Command):  # {{{
+ 
+     description = 'Compile various needed calibre resources'
+-    sub_commands = ['liberation_fonts', 'mathjax', 'rapydscript', 'hyphenation', 'piper_voices']
++    sub_commands = ['liberation_fonts', 'mathjax', 'rapydscript', 'hyphenation']
+ 
+     def run(self, opts):
+         from calibre.utils.serialize import msgpack_dumps
diff --git a/deskutils/calibre/files/patch-tts-missing-fix b/deskutils/calibre/files/patch-tts-missing-fix
new file mode 100644
index 000000000000..a8ea80597c6a
--- /dev/null
+++ b/deskutils/calibre/files/patch-tts-missing-fix
@@ -0,0 +1,81 @@
+From ee2e5374cec0b5a313e943bdba6cf31f6f48b27f Mon Sep 17 00:00:00 2001
+From: Eli Schwartz <eschwartz93@gmail.com>
+Date: Fri, 8 Aug 2025 01:15:04 -0400
+Subject: [PATCH] TTS: gracefully handle missing piper support
+
+Third party redistributors might choose to skip distributing this for a
+couple reasons:
+- missing dependencies
+- lack of interest in TTS as a feature
+
+Lay some groundwork for handling this with fewer error message popups.
+In particular note that speechd / flite depend on PyQt6 being built with
+it, so support *may* appear dynamically after calibre is installed, and
+available_engines queries Qt to see what is available. Piper is built
+as part of calibre though, and if it has been patched out or skipped
+via `setup.py build --only=xxx` we can at least avoid claiming it's
+there.
+
+Entrypoints into TTS eventually tend to consolidate into creating the
+backend. This gives us one consistent place to raise errors for missing
+backends... which however doesn't handle forcing a backend name. A
+forced backend that is unavailable ended up hitting the "no prefs"
+fallback code to use the default engine, which returned a different
+backend than the one which is *forced*, and later a KeyError when
+tweak_book attempted to access the backend name it forced but which
+didn't exist.
+
+Instead, raise an immediate "TTS engine piper is not available" error
+dialog box, preventing any further confusing tracebacks.
+---
+ src/calibre/gui2/tts/types.py | 30 +++++++++++++++++++++---------
+ 1 file changed, 21 insertions(+), 9 deletions(-)
+
+diff --git a/src/calibre/gui2/tts/types.py b/src/calibre/gui2/tts/types.py
+index 40a2aad27e71..f509e8bddd16 100644
+--- src/calibre/gui2/tts/types.py
++++ src/calibre/gui2/tts/types.py
+@@ -234,11 +234,18 @@ def qt_engine_metadata(name: str, human_name: str, desc: str, allows_choosing_au
+             ), True)
+         elif x == 'speechd':
+             continue
+-    ans['piper'] = EngineMetadata('piper', _('The Piper Neural Engine'), _(
+-        'The "piper" engine can track the currently spoken sentence on screen. It uses a neural network '
+-        'for natural sounding voices. The neural network is run locally on your computer, it is fairly resource intensive to run.'
+-    ), TrackingCapability.Sentence, can_change_pitch=False, voices_have_quality_metadata=True, has_managed_voices=True,
+-    has_sentence_delay=True)
++
++    try:
++        import calibre_extensions.piper
++    except ImportError:
++        pass
++    else:
++        ans['piper'] = EngineMetadata('piper', _('The Piper Neural Engine'), _(
++            'The "piper" engine can track the currently spoken sentence on screen. It uses a neural network '
++            'for natural sounding voices. The neural network is run locally on your computer, it is fairly resource intensive to run.'
++        ), TrackingCapability.Sentence, can_change_pitch=False, voices_have_quality_metadata=True, has_managed_voices=True,
++        has_sentence_delay=True)
++
+     if islinux:
+         try:
+             from speechd.paths import SPD_SPAWN_CMD
+@@ -322,10 +329,15 @@ def create_tts_backend(force_engine: str | None = None, config_name: str = CONFI
+     if not available_engines():
+         raise OSError('There are no available TTS engines. Install a TTS engine before trying to use Read Aloud, such as flite or speech-dispatcher')
+     prefs = load_config(config_name)
+-    engine_name = prefs.get('engine', '') if force_engine is None else force_engine
+-    engine_name = engine_name or default_engine_name()
+-    if engine_name not in available_engines():
+-        engine_name = default_engine_name()
++    if force_engine is not None:
++        engine_name = force_engine
++        if engine_name not in available_engines():
++            raise OSError(f'TTS engine {force_engine} is not available.')
++    else:
++        engine_name = prefs.get('engine', '')
++        engine_name = engine_name or default_engine_name()
++        if engine_name not in available_engines():
++            engine_name = default_engine_name()
+     if engine_name == 'piper':
+         if engine_name not in engine_instances:
+             from calibre.gui2.tts.piper import Piper
diff --git a/deskutils/calibre/files/user-agent-data.json b/deskutils/calibre/files/user-agent-data.json
index 99db15bbd6c2..6ba80d11101f 100644
--- a/deskutils/calibre/files/user-agent-data.json
+++ b/deskutils/calibre/files/user-agent-data.json
@@ -2,6 +2,7 @@
   "common_user_agents": [
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
@@ -21,7 +22,6 @@
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0",
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15",
@@ -30,85 +30,85 @@
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0",
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
     "Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.19044; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 (compatible; Liquit-SetupStore; +https://www.liquit.com/products/release-patch-management/)",
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0",
     "Mozilla/5.0 (Windows NT 10.0; rv:128.0) Gecko/20100101 Firefox/128.0",
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:134.0) Gecko/20100101 Firefox/134.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:134.0) Gecko/20100101 Firefox/134.0",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15",
     "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
     "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18",
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15",
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
   ],
   "desktop_platforms": [
-    "Macintosh; Intel Mac OS X 10.15",
-    "Windows NT 10.0; Win64; x64",
-    "Windows NT 10.0",
-    "Windows NT 10.0; WOW64",
     "Windows NT 10.0; Microsoft Windows 10.0.19044; en-US",
     "Windows NT 6.1; Win64; x64",
-    "Macintosh; Intel Mac OS X 10_15_7"
+    "Windows NT 10.0; Win64; x64",
+    "Windows NT 10.0",
+    "Macintosh; Intel Mac OS X 10_15_7",
+    "Macintosh; Intel Mac OS X 10.15",
+    "Windows NT 10.0; WOW64"
   ],
-  "timestamp": "2025-07-18T07:51:48.864212+00:00",
+  "timestamp": "2025-08-09T08:59:58.521236+00:00",
   "user_agents_popularity": {
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0": 18741,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:134.0) Gecko/20100101 Firefox/134.0": 14220,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36": 140756,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36": 7299,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36": 6950,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36": 104801,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15": 6112,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15": 11756,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15": 37652,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15": 9389,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Safari/605.1.15": 35322,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15": 53993,
-    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15": 68203,
-    "Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.19044; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 (compatible; Liquit-SetupStore; +https://www.liquit.com/products/release-patch-management/)": 16260,
-    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18": 6598,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36": 29996,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36": 13682,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36": 6110,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36": 11698,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36": 23488,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36": 9038,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0": 16814,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36": 6193,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36": 18532,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0": 7486,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0": 20745,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36": 555765,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0": 285441,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0": 18754,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:134.0) Gecko/20100101 Firefox/134.0": 14230,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36": 147045,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36": 7822,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36": 7035,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36": 104976,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15": 6685,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15": 12393,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15": 40225,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15": 9669,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Safari/605.1.15": 35572,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15": 54339,
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15": 68948,
+    "Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.19044; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 (compatible; Liquit-SetupStore; +https://www.liquit.com/products/release-patch-management/)": 17885,
+    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18": 7387,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36": 32695,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36": 14990,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36": 6335,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36": 12503,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36": 24522,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36": 9681,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0": 16832,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36": 6682,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36": 18941,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0": 7632,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0": 20752,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36": 556739,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0": 285988,
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.33 Safari/537.36": 225959,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36": 248070,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0": 138734,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36": 284395,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0": 148351,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36": 328840,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0": 138360,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36": 300116,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0": 99344,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36": 229560,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36": 154394,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36": 88050,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0": 25231,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0": 177089,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0": 136581,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0": 173481,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0": 130547,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0": 165050,
-    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0": 99777,
-    "Mozilla/5.0 (Windows NT 10.0; rv:128.0) Gecko/20100101 Firefox/128.0": 14365,
-    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0": 7798
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36": 250347,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0": 138985,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36": 285016,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0": 148672,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36": 329795,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0": 138870,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36": 301268,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0": 100037,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36": 231497,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36": 162318,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36": 319599,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0": 27589,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0": 177237,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0": 136750,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0": 173817,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0": 130921,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0": 165450,
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0": 100429,
+    "Mozilla/5.0 (Windows NT 10.0; rv:128.0) Gecko/20100101 Firefox/128.0": 15753,
+    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0": 8513
   }
 }
diff --git a/deskutils/calibre/pkg-plist b/deskutils/calibre/pkg-plist
index b933e9ca2a50..3638467dad65 100644
--- a/deskutils/calibre/pkg-plist
+++ b/deskutils/calibre/pkg-plist
@@ -1437,6 +1437,8 @@ lib/calibre/calibre/utils/test_lock.py
 lib/calibre/calibre/utils/text2int.py
 lib/calibre/calibre/utils/threadpool.py
 lib/calibre/calibre/utils/titlecase.py
+lib/calibre/calibre/utils/tts/__init__.py
+lib/calibre/calibre/utils/tts/piper.py
 lib/calibre/calibre/utils/unicode_names.py
 lib/calibre/calibre/utils/unrar.py
 lib/calibre/calibre/utils/unsmarten.py