git: cec715ea83a4 - main - multimedia/tvheadend: Update to 4.3.0 (from 2026.07.09)

Bernhard Froehlich <[email protected]> Sat, 01 Aug 2026 10:55:20 +0000
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <[email protected]>
The branch main has been updated by decke:

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

commit cec715ea83a4c3f4e91ac8f77f4283991146b3ad
Author:     Bernhard Froehlich <[email protected]>
AuthorDate: 2026-08-01 10:49:33 +0000
Commit:     Bernhard Froehlich <[email protected]>
CommitDate: 2026-08-01 10:49:33 +0000

    multimedia/tvheadend: Update to 4.3.0 (from 2026.07.09)
    
    Tested by:      Heiko Kirschke
---
 multimedia/tvheadend/Makefile                      |  21 +-
 multimedia/tvheadend/distinfo                      |   6 +-
 multimedia/tvheadend/files/patch-Makefile          |  29 --
 multimedia/tvheadend/files/patch-configure         |  33 ++
 multimedia/tvheadend/files/patch-fno-common.patch  |  52 ---
 ...atch-src_input_mpegts_tvhdhomerun_tvhdhomerun.c |  26 --
 multimedia/tvheadend/files/patch-src_main.c        |  62 ---
 ...patch-src_transcoding_codec_codecs_libs_vaapi.c |  39 ++
 multimedia/tvheadend/files/patch-src_tvheadend.h   |  11 +
 .../files/patch-src_webui_static_app_epg.js        |  44 --
 multimedia/tvheadend/files/patch-src_webui_webui.c |  80 ----
 multimedia/tvheadend/files/patch-src_wrappers.c    |   8 +-
 multimedia/tvheadend/pkg-plist                     | 455 ++++++++++++++++++---
 13 files changed, 501 insertions(+), 365 deletions(-)

diff --git a/multimedia/tvheadend/Makefile b/multimedia/tvheadend/Makefile
index dcc03f613128..f50d117e82c1 100644
--- a/multimedia/tvheadend/Makefile
+++ b/multimedia/tvheadend/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	tvheadend
-PORTVERSION=	4.2.8
+PORTVERSION=	4.3.0.20260709
 DISTVERSIONPREFIX=	v
-PORTREVISION=	7
 CATEGORIES=	multimedia
 
 MAINTAINER=	[email protected]
@@ -14,24 +13,28 @@ LICENSE_FILE=	${WRKSRC}/LICENSE.md
 BUILD_DEPENDS=	bash:shells/bash \
 		cmake:devel/cmake-core \
 		${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat
-LIB_DEPENDS=	libcurl.so:ftp/curl \
+LIB_DEPENDS=	libdvbcsa.so:multimedia/libdvbcsa \
+		libcurl.so:ftp/curl \
 		liburiparser.so:net/uriparser \
 		libunwind.so:devel/libunwind
 RUN_DEPENDS=	dtv-scan-tables>=0:multimedia/dtv-scan-tables
 
 USES=		compiler:c++11-lang gettext gmake pkgconfig python shebangfix ssl
 USE_GITHUB=	yes
+GH_TAGNAME=	8ddfe27
 
 GNU_CONFIGURE=	yes
-GNU_CONFIGURE_MANPREFIX=	${PREFIX}/share
 MAKE_JOBS_UNSAFE=	yes
 USE_RC_SUBR=	${PORTNAME}
 
 SHEBANG_FILES=	${WRKSRC}/Autobuild.sh \
 		${WRKSRC}/configure \
+		${WRKSRC}/lib/py/tvh/tv_meta_tmdb.py \
+		${WRKSRC}/lib/py/tvh/tv_meta_tvdb.py \
 		${WRKSRC}/support/apt-update \
 		${WRKSRC}/support/configure.inc \
 		${WRKSRC}/support/getmuxlist \
+		${WRKSRC}/support/tvhmeta \
 		${WRKSRC}/support/version
 
 TVHUSER?=	tvheadend
@@ -48,15 +51,11 @@ CONFIGURE_ARGS+=--disable-dvbscan --disable-zlib --disable-hdhomerun_static \
 CFLAGS+=	-I${LOCALBASE}/include -Wno-conversion -Wno-int-to-pointer-cast
 LDFLAGS+=	-L${LOCALBASE}/lib -lexecinfo -lssl -lcrypto -lz
 
-OPTIONS_DEFINE=	AVAHI DVBCSA DVBEN50221 HDHOMERUN INOTIFY TRANSCODING XMLTV
-OPTIONS_DEFAULT=DVBCSA HDHOMERUN INOTIFY
+OPTIONS_DEFINE=	AVAHI DVBEN50221 HDHOMERUN INOTIFY TRANSCODING XMLTV
+OPTIONS_DEFAULT=HDHOMERUN INOTIFY
 
 AVAHI_LIB_DEPENDS=	libavahi-client.so:net/avahi-app
 
-DVBCSA_DESC=		Replace internal ffdecsa with dvbcsa
-DVBCSA_LIB_DEPENDS=	libdvbcsa.so:multimedia/libdvbcsa
-DVBCSA_CONFIGURE_ENABLE=	dvbcsa
-
 DVBEN50221_DESC=	Hardware CAM support
 DVBEN50221_LIB_DEPENDS=	libdvben50221.so:multimedia/dvb-apps
 DVBEN50221_CONFIGURE_ENABLE=	dvben50221
@@ -80,8 +79,6 @@ XMLTV_RUN_DEPENDS=	p5-xmltv>=0:textproc/p5-xmltv
 .include <bsd.port.pre.mk>
 
 post-patch:
-	@${REINPLACE_CMD} 's|-ldl||' \
-		${WRKSRC}/Makefile
 	@${REINPLACE_CMD} 's|-Werror||' \
 		${WRKSRC}/Makefile
 
diff --git a/multimedia/tvheadend/distinfo b/multimedia/tvheadend/distinfo
index 55c718a05633..f2c69196d435 100644
--- a/multimedia/tvheadend/distinfo
+++ b/multimedia/tvheadend/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1547368627
-SHA256 (tvheadend-tvheadend-v4.2.8_GH0.tar.gz) = 1aef889373d5fad2a7bd2f139156d4d5e34a64b6d38b87b868a2df415f01f7ad
-SIZE (tvheadend-tvheadend-v4.2.8_GH0.tar.gz) = 21875281
+TIMESTAMP = 1783628855
+SHA256 (tvheadend-tvheadend-v4.3.0.20260709-8ddfe27_GH0.tar.gz) = 1f16256ee27c2fde2c82a10fdd631a297eec25e52812082018607dee59b31c3c
+SIZE (tvheadend-tvheadend-v4.3.0.20260709-8ddfe27_GH0.tar.gz) = 24203353
diff --git a/multimedia/tvheadend/files/patch-Makefile b/multimedia/tvheadend/files/patch-Makefile
deleted file mode 100644
index cb7da85f939d..000000000000
--- a/multimedia/tvheadend/files/patch-Makefile
+++ /dev/null
@@ -1,29 +0,0 @@
-Prepend local include paths in CFLAGS to avoid conflict with system wide includes
-
-CFLAGS could contain system wide include paths which might conflict
-with our filenames. So make sure that our local directories are first
-in the search order.
-
-Example with conflicting profile.h from kerberos:
-
-tvheadend-4.2.5/src/dvr/dvr.h:27:
-/usr/local/include/profile.h:24:28: error: typedef redefinition with
-different types ('struct _profile_t *' vs 'struct profile')
-typedef struct _profile_t *profile_t;
-                           ^
-tvheadend-4.2.5/src/profile.h:147:3:
-note: previous definition is here
-} profile_t;
-
-Reported by:	Frank Razenberg <[email protected]>
---- Makefile.bak	2018-02-22 16:07:14.367738000 +0000
-+++ Makefile	2018-02-22 16:08:14.628857000 +0000
-@@ -52,7 +52,7 @@
- CFLAGS  += -Wmissing-prototypes
- CFLAGS  += -fms-extensions -funsigned-char -fno-strict-aliasing
- CFLAGS  += -D_FILE_OFFSET_BITS=64
--CFLAGS  += -I${BUILDDIR} -I${ROOTDIR}/src -I${ROOTDIR}
-+CFLAGS  := -I${BUILDDIR} -I${ROOTDIR}/src -I${ROOTDIR} ${CFLAGS}
- ifeq ($(CONFIG_ANDROID),yes)
- LDFLAGS +=  -lm
- else
diff --git a/multimedia/tvheadend/files/patch-configure b/multimedia/tvheadend/files/patch-configure
new file mode 100644
index 000000000000..c42401627474
--- /dev/null
+++ b/multimedia/tvheadend/files/patch-configure
@@ -0,0 +1,33 @@
+Fix build on FreeBSD/i386 where time_t is int
+
+--- configure.orig	2024-05-26 20:34:22 UTC
++++ configure
+@@ -280,6 +280,19 @@ int test(void)
+ }
+ '
+ 
++check_cc_snippet time_d '
++#define _FILE_OFFSET_BITS 64
++#define _TIME_BITS 64
++#include <stdio.h>
++#include <time.h>
++#define TEST test
++int test(void)
++{
++  printf("%d", (time_t)1);
++  return 0;
++}
++' '-Wformat -Werror=format'
++
+ check_cc_snippet time_ld '
+ #define _FILE_OFFSET_BITS 64
+ #define _TIME_BITS 64
+@@ -310,6 +323,8 @@ elif enabled time_ld; then
+   printf "    ^ using time_t format 'lld'\n"
+ elif enabled time_ld; then
+   printf "    ^ using time_t format 'ld'\n"
++elif enabled time_d; then
++  printf "    ^ using time_t format 'd'\n"
+ else
+   die 'Unable to determine size of "time_t"'
+ fi
diff --git a/multimedia/tvheadend/files/patch-fno-common.patch b/multimedia/tvheadend/files/patch-fno-common.patch
deleted file mode 100644
index ed54a4cba142..000000000000
--- a/multimedia/tvheadend/files/patch-fno-common.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 8a2942a361e95ccdbd30c1edc7627df3862cdbbe Mon Sep 17 00:00:00 2001
-From: James Le Cuirot <[email protected]>
-Date: Fri, 15 May 2020 17:45:30 +0100
-Subject: [PATCH] Fix building with -fno-common (default from GCC 10)
-
----
- src/input.h        | 4 ++--
- src/input/mpegts.c | 2 ++
- src/input/mpegts.h | 2 +-
- 3 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/input.h b/src/input.h
-index a9c96df048..3dce355c6a 100644
---- src/input.h
-+++ src/input.h
-@@ -133,8 +133,8 @@ void tvh_hardware_delete ( tvh_hardware_t *th );
- extern const idclass_t tvh_input_class;
- extern const idclass_t tvh_input_instance_class;
- 
--tvh_input_list_t    tvh_inputs;
--tvh_hardware_list_t tvh_hardware;
-+extern tvh_input_list_t    tvh_inputs;
-+extern tvh_hardware_list_t tvh_hardware;
- 
- #define TVH_INPUT_FOREACH(x) LIST_FOREACH(x, &tvh_inputs, ti_link)
- #define TVH_HARDWARE_FOREACH(x) LIST_FOREACH(x, &tvh_hardware, th_link)
-diff --git a/src/input/mpegts.c b/src/input/mpegts.c
-index e02d491f19..fca4f34296 100644
---- src/input/mpegts.c
-+++ src/input/mpegts.c
-@@ -20,6 +20,8 @@
- #include "mpegts/fastscan.h"
- #include "memoryinfo.h"
- 
-+struct mpegts_listeners mpegts_listeners;
-+
- extern memoryinfo_t mpegts_input_queue_memoryinfo;
- extern memoryinfo_t mpegts_input_table_memoryinfo;
- 
-diff --git a/src/input/mpegts.h b/src/input/mpegts.h
-index 9dda3bacaa..9c4c57b73b 100644
---- src/input/mpegts.h
-+++ src/input/mpegts.h
-@@ -1149,7 +1149,7 @@ typedef struct mpegts_listener
-   void (*ml_mux_delete) (mpegts_mux_t *mm, void *p);
- } mpegts_listener_t;
- 
--LIST_HEAD(,mpegts_listener) mpegts_listeners;
-+extern LIST_HEAD(mpegts_listeners, mpegts_listener) mpegts_listeners;
- 
- #define mpegts_add_listener(ml)\
-   LIST_INSERT_HEAD(&mpegts_listeners, ml, ml_link)
diff --git a/multimedia/tvheadend/files/patch-src_input_mpegts_tvhdhomerun_tvhdhomerun.c b/multimedia/tvheadend/files/patch-src_input_mpegts_tvhdhomerun_tvhdhomerun.c
deleted file mode 100644
index b77ab4bde6e3..000000000000
--- a/multimedia/tvheadend/files/patch-src_input_mpegts_tvhdhomerun_tvhdhomerun.c
+++ /dev/null
@@ -1,26 +0,0 @@
-From 6f494ce84b77de092447dbb793eca8cc7b5296ee Mon Sep 17 00:00:00 2001
-From: Michael Marley <[email protected]>
-Date: Wed, 26 Jun 2019 19:35:50 -0400
-Subject: [PATCH] Fix compilation with libhdhomerun 20190621
-
-They renamed the symbol that was used to determine whether the
-"hdhomerun_discover_find_devices_custom" needed to be aliased,
-causing an FTBFS.  Instead, recognize both the old and new symbols.
----
- src/input/mpegts/tvhdhomerun/tvhdhomerun.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun.c
-index 58dec51ab3..18068faf5d 100644
---- src/input/mpegts/tvhdhomerun/tvhdhomerun.c
-+++ src/input/mpegts/tvhdhomerun/tvhdhomerun.c
-@@ -32,7 +32,8 @@
- 
- #include "config.h"
- 
--#ifdef HDHOMERUN_TAG_DEVICE_AUTH_BIN
-+#if defined(HDHOMERUN_TAG_DEVICE_AUTH_BIN) \
-+           || defined(HDHOMERUN_TAG_DEVICE_AUTH_BIN_DEPRECATED)
- #define hdhomerun_discover_find_devices_custom \
-            hdhomerun_discover_find_devices_custom_v2
- #endif
diff --git a/multimedia/tvheadend/files/patch-src_main.c b/multimedia/tvheadend/files/patch-src_main.c
deleted file mode 100644
index 48f8d7644e6b..000000000000
--- a/multimedia/tvheadend/files/patch-src_main.c
+++ /dev/null
@@ -1,62 +0,0 @@
-Avoid build error with recent clang on FreeBSD 12-CURRENT.
-
-CC              src/main.o
-In file included from src/main.c:51:
-In file included from
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27:
-/usr/local/include/profile.h:24:28: error: typedef redefinition with
-different types ('struct _profile_t *' vs
-      'struct profile')
-typedef struct _profile_t *profile_t;
-                           ^
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:148:3:
-note: previous definition is here
-} profile_t;
-  ^
-In file included from src/main.c:51:
-In file included from
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27:
-/usr/local/include/profile.h:45:20: error: conflicting types for
-'profile_init'
-long KRB5_CALLCONV profile_init
-                   ^
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:197:6:
-note: previous declaration is here
-void profile_init(void);
-     ^
-In file included from src/main.c:51:
-In file included from
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27:
-/usr/local/include/profile.h:71:20: error: conflicting types for
-'profile_release'
-void KRB5_CALLCONV profile_release
-                   ^
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:159:20:
-note: previous definition is here
-static inline void profile_release( profile_t *pro )
-                   ^
-3 errors generated.
-gmake[2]: *** [Makefile:631:
-/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/build.freebsd/src/main.o]
-Error 1
-gmake[2]: Leaving directory
-
-Reported by:	Rainer Hurling <[email protected]>
---- src/main.c.orig	2017-07-01 07:22:23.000000000 +0000
-+++ src/main.c	2017-08-23 15:27:26.427162000 +0000
-@@ -48,6 +48,7 @@
- #include "subscriptions.h"
- #include "service_mapper.h"
- #include "descrambler.h"
-+#include "profile.h"
- #include "dvr/dvr.h"
- #include "htsp_server.h"
- #include "satip/server.h"
-@@ -68,7 +69,6 @@
- #include "intlconv.h"
- #include "dbus.h"
- #include "libav.h"
--#include "profile.h"
- #include "bouquet.h"
- #include "tvhtime.h"
- #include "packet.h"
diff --git a/multimedia/tvheadend/files/patch-src_transcoding_codec_codecs_libs_vaapi.c b/multimedia/tvheadend/files/patch-src_transcoding_codec_codecs_libs_vaapi.c
new file mode 100644
index 000000000000..83631656e740
--- /dev/null
+++ b/multimedia/tvheadend/files/patch-src_transcoding_codec_codecs_libs_vaapi.c
@@ -0,0 +1,39 @@
+Fix compile error with newer clang
+
+src/transcoding/codec/codecs/libs/vaapi.c:819:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+  819 |                 .def.dyn_i= tvh_codec_profile_vaapi_h264_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:829:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+  829 |                 .def.dyn_i= tvh_codec_profile_vaapi_h264lp_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1132:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1132 |                 .def.dyn_i= tvh_codec_profile_vaapi_hevc_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1142:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1142 |                 .def.dyn_i= tvh_codec_profile_vaapi_hevclp_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1439:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1439 |                 .def.dyn_i= tvh_codec_profile_vaapi_vp8_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1449:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1449 |                 .def.dyn_i= tvh_codec_profile_vaapi_vp8lp_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1766:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1766 |                 .def.dyn_i= tvh_codec_profile_vaapi_vp9_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+src/transcoding/codec/codecs/libs/vaapi.c:1776:29: error: incompatible function pointer types initializing 'int (*)(void)' with an expression of type 'const int (void)' [-Wincompatible-function-pointer-types]
+ 1776 |                 .def.dyn_i= tvh_codec_profile_vaapi_vp9lp_ui,
+      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+8 errors generated.
+
+--- src/transcoding/codec/codecs/libs/vaapi.c.orig	2026-05-19 20:37:17 UTC
++++ src/transcoding/codec/codecs/libs/vaapi.c
+@@ -275,7 +275,7 @@ tvh_codec_profile_vaapi_device_list(void *obj, const c
+ }
+ 
+ #define TVH_CODEC_PROFILE_VAAPI_CODEC_UI(codec_ui, codec_name) \
+-    static const int tvh_codec_profile_vaapi_##codec_ui##_ui(void) \
++    static int tvh_codec_profile_vaapi_##codec_ui##_ui(void) \
+     { \
+         return TVH_CODEC_PROFILE_VAAPI_UI(codec_name); \
+     }
diff --git a/multimedia/tvheadend/files/patch-src_tvheadend.h b/multimedia/tvheadend/files/patch-src_tvheadend.h
new file mode 100644
index 000000000000..1802402eeafc
--- /dev/null
+++ b/multimedia/tvheadend/files/patch-src_tvheadend.h
@@ -0,0 +1,11 @@
+--- src/tvheadend.h.orig	2024-04-26 17:57:22 UTC
++++ src/tvheadend.h
+@@ -340,6 +340,8 @@ void tvh_qsort_r(void *base, size_t nmemb, size_t size
+ # define PRItime_t "lld"
+ #elif CONFIG_TIME_LD == 1
+ # define PRItime_t "ld"
++#elif CONFIG_TIME_D == 1
++# define PRItime_t "d"
+ #else
+ # error "CONFIG_TIME not properly defined"
+ #endif
diff --git a/multimedia/tvheadend/files/patch-src_webui_static_app_epg.js b/multimedia/tvheadend/files/patch-src_webui_static_app_epg.js
deleted file mode 100644
index ce3f35c23723..000000000000
--- a/multimedia/tvheadend/files/patch-src_webui_static_app_epg.js
+++ /dev/null
@@ -1,44 +0,0 @@
-From 5363fb5cefbf8f9f0f4d38f81252ce93942665e4 Mon Sep 17 00:00:00 2001
-From: Jongsung Kim <[email protected]>
-Date: Tue, 20 Nov 2018 17:36:10 +0900
-Subject: [PATCH 2/2] webui: epg: fix compatibility issue for FreeBSD
-
-The EPG screen serviced by FreeBSD port of tvheadend has two abnormal control
-behaviors:
-
-    Reset All button makes the list empty
-    Typing and then deleting any search string also makes the list empty.
-
-This patch fixes the symptoms above.
-
-Patch tested with the latest FreeBSD port of tvheadend-4.2.7.
-
-Changes since v1:
-- call reset only if required
----
- src/webui/static/app/epg.js | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/src/webui/static/app/epg.js b/src/webui/static/app/epg.js
-index 2c8b914b2..7337177ef 100644
---- src/webui/static/app/epg.js
-+++ src/webui/static/app/epg.js
-@@ -902,10 +902,11 @@ tvheadend.epg = function() {
-     epgFilterTitle.on('valid', function(c) {
-         var value = c.getValue();
- 
--        if (value.length < 1)
--            value = null;
--
--        if (epgStore.baseParams.title !== value) {
-+        if (value.length < 1) {
-+            delete epgStore.baseParams.title;
-+            epgView.reset();
-+        }
-+        else if (epgStore.baseParams.title !== value) {
-             epgStore.baseParams.title = value;
-             epgView.reset();
-         }
--- 
-2.19.1
-
diff --git a/multimedia/tvheadend/files/patch-src_webui_webui.c b/multimedia/tvheadend/files/patch-src_webui_webui.c
deleted file mode 100644
index 9896e020b41a..000000000000
--- a/multimedia/tvheadend/files/patch-src_webui_webui.c
+++ /dev/null
@@ -1,80 +0,0 @@
-From 411f957733222e24df4ead9fb15332dcb2c116da Mon Sep 17 00:00:00 2001
-From: Jongsung Kim <[email protected]>
-Date: Tue, 29 May 2018 03:42:04 +0900
-Subject: [PATCH 1/2] webui: fix http_serve_file() for FreeBSD
-
-This patch fixes two major problems of FreeBSD port of tvheadend:
-
-1. very high CPU usage while streaming a recored program
-2. unable to stream the recorded program beyond 128MB.
-
-Unlike Linux sendfile(), FreeBSD sendfile() requires an explicit
-file offset, and return value must be checked to catch any error
-occurred. (i.e., closed connection)
-
-Patch tested with the latest FreeBSD port of tvheadend-4.2.6.
----
- src/webui/webui.c | 24 +++++++++++++++++-------
- 1 file changed, 17 insertions(+), 7 deletions(-)
-
-diff --git a/src/webui/webui.c b/src/webui/webui.c
-index 12b965230..331d998e9 100644
---- src/webui/webui.c
-+++ src/webui/webui.c
-@@ -1570,7 +1570,7 @@ http_serve_file(http_connection_t *hc, const char *fname,
- #if defined(PLATFORM_LINUX)
-   ssize_t r;
- #elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN)
--  off_t r;
-+  off_t o, r;
- #endif
-   
-   if (fconv) {
-@@ -1631,11 +1631,15 @@ http_serve_file(http_connection_t *hc, const char *fname,
-   sprintf(range_buf, "bytes %jd-%jd/%jd",
-     file_start, file_end, (intmax_t)st.st_size);
- 
-+#if defined(PLATFORM_LINUX)
-   if(file_start > 0)
-     if (lseek(fd, file_start, SEEK_SET) != file_start) {
-       close(fd);
-       return HTTP_STATUS_INTERNAL;
-     }
-+#elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN)
-+  o = file_start;
-+#endif
- 
-   if (preop) {
-     ret = preop(hc, file_start, content_len, opaque);
-@@ -1656,16 +1660,22 @@ http_serve_file(http_connection_t *hc, const char *fname,
-       chunk = MIN(1024 * ((stats ? 128 : 1024) * 1024), content_len);
- #if defined(PLATFORM_LINUX)
-       r = sendfile(hc->hc_fd, fd, NULL, chunk);
-+      if (r < 0) {
-+        ret = -1;
-+        break;
-+      }
- #elif defined(PLATFORM_FREEBSD)
--      sendfile(fd, hc->hc_fd, 0, chunk, NULL, &r, 0);
-+      ret = sendfile(fd, hc->hc_fd, o, chunk, NULL, &r, 0);
-+      if (ret < 0)
-+        break;
-+      o += r;
- #elif defined(PLATFORM_DARWIN)
-       r = chunk;
--      sendfile(fd, hc->hc_fd, 0, &r, NULL, 0);
--#endif
--      if(r < 0) {
--        ret = -1;
-+      ret = sendfile(fd, hc->hc_fd, o, &r, NULL, 0);
-+      if (ret < 0)
-         break;
--      }
-+      o += r;
-+#endif
-       content_len -= r;
-       if (stats)
-         stats(hc, r, opaque);
--- 
-2.19.1
-
diff --git a/multimedia/tvheadend/files/patch-src_wrappers.c b/multimedia/tvheadend/files/patch-src_wrappers.c
index af4aaafea0f5..3b849553bd8c 100644
--- a/multimedia/tvheadend/files/patch-src_wrappers.c
+++ b/multimedia/tvheadend/files/patch-src_wrappers.c
@@ -2,9 +2,9 @@ Use the implementation from Darwin for tvh_usleep() and tvh_usleep_abs()
 in FreeBSD.
 
 Submitted by:	Bernhard Froehlich <[email protected]>
---- src/wrappers.c.orig	2018-10-08 12:37:05.000000000 +0000
-+++ src/wrappers.c	2018-10-16 14:27:38.788502000 +0000
-@@ -324,7 +324,7 @@
+--- src/wrappers.c.orig	2026-05-19 20:37:17 UTC
++++ src/wrappers.c
+@@ -171,7 +171,7 @@ tvh_usleep(int64_t us)
  int64_t
  tvh_usleep(int64_t us)
  {
@@ -13,7 +13,7 @@ Submitted by:	Bernhard Froehlich <[email protected]>
    return usleep(us);
  #else
    struct timespec ts;
-@@ -345,7 +345,7 @@
+@@ -192,7 +192,7 @@ tvh_usleep_abs(int64_t us)
  int64_t
  tvh_usleep_abs(int64_t us)
  {
diff --git a/multimedia/tvheadend/pkg-plist b/multimedia/tvheadend/pkg-plist
index 6c63423de5ad..ac61ef091fa3 100644
--- a/multimedia/tvheadend/pkg-plist
+++ b/multimedia/tvheadend/pkg-plist
@@ -1,6 +1,19 @@
+bin/tv_meta_tmdb.py
+bin/tv_meta_tvdb.py
 bin/tvheadend
+bin/tvhmeta
 share/man/man1/tvheadend.1.gz
 %%DATADIR%%/data/conf/descrambler
+%%DATADIR%%/data/conf/epggrab/eit/config
+%%DATADIR%%/data/conf/epggrab/eit/scrape/README
+%%DATADIR%%/data/conf/epggrab/eit/scrape/README.uk
+%%DATADIR%%/data/conf/epggrab/eit/scrape/au
+%%DATADIR%%/data/conf/epggrab/eit/scrape/bg
+%%DATADIR%%/data/conf/epggrab/eit/scrape/fi
+%%DATADIR%%/data/conf/epggrab/eit/scrape/it
+%%DATADIR%%/data/conf/epggrab/eit/scrape/nz
+%%DATADIR%%/data/conf/epggrab/eit/scrape/pl
+%%DATADIR%%/data/conf/epggrab/eit/scrape/uk
 %%DATADIR%%/data/conf/epggrab/opentv/dict/skyeng
 %%DATADIR%%/data/conf/epggrab/opentv/dict/skyit
 %%DATADIR%%/data/conf/epggrab/opentv/dict/skynz
@@ -13,15 +26,20 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/data/conf/epggrab/opentv/prov/skynz
 %%DATADIR%%/data/conf/epggrab/opentv/prov/skyuk
 %%DATADIR%%/data/conf/fastscan
+%%DATADIR%%/data/conf/profiles
 %%DATADIR%%/data/conf/satellites
+%%DATADIR%%/data/conf/transcoder/codecs
+%%DATADIR%%/data/conf/transcoder/profiles
 %%DATADIR%%/src/webui/static/app/acleditor.js
 %%DATADIR%%/src/webui/static/app/caclient.js
 %%DATADIR%%/src/webui/static/app/chconf.js
+%%DATADIR%%/src/webui/static/app/codec.js
 %%DATADIR%%/src/webui/static/app/comet.js
 %%DATADIR%%/src/webui/static/app/config.js
 %%DATADIR%%/src/webui/static/app/cteditor.js
 %%DATADIR%%/src/webui/static/app/dvr.js
 %%DATADIR%%/src/webui/static/app/epg.js
+%%DATADIR%%/src/webui/static/app/epgevent.js
 %%DATADIR%%/src/webui/static/app/epggrab.js
 %%DATADIR%%/src/webui/static/app/esfilter.js
 %%DATADIR%%/src/webui/static/app/ext-access.css
@@ -35,6 +53,8 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/app/marked.js
 %%DATADIR%%/src/webui/static/app/mpegts.js
 %%DATADIR%%/src/webui/static/app/namespace.js
+%%DATADIR%%/src/webui/static/app/profile.js
+%%DATADIR%%/src/webui/static/app/ratinglabels.js
 %%DATADIR%%/src/webui/static/app/servicemapper.js
 %%DATADIR%%/src/webui/static/app/status.js
 %%DATADIR%%/src/webui/static/app/timeshift.js
@@ -986,7 +1006,9 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/icons/connections.png
 %%DATADIR%%/src/webui/static/icons/control_pause.png
 %%DATADIR%%/src/webui/static/icons/control_play.png
+%%DATADIR%%/src/webui/static/icons/control_repeat_blue.png
 %%DATADIR%%/src/webui/static/icons/control_stop.png
+%%DATADIR%%/src/webui/static/icons/csfd.png
 %%DATADIR%%/src/webui/static/icons/debug.png
 %%DATADIR%%/src/webui/static/icons/delete.png
 %%DATADIR%%/src/webui/static/icons/download.png
@@ -1001,11 +1023,165 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/icons/film.png
 %%DATADIR%%/src/webui/static/icons/film_edit.png
 %%DATADIR%%/src/webui/static/icons/film_key.png
+%%DATADIR%%/src/webui/static/icons/filmaffinity.png
 %%DATADIR%%/src/webui/static/icons/find.png
 %%DATADIR%%/src/webui/static/icons/full_screen.png
 %%DATADIR%%/src/webui/static/icons/general.png
 %%DATADIR%%/src/webui/static/icons/group.png
 %%DATADIR%%/src/webui/static/icons/help.png
+%%DATADIR%%/src/webui/static/icons/hires/README
+%%DATADIR%%/src/webui/static/icons/hires/airplane.png
+%%DATADIR%%/src/webui/static/icons/hires/ambulance.png
+%%DATADIR%%/src/webui/static/icons/hires/american_football.png
+%%DATADIR%%/src/webui/static/icons/hires/artist_pallette.png
+%%DATADIR%%/src/webui/static/icons/hires/automobile.png
+%%DATADIR%%/src/webui/static/icons/hires/baby.png
+%%DATADIR%%/src/webui/static/icons/hires/ballot_box_with_ballot.png
+%%DATADIR%%/src/webui/static/icons/hires/baseball.png
+%%DATADIR%%/src/webui/static/icons/hires/basketball_and_hoop.png
+%%DATADIR%%/src/webui/static/icons/hires/beach_with_umbrella.png
+%%DATADIR%%/src/webui/static/icons/hires/bow_and_arrow.png
+%%DATADIR%%/src/webui/static/icons/hires/boxing_glove.png
+%%DATADIR%%/src/webui/static/icons/hires/cactus.png
+%%DATADIR%%/src/webui/static/icons/hires/castle.png
+%%DATADIR%%/src/webui/static/icons/hires/chart_with_upwards_trend.png
+%%DATADIR%%/src/webui/static/icons/hires/clapper_board.png
+%%DATADIR%%/src/webui/static/icons/hires/collision_symbol.png
+%%DATADIR%%/src/webui/static/icons/hires/construction_worker.png
+%%DATADIR%%/src/webui/static/icons/hires/cooking.png
+%%DATADIR%%/src/webui/static/icons/hires/couch_and_lamp.png
+%%DATADIR%%/src/webui/static/icons/hires/dancer.png
+%%DATADIR%%/src/webui/static/icons/hires/elephant.png
+%%DATADIR%%/src/webui/static/icons/hires/extraterrestrial_alien.png
+%%DATADIR%%/src/webui/static/icons/hires/face_with_tears_of_joy.png
+%%DATADIR%%/src/webui/static/icons/hires/family.png
+%%DATADIR%%/src/webui/static/icons/hires/film_frames.png
+%%DATADIR%%/src/webui/static/icons/hires/fishing_pole_and_fish.png
+%%DATADIR%%/src/webui/static/icons/hires/game_die.png
+%%DATADIR%%/src/webui/static/icons/hires/ghost.png
+%%DATADIR%%/src/webui/static/icons/hires/graduation_cap.png
+%%DATADIR%%/src/webui/static/icons/hires/grinning_face.png
+%%DATADIR%%/src/webui/static/icons/hires/high_heeled_shoe.png
+%%DATADIR%%/src/webui/static/icons/hires/horse_face.png
+%%DATADIR%%/src/webui/static/icons/hires/house_with_garden.png
+%%DATADIR%%/src/webui/static/icons/hires/ice_skate.png
+%%DATADIR%%/src/webui/static/icons/hires/left_pointing_magnifying_glass.png
+%%DATADIR%%/src/webui/static/icons/hires/link_symbol.png
+%%DATADIR%%/src/webui/static/icons/hires/martial_arts_uniform.png
+%%DATADIR%%/src/webui/static/icons/hires/microphone.png
+%%DATADIR%%/src/webui/static/icons/hires/microscope.png
+%%DATADIR%%/src/webui/static/icons/hires/military_medal.png
+%%DATADIR%%/src/webui/static/icons/hires/money_with_wings.png
+%%DATADIR%%/src/webui/static/icons/hires/musical_note.png
+%%DATADIR%%/src/webui/static/icons/hires/newspaper.png
+%%DATADIR%%/src/webui/static/icons/hires/no_one_under_eighteen_symbol.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/LICENSE
+%%DATADIR%%/src/webui/static/icons/hires/noto/URL
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f195.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f335.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f393.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f396.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f39e.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3a3.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3a4.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3a8.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3ac.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3ad.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3b2.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3b5.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3be.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3c0.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3c5.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3c8.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3ca_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3cb_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3cd.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3ce.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3d6.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3e1.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3f0.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f3f9.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f418.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f434.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f43e.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f460.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f468_200d_1f373.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f468_200d_1f469_200d_1f466.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f46e_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f476.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f477_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f47b.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f47d.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f480.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f483.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4a5.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4ac.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4b8.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4bb.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4c8.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4f0.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4fa.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f4fb.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f50d.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f517.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f51e.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f52c.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f575_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f5e3.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f5f3.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f600.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f602.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f691.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f697.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f6cb.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f6d0.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f6d2.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f933.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f938_200d_2640.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f93c_200d_2642.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f94a.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f94b.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f984.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u1f9d8_200d_2640.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u2660.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u26bd.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u26be.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u26c5.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u26f7.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u26f8.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u2708.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u270f.png
+%%DATADIR%%/src/webui/static/icons/hires/noto/emoji_u2764.png
+%%DATADIR%%/src/webui/static/icons/hires/paw_prints.png
+%%DATADIR%%/src/webui/static/icons/hires/pencil.png
+%%DATADIR%%/src/webui/static/icons/hires/performing_arts.png
+%%DATADIR%%/src/webui/static/icons/hires/person_doing_cartwheel.png
+%%DATADIR%%/src/webui/static/icons/hires/person_in_lotus_position.png
+%%DATADIR%%/src/webui/static/icons/hires/person_lifting_weights.png
+%%DATADIR%%/src/webui/static/icons/hires/personal_computer.png
+%%DATADIR%%/src/webui/static/icons/hires/place_of_worship.png
+%%DATADIR%%/src/webui/static/icons/hires/police_officer.png
+%%DATADIR%%/src/webui/static/icons/hires/racing_car.png
+%%DATADIR%%/src/webui/static/icons/hires/racing_motorcycle.png
+%%DATADIR%%/src/webui/static/icons/hires/radio.png
+%%DATADIR%%/src/webui/static/icons/hires/red_heart.png
+%%DATADIR%%/src/webui/static/icons/hires/selfie.png
+%%DATADIR%%/src/webui/static/icons/hires/shopping_trolley.png
+%%DATADIR%%/src/webui/static/icons/hires/skier.png
+%%DATADIR%%/src/webui/static/icons/hires/skull.png
+%%DATADIR%%/src/webui/static/icons/hires/soccer_ball.png
+%%DATADIR%%/src/webui/static/icons/hires/spade_suit.png
+%%DATADIR%%/src/webui/static/icons/hires/speaking_head_in_silhouette.png
+%%DATADIR%%/src/webui/static/icons/hires/speech_balloon.png
+%%DATADIR%%/src/webui/static/icons/hires/sports_medal.png
+%%DATADIR%%/src/webui/static/icons/hires/spy.png
+%%DATADIR%%/src/webui/static/icons/hires/squared_new.png
+%%DATADIR%%/src/webui/static/icons/hires/sun_behind_cloud.png
+%%DATADIR%%/src/webui/static/icons/hires/swimmer.png
+%%DATADIR%%/src/webui/static/icons/hires/television.png
+%%DATADIR%%/src/webui/static/icons/hires/tennis_racquet_and_ball.png
+%%DATADIR%%/src/webui/static/icons/hires/unicorn_face.png
+%%DATADIR%%/src/webui/static/icons/hires/wrestlers.png
 %%DATADIR%%/src/webui/static/icons/imdb.png
 %%DATADIR%%/src/webui/static/icons/imgcacheconf.png
 %%DATADIR%%/src/webui/static/icons/information.png
@@ -1013,6 +1189,7 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/icons/key.png
 %%DATADIR%%/src/webui/static/icons/layers.png
 %%DATADIR%%/src/webui/static/icons/linked.gif
+%%DATADIR%%/src/webui/static/icons/list.png
 %%DATADIR%%/src/webui/static/icons/mux_schedulers.png
 %%DATADIR%%/src/webui/static/icons/muxes.png
 %%DATADIR%%/src/webui/static/icons/networks.png
@@ -1021,6 +1198,7 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/icons/pass.png
 %%DATADIR%%/src/webui/static/icons/pci.png
 %%DATADIR%%/src/webui/static/icons/plugin.png
+%%DATADIR%%/src/webui/static/icons/plugin_disabled.png
 %%DATADIR%%/src/webui/static/icons/progress-bg-green.gif
 %%DATADIR%%/src/webui/static/icons/progress-bg-orange.gif
 %%DATADIR%%/src/webui/static/icons/progress-bg-red.gif
@@ -1056,34 +1234,36 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/icons/world_add.png
 %%DATADIR%%/src/webui/static/icons/wrench.png
 %%DATADIR%%/src/webui/static/img/bg-header.png
-%%DATADIR%%/src/webui/static/img/doc/access_entry/new.png
-%%DATADIR%%/src/webui/static/img/doc/access_entry/tab.png
-%%DATADIR%%/src/webui/static/img/doc/before_begin/schematic.png
-%%DATADIR%%/src/webui/static/img/doc/bouquet/add.png
-%%DATADIR%%/src/webui/static/img/doc/bouquet/detach.png
-%%DATADIR%%/src/webui/static/img/doc/bouquet/tab.png
-%%DATADIR%%/src/webui/static/img/doc/caclient/tab.png
-%%DATADIR%%/src/webui/static/img/doc/caclient_capmt/tab.png
+%%DATADIR%%/src/webui/static/img/doc/caclient/cas.png
 %%DATADIR%%/src/webui/static/img/doc/channel/add.png
-%%DATADIR%%/src/webui/static/img/doc/channel/tab.png
-%%DATADIR%%/src/webui/static/img/doc/channeltag/tab.png
-%%DATADIR%%/src/webui/static/img/doc/config/tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/bouquet_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/channels_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/channeltag_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/detach_bouquet.png
+%%DATADIR%%/src/webui/static/img/doc/channel/epgconf_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/grabber_channels_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/grabber_modules_tab.png
+%%DATADIR%%/src/webui/static/img/doc/channel/grabber_xpath_fields.png
+%%DATADIR%%/src/webui/static/img/doc/config/base.png
+%%DATADIR%%/src/webui/static/img/doc/config/imagecache.png
+%%DATADIR%%/src/webui/static/img/doc/config/satip_server.png
 %%DATADIR%%/src/webui/static/img/doc/debugging/tab.png
-%%DATADIR%%/src/webui/static/img/doc/dvrautorec/add.png
-%%DATADIR%%/src/webui/static/img/doc/dvrautorec/tab.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_mux_sched.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_muxes.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_networks.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_service.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_service_info.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/dvbinput_tab.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/service_mapper_dialog.png
+%%DATADIR%%/src/webui/static/img/doc/dvbinputs/the_tree_explained.png
+%%DATADIR%%/src/webui/static/img/doc/dvr/add.png
+%%DATADIR%%/src/webui/static/img/doc/dvr/addtimer.png
+%%DATADIR%%/src/webui/static/img/doc/dvr/tab.png
 %%DATADIR%%/src/webui/static/img/doc/dvrconfig/tab.png
-%%DATADIR%%/src/webui/static/img/doc/dvrentry/add.png
-%%DATADIR%%/src/webui/static/img/doc/dvrentry/tab.png
-%%DATADIR%%/src/webui/static/img/doc/dvrtimerec/add.png
-%%DATADIR%%/src/webui/static/img/doc/dvrtimerec/tab.png
 %%DATADIR%%/src/webui/static/img/doc/epg/autorec.png
-%%DATADIR%%/src/webui/static/img/doc/epg/series_link.png
 %%DATADIR%%/src/webui/static/img/doc/epg/tab.png
-%%DATADIR%%/src/webui/static/img/doc/epgconf/tab.png
-%%DATADIR%%/src/webui/static/img/doc/epggrabber_channel/tab.png
-%%DATADIR%%/src/webui/static/img/doc/epggrabber_modules/tab.png
-%%DATADIR%%/src/webui/static/img/doc/filters/example.png
-%%DATADIR%%/src/webui/static/img/doc/filters/tab.png
+%%DATADIR%%/src/webui/static/img/doc/firstconfig/adapters.png
+%%DATADIR%%/src/webui/static/img/doc/firstconfig/wizard.png
 %%DATADIR%%/src/webui/static/img/doc/icons/abort.png
 %%DATADIR%%/src/webui/static/img/doc/icons/accept.png
 %%DATADIR%%/src/webui/static/img/doc/icons/acl.png
@@ -1115,7 +1295,9 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/img/doc/icons/connections.png
 %%DATADIR%%/src/webui/static/img/doc/icons/control_pause.png
 %%DATADIR%%/src/webui/static/img/doc/icons/control_play.png
+%%DATADIR%%/src/webui/static/img/doc/icons/control_repeat_blue.png
 %%DATADIR%%/src/webui/static/img/doc/icons/control_stop.png
+%%DATADIR%%/src/webui/static/img/doc/icons/csfd.png
 %%DATADIR%%/src/webui/static/img/doc/icons/debug.png
 %%DATADIR%%/src/webui/static/img/doc/icons/delete.png
 %%DATADIR%%/src/webui/static/img/doc/icons/download.png
@@ -1130,11 +1312,165 @@ share/man/man1/tvheadend.1.gz
 %%DATADIR%%/src/webui/static/img/doc/icons/film.png
 %%DATADIR%%/src/webui/static/img/doc/icons/film_edit.png
 %%DATADIR%%/src/webui/static/img/doc/icons/film_key.png
+%%DATADIR%%/src/webui/static/img/doc/icons/filmaffinity.png
 %%DATADIR%%/src/webui/static/img/doc/icons/find.png
 %%DATADIR%%/src/webui/static/img/doc/icons/full_screen.png
 %%DATADIR%%/src/webui/static/img/doc/icons/general.png
 %%DATADIR%%/src/webui/static/img/doc/icons/group.png
 %%DATADIR%%/src/webui/static/img/doc/icons/help.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/README
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/airplane.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/ambulance.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/american_football.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/artist_pallette.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/automobile.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/baby.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/ballot_box_with_ballot.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/baseball.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/basketball_and_hoop.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/beach_with_umbrella.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/bow_and_arrow.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/boxing_glove.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/cactus.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/castle.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/chart_with_upwards_trend.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/clapper_board.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/collision_symbol.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/construction_worker.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/cooking.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/couch_and_lamp.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/dancer.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/elephant.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/extraterrestrial_alien.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/face_with_tears_of_joy.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/family.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/film_frames.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/fishing_pole_and_fish.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/game_die.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/ghost.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/graduation_cap.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/grinning_face.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/high_heeled_shoe.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/horse_face.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/house_with_garden.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/ice_skate.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/left_pointing_magnifying_glass.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/link_symbol.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/martial_arts_uniform.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/microphone.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/microscope.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/military_medal.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/money_with_wings.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/musical_note.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/newspaper.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/no_one_under_eighteen_symbol.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/LICENSE
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/URL
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f195.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f335.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f393.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f396.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f39e.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3a3.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3a4.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3a8.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3ac.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3ad.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3b2.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3b5.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3be.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3c0.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3c5.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3c8.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3ca_200d_2642.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3cb_200d_2642.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3cd.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3ce.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3d6.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3e1.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3f0.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f3f9.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f418.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f434.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f43e.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f460.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f468_200d_1f373.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f468_200d_1f469_200d_1f466.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f46e_200d_2642.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f476.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f477_200d_2642.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f47b.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f47d.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f480.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f483.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4a5.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4ac.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4b8.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4bb.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4c8.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4f0.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4fa.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f4fb.png
+%%DATADIR%%/src/webui/static/img/doc/icons/hires/noto/emoji_u1f50d.png
*** 165 LINES SKIPPED ***