git: 670212fe204e - main - net/teddycloud: Update 0.6.4 => 0.6.7
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 25 Jan 2026 19:33:33 UTC
The branch main has been updated by vvd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=670212fe204e0601bdbea8eed8326ec05fce8651
commit 670212fe204e0601bdbea8eed8326ec05fce8651
Author: Michael Pape <freebsd@pe82.de>
AuthorDate: 2026-01-25 19:01:30 +0000
Commit: Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-01-25 19:33:26 +0000
net/teddycloud: Update 0.6.4 => 0.6.7
Changelogs:
https://github.com/toniebox-reverse-engineering/teddycloud/releases/tag/tc_v0.6.5
https://github.com/toniebox-reverse-engineering/teddycloud/releases/tag/tc_v0.6.6
https://github.com/toniebox-reverse-engineering/teddycloud/releases/tag/tc_v0.6.7
Improve port:
- Un-bundle libcjson, libogg and opus.
- Replace "BUILD_DEPENDS+=" with "BUILD_DEPENDS=".
- Add USES+=dos2unix - source files use DOS end-of-line characters.
- Use ETCDIR instead of ${PREFIX}/etc/teddycloud.
- Optimize do-install - remove duplicates, merge COPYTREE_SHARE, remove
unnecessary MKDIR.
- Remove empty post-extract.
PR: 292663
Co-authored-by: Vladimir Druzenko <vvd@FreeBSD.org>
---
net/teddycloud/Makefile | 50 ++--
net/teddycloud/distinfo | 40 ++-
net/teddycloud/files/patch-Makefile | 163 +++++++++++
.../files/patch-cyclone_common_compiler__port.h | 13 -
net/teddycloud/files/patch-include_json__helper.h | 11 +
net/teddycloud/files/patch-src_contentJson.c | 13 +
net/teddycloud/files/patch-src_handler__api.c | 18 ++
net/teddycloud/files/patch-src_home__assistant.c | 19 ++
net/teddycloud/files/patch-src_main.c | 14 +
.../files/patch-src_tonie__audio__playlist.c | 14 +
net/teddycloud/files/patch-src_toniefile.c | 11 +
net/teddycloud/files/patch-src_toniesJson.c | 15 +
net/teddycloud/pkg-plist | 311 ++++++++++++++++++++-
13 files changed, 614 insertions(+), 78 deletions(-)
diff --git a/net/teddycloud/Makefile b/net/teddycloud/Makefile
index a1750d0242a9..c969558188ca 100644
--- a/net/teddycloud/Makefile
+++ b/net/teddycloud/Makefile
@@ -1,11 +1,10 @@
PORTNAME= teddycloud
DISTVERSIONPREFIX= tc_v
-DISTVERSION= 0.6.4
-PORTREVISION= 2
+DISTVERSION= 0.6.7
CATEGORIES= net
# Get the latest commit hashes here: https://github.com/toniebox-reverse-engineering/tonies-json/commits/release/
# NOTE: remove the existing tonies.json and tonieboxes.json from DISTDIR before you do a `make makesum`
-MASTER_SITES= https://raw.githubusercontent.com/toniebox-reverse-engineering/tonies-json/c874ca0c33eb929ee1c94983f53f3f8a55445c6b/:toniesjson
+MASTER_SITES= https://raw.githubusercontent.com/toniebox-reverse-engineering/tonies-json/cd5f06d9183470867822d0773ddc0de519d3d46e/:toniesjson
DISTFILES= tonies.json:toniesjson \
tonieboxes.json:toniesjson
EXTRACT_ONLY= ${DISTFILES:N*\:toniesjson:C/\:.*//}
@@ -19,63 +18,56 @@ LICENSE= GPLv2+
NOT_FOR_ARCHS= armv6 armv7 i386 powerpc powerpcspe
NOT_FOR_ARCHS_REASON= 32bit targets do not build due to type issues. Upstream library assumes FreeBSD to be 64bit.
-BUILD_DEPENDS+= curl:ftp/curl \
+BUILD_DEPENDS= curl:ftp/curl \
protoc-c:devel/protobuf-c
-USES= gmake
+LIB_DEPENDS= libcjson.so:devel/libcjson \
+ libogg.so:audio/libogg \
+ libopus.so:audio/opus
+
+USES= dos2unix gmake
USE_GCC= yes
USE_GITHUB= yes
GH_ACCOUNT= toniebox-reverse-engineering:DEFAULT,teddycloud_web \
- DaveGamble:cJSON \
- xiph:ogg,opus \
Oryx-Embedded:cyclone_common,cyclone_crypto,cyclone_ssl,cyclone_tcp
-GH_PROJECT= cJSON:cJSON ogg:ogg opus:opus teddycloud_web:teddycloud_web \
+GH_PROJECT= teddycloud_web:teddycloud_web \
Common:cyclone_common CycloneCRYPTO:cyclone_crypto \
CycloneSSL:cyclone_ssl CycloneTCP:cyclone_tcp
-GH_SUBDIR= cJSON:cJSON ogg:ogg opus:opus teddycloud_web:teddycloud_web \
+GH_SUBDIR= teddycloud_web:teddycloud_web \
cyclone/common:cyclone_common cyclone/cyclone_crypto:cyclone_crypto \
cyclone/cyclone_ssl:cyclone_ssl cyclone/cyclone_tcp:cyclone_tcp
# find versions here clone the repository and switch to tag
# git submodule update
# git submodule
-GH_TAGNAME= v1.7.18:cJSON \
- v1.3.5-9-gdb5c7a4:ogg \
- v1.4-7-g101a71e0:opus \
- tcw_v${DISTVERSION}:teddycloud_web \
- v2.3.2:cyclone_common,cyclone_crypto,cyclone_ssl,cyclone_tcp
+GH_TAGNAME= tcw_v${DISTVERSION}:teddycloud_web \
+ v2.4.4:cyclone_common,cyclone_crypto,cyclone_ssl,cyclone_tcp
USE_RC_SUBR= teddycloudd
MAKE_ENV+= CONFIG_RUNTIME_BASE_PATH=${PREFIX}/etc/teddycloud \
RUNTIME_BASE_PATH=${PREFIX}/share/teddycloud \
NO_SANITIZERS=1 \
GIT_DIRTY=0 \
- GIT_BUILD_TIME="2025-03-05 08:01:37 +0000" \
- GIT_SHORT_SHA=f13703a \
- GIT_SHA=f13703ad110b6c42f693d35b7ac211e487d37c83 \
+ GIT_BUILD_TIME="2026-01-11 11:47:28 +0000" \
+ GIT_SHORT_SHA=5b59a82 \
+ GIT_SHA=5b59a82ae6c2fd8d8501ea0fe1da2e775fb8eff0 \
GIT_TAG=tc_v${DISTVERSION} \
WEB_GIT_DIRTY=0 \
- WEB_GIT_BUILD_TIME="2025-03-03 18:54:08 +0000" \
- WEB_GIT_SHORT_SHA=d24276e \
- WEB_GIT_SHA=d24276e8d0972477d988449c566879974795d02a \
+ WEB_GIT_BUILD_TIME="2026-01-11 12:46:00 +0100" \
+ WEB_GIT_SHORT_SHA=fa6babd \
+ WEB_GIT_SHA=fa6babd8487afba90e391f23714d8435574562a5 \
WEB_GIT_TAG=tcw_v${DISTVERSION}
# This did reliably fail due to some unknown deps when using parallel build
MAKE_JOBS_UNSAFE= yes
ALL_TARGET= preinstall
-post-extract:
-
pre-install:
@${CP} ${DISTFILES:M*\:toniesjson:C/\:.*//:S,^,${_DISTDIR}/,} ${WRKSRC}/install/pre/config/
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/install/pre/teddycloud ${STAGEDIR}${PREFIX}/bin
- @${MKDIR} ${STAGEDIR}${DATADIR}/certs
- @(cd ${WRKSRC}/install/pre/certs && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/certs)
- @${MKDIR} ${STAGEDIR}${DATADIR}/data
- @(cd ${WRKSRC}/install/pre/data && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/data)
- @${MKDIR} ${STAGEDIR}${DATADIR}/certs
- @(cd ${WRKSRC}/install/pre/certs && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/certs)
- @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ @(cd ${WRKSRC}/install/pre && \
+ ${COPYTREE_SHARE} "certs data" ${STAGEDIR}${DATADIR})
@(cd ${WRKSRC}/install/pre/config && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})
+ ${MKDIR} ${STAGEDIR}${ETCDIR}
.include <bsd.port.mk>
diff --git a/net/teddycloud/distinfo b/net/teddycloud/distinfo
index 191670013747..3122b91b7814 100644
--- a/net/teddycloud/distinfo
+++ b/net/teddycloud/distinfo
@@ -1,23 +1,17 @@
-TIMESTAMP = 1748811239
-SHA256 (tonies.json) = 074396727ba9738c5061bb3e22bb2e505af255adecd00b07444465ee7083156e
-SIZE (tonies.json) = 5035861
-SHA256 (tonieboxes.json) = de50e30f844dcf743617337ba158b67498117f9c459b9ca4d26097aa3cb6b36f
-SIZE (tonieboxes.json) = 2736
-SHA256 (toniebox-reverse-engineering-teddycloud-tc_v0.6.4_GH0.tar.gz) = bb77ff1f4557d02a74e275eeafcf1dfa545c3adeb017794a964113b3d36a62bd
-SIZE (toniebox-reverse-engineering-teddycloud-tc_v0.6.4_GH0.tar.gz) = 14073530
-SHA256 (toniebox-reverse-engineering-teddycloud_web-tcw_v0.6.4_GH0.tar.gz) = 60c865919d2a6c455a844a45204524c77985891e08147537e7eed28d1866cbf6
-SIZE (toniebox-reverse-engineering-teddycloud_web-tcw_v0.6.4_GH0.tar.gz) = 9308251
-SHA256 (DaveGamble-cJSON-v1.7.18_GH0.tar.gz) = 3aa806844a03442c00769b83e99970be70fbef03735ff898f4811dd03b9f5ee5
-SIZE (DaveGamble-cJSON-v1.7.18_GH0.tar.gz) = 354726
-SHA256 (xiph-ogg-v1.3.5-9-gdb5c7a4_GH0.tar.gz) = fac013405bc8ac0e1754b2de64455bc2d73c06ef181df8eb3b48d6addecd69c1
-SIZE (xiph-ogg-v1.3.5-9-gdb5c7a4_GH0.tar.gz) = 251955
-SHA256 (xiph-opus-v1.4-7-g101a71e0_GH0.tar.gz) = d6410f6fb6334672a8b4d1441a8549a6e972a811509b61b77c349a4ef553ac14
-SIZE (xiph-opus-v1.4-7-g101a71e0_GH0.tar.gz) = 855253
-SHA256 (Oryx-Embedded-Common-v2.3.2_GH0.tar.gz) = 0a251e8a3674f777e33f01a825be0f55b2092bedbedd058b579b0e00d1b0119d
-SIZE (Oryx-Embedded-Common-v2.3.2_GH0.tar.gz) = 45692
-SHA256 (Oryx-Embedded-CycloneCRYPTO-v2.3.2_GH0.tar.gz) = a37d72648d3e551a9d02106ed42fca5622a3b27d3f7f8540117fe1eb9bfde3cf
-SIZE (Oryx-Embedded-CycloneCRYPTO-v2.3.2_GH0.tar.gz) = 886577
-SHA256 (Oryx-Embedded-CycloneSSL-v2.3.2_GH0.tar.gz) = 6a9aabf7a50e5546eeab94bd70e10ba908c68dff4ebf993013dc05f36eb1acbe
-SIZE (Oryx-Embedded-CycloneSSL-v2.3.2_GH0.tar.gz) = 226189
-SHA256 (Oryx-Embedded-CycloneTCP-v2.3.2_GH0.tar.gz) = 30755eba3b96518e325c19b23279560572c7a55135af4378146ac762212a158c
-SIZE (Oryx-Embedded-CycloneTCP-v2.3.2_GH0.tar.gz) = 2149879
+TIMESTAMP = 1769203899
+SHA256 (tonies.json) = bcf1633744f731998b26249b59b37f57905af533739ec24227e19169fe7b33cd
+SIZE (tonies.json) = 5854525
+SHA256 (tonieboxes.json) = 64ef4f28973d410e49274efc22e70ffb26ddb8e54b1750332bb853b273410439
+SIZE (tonieboxes.json) = 3022
+SHA256 (toniebox-reverse-engineering-teddycloud-tc_v0.6.7_GH0.tar.gz) = 6afd7f7b430b68cbfb01a146c5e48a6d3557e4ca46601a7d4904e63d5412dfb9
+SIZE (toniebox-reverse-engineering-teddycloud-tc_v0.6.7_GH0.tar.gz) = 15462180
+SHA256 (toniebox-reverse-engineering-teddycloud_web-tcw_v0.6.7_GH0.tar.gz) = a99b63eefe8df4d9881df0c59a778010abf129c0b578adee5ee8b298c3585d94
+SIZE (toniebox-reverse-engineering-teddycloud_web-tcw_v0.6.7_GH0.tar.gz) = 10479749
+SHA256 (Oryx-Embedded-Common-v2.4.4_GH0.tar.gz) = a94348845ce224fe825086bb0fa7a1598897e532d5088e3af1145314ff01945d
+SIZE (Oryx-Embedded-Common-v2.4.4_GH0.tar.gz) = 50454
+SHA256 (Oryx-Embedded-CycloneCRYPTO-v2.4.4_GH0.tar.gz) = b61a06eedd3c71c4d5b66273682717ceb52b7dda2db51d1e156babb501f6fe79
+SIZE (Oryx-Embedded-CycloneCRYPTO-v2.4.4_GH0.tar.gz) = 1002666
+SHA256 (Oryx-Embedded-CycloneSSL-v2.4.4_GH0.tar.gz) = 2c157a27facb550ff455025439cec47df7ee187e19a52588fa20415c104c10b9
+SIZE (Oryx-Embedded-CycloneSSL-v2.4.4_GH0.tar.gz) = 234959
+SHA256 (Oryx-Embedded-CycloneTCP-v2.4.4_GH0.tar.gz) = e334aadacbd6ddcc7a17f2a1dd0d03b8029c7ba23fd789f2397b04284fee37a0
+SIZE (Oryx-Embedded-CycloneTCP-v2.4.4_GH0.tar.gz) = 2361810
diff --git a/net/teddycloud/files/patch-Makefile b/net/teddycloud/files/patch-Makefile
new file mode 100644
index 000000000000..4d0f1df6b9e5
--- /dev/null
+++ b/net/teddycloud/files/patch-Makefile
@@ -0,0 +1,163 @@
+--- Makefile.orig 2026-01-11 11:47:28 UTC
++++ Makefile
+@@ -142,7 +142,7 @@ else
+ SEP = \$(strip)
+ else
+ MKDIR = mkdir -p
+- ECHO = echo -e
++ ECHO = echo
+ RM = rm -f
+ RM_R = rm -rf
+ CP = cp
+@@ -199,7 +199,7 @@ CFLAGS_linux += -DFFMPEG_DECODING
+ endif
+ CFLAGS_linux += -ggdb
+ CFLAGS_linux += -DFFMPEG_DECODING
+-LFLAGS_linux += -pthread -lm
++LFLAGS_linux += -pthread -lm -lcjson -logg -lopus
+
+ ifeq ($(NO_SANITIZERS),2)
+ # Workaround for broken libasan (disable it for now)
+@@ -242,30 +242,17 @@ INCLUDES = \
+ -Icyclone/cyclone_crypto/pkix \
+ -Icyclone/cyclone_crypto/pkc \
+ -Icyclone/cyclone_crypto/rng \
+- -IcJSON \
+- -Ifat/source \
+- -Iogg/include \
+- -Iogg/src \
+- -Iopus/include \
+- -Iopus/celt \
+- -Iopus/silk \
+- -Iopus/silk/float
++ -Ifat/source
+
+ SOURCES = \
+ $(wildcard $(SRC_DIR)/*.c) \
+ $(wildcard $(SRC_DIR)/proto/*.c) \
+ $(CYCLONE_SOURCES) \
+- $(LIBOPUS_SOURCES) \
+- $(LIBOGG_SOURCES) \
+- $(CJSON_SOURCES) \
+ $(FAT_SOURCES)
+
+ HEADERS = \
+ $(wildcard include/*.h) \
+ $(CYCLONE_HEADERS) \
+- $(LIBOPUS_HEADERS) \
+- $(LIBOGG_HEADERS) \
+- $(CJSON_HEADERS) \
+ $(FAT_HEADERS)
+
+
+@@ -286,45 +273,6 @@ FAT_HEADERS =\
+ FAT_HEADERS =\
+ fat/source/ff.h
+
+-CJSON_SOURCES = \
+- cJSON/cJSON.c \
+- cJSON/cJSON_Utils.c
+-
+-CJSON_HEADERS = \
+- cJSON/cJSON.h \
+- cJSON/cJSON_Utils.h
+-
+-LIBOGG_SOURCES = \
+- ogg/src/framing.c \
+- ogg/src/bitwise.c \
+-
+-include opus/silk_sources.mk
+-include opus/celt_sources.mk
+-include opus/opus_sources.mk
+-include opus/silk_headers.mk
+-include opus/celt_headers.mk
+-include opus/opus_headers.mk
+-
+-LIBOPUS_SOURCES = \
+- $(addprefix opus/,$(SILK_SOURCES)) \
+- $(addprefix opus/,$(SILK_SOURCES_FLOAT)) \
+- $(addprefix opus/,$(CELT_SOURCES)) \
+- $(addprefix opus/,$(OPUS_SOURCES)) \
+- $(addprefix opus/,$(OPUS_SOURCES_FLOAT))
+-
+-LIBOPUS_SOURCES := \
+- $(filter-out \
+- opus/src/repacketizer.c \
+- , $(LIBOPUS_SOURCES))
+-
+-LIBOPUS_SOURCES += \
+- src/opus/src/repacketizer.c
+-
+-LIBOPUS_HEADERS = \
+- $(addprefix opus/,$(SILK_HEAD)) \
+- $(addprefix opus/,$(CELT_HEAD)) \
+- $(addprefix opus/,$(OPUS_HEAD)) \
+-
+ CYCLONE_SOURCES = \
+ cyclone/common/cpu_endian.c \
+ cyclone/common/date_time.c \
+@@ -446,10 +394,6 @@ CFLAGS += $(INCLUDES)
+ CFLAGS += ${CFLAGS_VERSION}
+ CFLAGS += $(INCLUDES)
+
+-# for opus encoder
+-CFLAGS += -DUSE_ALLOCA -DOPUS_BUILD
+-CFLAGS_linux += -Wno-error=stringop-overflow= -Wno-error=stringop-overread
+-
+ THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
+
+ # Location of your .proto files
+@@ -476,19 +420,11 @@ CLEAN_FILES += $(OBJECTS) $(LINK_LO_FILE)
+ OBJECTS = $(foreach C,$(SOURCES),$(addprefix $(OBJ_DIR)/,$(C:.c=$(OBJ_EXT))))
+ CLEAN_FILES += $(OBJECTS) $(LINK_LO_FILE)
+
+-ifeq ($(OS),Windows_NT)
+- CYAN=
+- RED=
+- YELLOW=
+- GREEN=
+- NC=
+-else
+- CYAN=\033[0;36m
+- RED=\033[0;31m
+- YELLOW=\033[0;33m
+- GREEN=\033[0;32m
+- NC=\033[0m
+-endif
++CYAN=
++RED=
++YELLOW=
++GREEN=
++NC=
+
+ ifeq ($(VERBOSE),1)
+ QUIET=
+@@ -560,26 +496,17 @@ TAF_ENCODER_SOURCES = \
+ wasm/taf_encoder_minimal.c \
+ wasm/sha1_standalone.c \
+ src/proto/proto/toniebox.pb.taf-header.pb-c.c \
+- src/proto/protobuf-c.c \
+- $(LIBOPUS_SOURCES) \
+- $(LIBOGG_SOURCES)
++ src/proto/protobuf-c.c
+
+ # Common include paths for TAF encoder
+ TAF_ENCODER_INCLUDES = \
+ -Isrc/proto \
+ -Iinclude/protobuf-c \
+ -Iwasm/include \
+- -Iinclude \
+- -Iogg/include \
+- -Iogg/src \
+- -Iopus/include \
+- -Iopus/celt \
+- -Iopus/silk \
+- -Iopus/silk/float
++ -Iinclude
+
+ # Common compiler flags for TAF encoder
+ TAF_ENCODER_CFLAGS = \
+- -DOPUS_BUILD \
+ -DHAVE_LRINT \
+ -DHAVE_LRINTF \
+ -DFLOATING_POINT \
diff --git a/net/teddycloud/files/patch-cyclone_common_compiler__port.h b/net/teddycloud/files/patch-cyclone_common_compiler__port.h
deleted file mode 100644
index 985ff2f920a1..000000000000
--- a/net/teddycloud/files/patch-cyclone_common_compiler__port.h
+++ /dev/null
@@ -1,13 +0,0 @@
---- cyclone/common/compiler_port.h.orig 2024-01-17 21:26:40 UTC
-+++ cyclone/common/compiler_port.h
-@@ -105,8 +105,8 @@ typedef unsigned int uint_t;
- #define PRIuSIZE "u"
- #define PRIXSIZE "X"
- #define PRIuTIME "lu"
--//Linux GCC compiler
--#elif defined(__linux__)
-+//Linux/FreeBSD GCC compiler
-+#elif defined(__linux__) || defined(__FreeBSD__)
- #define PRIuSIZE "zu"
- #define PRIXSIZE "zX"
- #define PRIuTIME "lu"
diff --git a/net/teddycloud/files/patch-include_json__helper.h b/net/teddycloud/files/patch-include_json__helper.h
new file mode 100644
index 000000000000..992e2c82f071
--- /dev/null
+++ b/net/teddycloud/files/patch-include_json__helper.h
@@ -0,0 +1,11 @@
+--- include/json_helper.h.orig 2026-01-23 20:45:38 UTC
++++ include/json_helper.h
+@@ -1,6 +1,7 @@
+ #pragma once
+
+-#include "cJSON.h"
++#include <cjson/cJSON.h>
++
+ #include "debug.h"
+
+ char *jsonGetString(cJSON *jsonElement, char *name);
diff --git a/net/teddycloud/files/patch-src_contentJson.c b/net/teddycloud/files/patch-src_contentJson.c
new file mode 100644
index 000000000000..b169baabb18a
--- /dev/null
+++ b/net/teddycloud/files/patch-src_contentJson.c
@@ -0,0 +1,13 @@
+--- src/contentJson.c.orig 2026-01-23 20:44:06 UTC
++++ src/contentJson.c
+@@ -1,8 +1,9 @@
++#include <cjson/cJSON.h>
++
+ #include "contentJson.h"
+
+ #include "settings.h"
+ #include "debug.h"
+-#include "cJSON.h"
+ #include "net_config.h"
+ #include "server_helpers.h"
+ #include "toniesJson.h"
diff --git a/net/teddycloud/files/patch-src_handler__api.c b/net/teddycloud/files/patch-src_handler__api.c
new file mode 100644
index 000000000000..654979580a67
--- /dev/null
+++ b/net/teddycloud/files/patch-src_handler__api.c
@@ -0,0 +1,18 @@
+--- src/handler_api.c.orig 2026-01-23 20:46:20 UTC
++++ src/handler_api.c
+@@ -5,6 +5,7 @@
+ #include <stdint.h>
+ #include <string.h>
+ #include <stdio.h>
++#include <cjson/cJSON.h>
+
+ #include "path.h"
+ #include "path_ext.h"
+@@ -16,7 +17,6 @@
+ #include "settings.h"
+ #include "stats.h"
+ #include "returncodes.h"
+-#include "cJSON.h"
+ #include "toniefile.h"
+ #include "toniesJson.h"
+ #include "fs_ext.h"
diff --git a/net/teddycloud/files/patch-src_home__assistant.c b/net/teddycloud/files/patch-src_home__assistant.c
new file mode 100644
index 000000000000..c5fb4fc3cc35
--- /dev/null
+++ b/net/teddycloud/files/patch-src_home__assistant.c
@@ -0,0 +1,19 @@
+--- src/home_assistant.c.orig 2026-01-23 20:47:15 UTC
++++ src/home_assistant.c
+@@ -1,6 +1,7 @@
+
+ #include <string.h>
+ #include <math.h>
++#include <cjson/cJSON.h>
+
+ #include "platform.h"
+ #include "debug.h"
+@@ -8,8 +9,6 @@
+ #include "home_assistant.h"
+ #include "macros.h"
+ #include "mqtt.h"
+-
+-#include "cJSON.h"
+
+ static int32_t coerce_int32(float value, int32_t min, int32_t max)
+ {
diff --git a/net/teddycloud/files/patch-src_main.c b/net/teddycloud/files/patch-src_main.c
new file mode 100644
index 000000000000..55666d94b88c
--- /dev/null
+++ b/net/teddycloud/files/patch-src_main.c
@@ -0,0 +1,14 @@
+--- src/main.c.orig 2026-01-23 20:47:56 UTC
++++ src/main.c
+@@ -7,10 +7,10 @@
+ #include <stdint.h>
+ #include <math.h>
+ #include <getopt.h>
++#include <cjson/cJSON.h>
+
+ #include "error.h"
+ #include "debug.h"
+-#include "cJSON.h"
+ #include "esp32.h"
+
+ #include "version.h"
diff --git a/net/teddycloud/files/patch-src_tonie__audio__playlist.c b/net/teddycloud/files/patch-src_tonie__audio__playlist.c
new file mode 100644
index 000000000000..d26eb2e097de
--- /dev/null
+++ b/net/teddycloud/files/patch-src_tonie__audio__playlist.c
@@ -0,0 +1,14 @@
+--- src/tonie_audio_playlist.c.orig 2026-01-23 20:51:18 UTC
++++ src/tonie_audio_playlist.c
+@@ -1,9 +1,10 @@
++#include <cjson/cJSON.h>
++
+ #include "tonie_audio_playlist.h"
+
+ #include "fs_port.h"
+ #include "toniefile.h"
+ #include "server_helpers.h"
+-#include "cJSON.h"
+ #include "json_helper.h"
+ #include "handler.h"
+
diff --git a/net/teddycloud/files/patch-src_toniefile.c b/net/teddycloud/files/patch-src_toniefile.c
new file mode 100644
index 000000000000..abcf81298842
--- /dev/null
+++ b/net/teddycloud/files/patch-src_toniefile.c
@@ -0,0 +1,11 @@
+--- src/toniefile.c.orig 2026-01-23 21:17:26 UTC
++++ src/toniefile.c
+@@ -17,7 +17,7 @@
+ #include "os_port.h"
+ #include "os_ext.h"
+ #include "debug.h"
+-#include "opus.h"
++#include "opus/opus.h"
+ #include "ogg/ogg.h"
+ #include "server_helpers.h"
+ #include "version.h"
diff --git a/net/teddycloud/files/patch-src_toniesJson.c b/net/teddycloud/files/patch-src_toniesJson.c
new file mode 100644
index 000000000000..40ae0955ac69
--- /dev/null
+++ b/net/teddycloud/files/patch-src_toniesJson.c
@@ -0,0 +1,15 @@
+--- src/toniesJson.c.orig 2026-01-23 20:52:16 UTC
++++ src/toniesJson.c
+@@ -1,10 +1,11 @@
++#include <cjson/cJSON.h>
++
+ #include "toniesJson.h"
+ #include "fs_port.h"
+ #include "os_port.h"
+ #include "settings.h"
+ #include "cache.h"
+ #include "debug.h"
+-#include "cJSON.h"
+ #include "handler.h"
+ #include "cloud_request.h"
+ #include "server_helpers.h"
diff --git a/net/teddycloud/pkg-plist b/net/teddycloud/pkg-plist
index 4b357f18a1c3..7f5676f69908 100644
--- a/net/teddycloud/pkg-plist
+++ b/net/teddycloud/pkg-plist
@@ -15,6 +15,10 @@ bin/teddycloud
%%DATADIR%%/data/www/library/react-dom.development.js
%%DATADIR%%/data/www/library/react.development.js
%%DATADIR%%/data/www/robots.txt
+%%DATADIR%%/data/www/web/apple-touch-icon-120x120.png
+%%DATADIR%%/data/www/web/apple-touch-icon-152x152.png
+%%DATADIR%%/data/www/web/apple-touch-icon-167x167.png
+%%DATADIR%%/data/www/web/apple-touch-icon.png
%%DATADIR%%/data/www/web/assets/01_CH341A_programmer_1-BWh6CFRm.png
%%DATADIR%%/data/www/web/assets/01_CH341A_programmer_2-DLQkFrYM.png
%%DATADIR%%/data/www/web/assets/02_CH341A_sop8_1-B7nvMxlQ.jpg
@@ -25,6 +29,265 @@ bin/teddycloud
%%DATADIR%%/data/www/web/assets/3200_pcb_preview-BvQM-e4R.png
%%DATADIR%%/data/www/web/assets/3235_pcb-BE0vs2bl.png
%%DATADIR%%/data/www/web/assets/3235_pcb_preview-DkVKgZS0.png
+%%DATADIR%%/data/www/web/assets/AC-DvzLgDzl.js
+%%DATADIR%%/data/www/web/assets/AD-0YtvGfyJ.js
+%%DATADIR%%/data/www/web/assets/AE-ChB4l_EO.js
+%%DATADIR%%/data/www/web/assets/AF-BnD1yvCV.js
+%%DATADIR%%/data/www/web/assets/AG-BN5I_8HM.js
+%%DATADIR%%/data/www/web/assets/AI-DyA8M_FU.js
+%%DATADIR%%/data/www/web/assets/AL-BXVQWRZ5.js
+%%DATADIR%%/data/www/web/assets/AM-NLP3P44N.js
+%%DATADIR%%/data/www/web/assets/AO-DkPrV7zY.js
+%%DATADIR%%/data/www/web/assets/AQ-D3w7peYS.js
+%%DATADIR%%/data/www/web/assets/AR-CrCDb1gb.js
+%%DATADIR%%/data/www/web/assets/AS-BS3RTvVP.js
+%%DATADIR%%/data/www/web/assets/AT-1HWBUNPr.js
+%%DATADIR%%/data/www/web/assets/AU-DAwXtpdW.js
+%%DATADIR%%/data/www/web/assets/AW-CXzIUnmX.js
+%%DATADIR%%/data/www/web/assets/AX-rE6718Yf.js
+%%DATADIR%%/data/www/web/assets/AZ-Bznf-Mlc.js
+%%DATADIR%%/data/www/web/assets/BA-D2NrufK3.js
+%%DATADIR%%/data/www/web/assets/BB-DFQPCNz6.js
+%%DATADIR%%/data/www/web/assets/BD-B-QQw3jj.js
+%%DATADIR%%/data/www/web/assets/BE-DkBmiD2O.js
+%%DATADIR%%/data/www/web/assets/BF-MtzYbWUR.js
+%%DATADIR%%/data/www/web/assets/BG-Buxx41RI.js
+%%DATADIR%%/data/www/web/assets/BH-BKAvWpJ-.js
+%%DATADIR%%/data/www/web/assets/BI-DRM3gEDF.js
+%%DATADIR%%/data/www/web/assets/BJ-DQaHbLmo.js
+%%DATADIR%%/data/www/web/assets/BL-bG469lsP.js
+%%DATADIR%%/data/www/web/assets/BM-BLcb1PfF.js
+%%DATADIR%%/data/www/web/assets/BN-8lYlT0x_.js
+%%DATADIR%%/data/www/web/assets/BO-BU5jLhT5.js
+%%DATADIR%%/data/www/web/assets/BQ-D6AcQS69.js
+%%DATADIR%%/data/www/web/assets/BR-C6APLMWa.js
+%%DATADIR%%/data/www/web/assets/BS-D0c45f7-.js
+%%DATADIR%%/data/www/web/assets/BT-DtFaEhK8.js
+%%DATADIR%%/data/www/web/assets/BV-Bse7Z5R3.js
+%%DATADIR%%/data/www/web/assets/BW-Bx2saQws.js
+%%DATADIR%%/data/www/web/assets/BY-CA5NyMFR.js
+%%DATADIR%%/data/www/web/assets/BZ-CYhxcbH0.js
+%%DATADIR%%/data/www/web/assets/CA-CWAdRSSD.js
+%%DATADIR%%/data/www/web/assets/CC-1Vu5MNVk.js
+%%DATADIR%%/data/www/web/assets/CD-CMPwi19S.js
+%%DATADIR%%/data/www/web/assets/CF-D9_q27iA.js
+%%DATADIR%%/data/www/web/assets/CG-DTOQvq8q.js
+%%DATADIR%%/data/www/web/assets/CH-C_aVYgel.js
+%%DATADIR%%/data/www/web/assets/CI-mTXBVsLR.js
+%%DATADIR%%/data/www/web/assets/CK-H328ZC8P.js
+%%DATADIR%%/data/www/web/assets/CL-B5mM_kkr.js
+%%DATADIR%%/data/www/web/assets/CM-CvApswQi.js
+%%DATADIR%%/data/www/web/assets/CN-BKvdkL53.js
+%%DATADIR%%/data/www/web/assets/CO-ByrhQGvM.js
+%%DATADIR%%/data/www/web/assets/CR-BI09HFuL.js
+%%DATADIR%%/data/www/web/assets/CU-C4C68jfb.js
+%%DATADIR%%/data/www/web/assets/CV-DyZ6Ezk0.js
+%%DATADIR%%/data/www/web/assets/CW-D7IcpiXF.js
+%%DATADIR%%/data/www/web/assets/CX-DHs8nS10.js
+%%DATADIR%%/data/www/web/assets/CY-BTPkyMMF.js
+%%DATADIR%%/data/www/web/assets/CZ-UAdIkg68.js
+%%DATADIR%%/data/www/web/assets/DE-BwSz4lTD.js
+%%DATADIR%%/data/www/web/assets/DJ-BobvE7TL.js
+%%DATADIR%%/data/www/web/assets/DK-COwVG_7G.js
+%%DATADIR%%/data/www/web/assets/DM-DOv9-8d0.js
+%%DATADIR%%/data/www/web/assets/DO-CXxjIPve.js
+%%DATADIR%%/data/www/web/assets/DZ-D731vN-p.js
+%%DATADIR%%/data/www/web/assets/EC-CLkxbsC9.js
+%%DATADIR%%/data/www/web/assets/EE-Dg3eKw7r.js
+%%DATADIR%%/data/www/web/assets/EG-CS47I1Hw.js
+%%DATADIR%%/data/www/web/assets/EH-D0ou060S.js
+%%DATADIR%%/data/www/web/assets/ER-BGi3XKA_.js
+%%DATADIR%%/data/www/web/assets/ES-NqXMpDNV.js
+%%DATADIR%%/data/www/web/assets/ET-PTudKHL-.js
+%%DATADIR%%/data/www/web/assets/EU-FjcjwKp1.js
+%%DATADIR%%/data/www/web/assets/FI-CG4d9Fw7.js
+%%DATADIR%%/data/www/web/assets/FJ-C139PzvB.js
+%%DATADIR%%/data/www/web/assets/FK-XPS_Mxep.js
+%%DATADIR%%/data/www/web/assets/FM-CNgebryG.js
+%%DATADIR%%/data/www/web/assets/FO-CRzpKO1m.js
+%%DATADIR%%/data/www/web/assets/FR-B8vDbpLB.js
+%%DATADIR%%/data/www/web/assets/GA-BuCnHBt1.js
+%%DATADIR%%/data/www/web/assets/GB-0aslyXWB.js
+%%DATADIR%%/data/www/web/assets/GD-CNPbqtuI.js
+%%DATADIR%%/data/www/web/assets/GE-AB-B-TJLLyi.js
+%%DATADIR%%/data/www/web/assets/GE-DjP-hqxH.js
+%%DATADIR%%/data/www/web/assets/GE-OS-MSYyBHb5.js
+%%DATADIR%%/data/www/web/assets/GF-BcpM6KXB.js
+%%DATADIR%%/data/www/web/assets/GG-CO0w39Uo.js
+%%DATADIR%%/data/www/web/assets/GH-BlaRl2y7.js
+%%DATADIR%%/data/www/web/assets/GI-LhWzDkoL.js
+%%DATADIR%%/data/www/web/assets/GL-TZYWPNiS.js
+%%DATADIR%%/data/www/web/assets/GM-BbEKdS0A.js
+%%DATADIR%%/data/www/web/assets/GN-mVJu0smG.js
+%%DATADIR%%/data/www/web/assets/GP-B8vDbpLB.js
+%%DATADIR%%/data/www/web/assets/GQ-CC129jXh.js
+%%DATADIR%%/data/www/web/assets/GR-CFpIyJBR.js
+%%DATADIR%%/data/www/web/assets/GS-IFDbLNwE.js
+%%DATADIR%%/data/www/web/assets/GT-Dw6YDROG.js
+%%DATADIR%%/data/www/web/assets/GU-DzR4EhPy.js
+%%DATADIR%%/data/www/web/assets/GW-DULDgb9f.js
+%%DATADIR%%/data/www/web/assets/GY-DFiRqyUV.js
+%%DATADIR%%/data/www/web/assets/HK-CjKIxoZ0.js
+%%DATADIR%%/data/www/web/assets/HM-iT-MxlIG.js
+%%DATADIR%%/data/www/web/assets/HN-DHepbgm0.js
+%%DATADIR%%/data/www/web/assets/HR-DSd-JLbR.js
+%%DATADIR%%/data/www/web/assets/HT-CqkxwVFz.js
+%%DATADIR%%/data/www/web/assets/HU-Cy7u9-qp.js
+%%DATADIR%%/data/www/web/assets/IC-CJJhkl-n.js
+%%DATADIR%%/data/www/web/assets/ID-Cc4MKPAt.js
+%%DATADIR%%/data/www/web/assets/IE-Bs5eJbrt.js
+%%DATADIR%%/data/www/web/assets/IL-x3uCxx9g.js
+%%DATADIR%%/data/www/web/assets/IM-Ck6NBcbK.js
+%%DATADIR%%/data/www/web/assets/IN-BWYcDrrm.js
+%%DATADIR%%/data/www/web/assets/IO-B3uMKo7N.svg
+%%DATADIR%%/data/www/web/assets/IO-Dez4wQyI.js
+%%DATADIR%%/data/www/web/assets/IQ-BVBBmvCn.js
+%%DATADIR%%/data/www/web/assets/IR-nDyIXGna.js
+%%DATADIR%%/data/www/web/assets/IS-DQY00ZsH.js
+%%DATADIR%%/data/www/web/assets/IT-BUw142lt.js
+%%DATADIR%%/data/www/web/assets/JE-fiJ0wm8X.js
+%%DATADIR%%/data/www/web/assets/JM-BJbXA2bB.js
+%%DATADIR%%/data/www/web/assets/JO-B77LxlWU.js
+%%DATADIR%%/data/www/web/assets/JP-CK8eanJQ.js
+%%DATADIR%%/data/www/web/assets/KE-BlFf5Qxr.js
+%%DATADIR%%/data/www/web/assets/KG-JN6XM7Fd.js
+%%DATADIR%%/data/www/web/assets/KH-X6EC4OiB.js
+%%DATADIR%%/data/www/web/assets/KI-CaTWAqLF.js
+%%DATADIR%%/data/www/web/assets/KM-mjEvtiuf.js
+%%DATADIR%%/data/www/web/assets/KN-HuXJxu2q.js
+%%DATADIR%%/data/www/web/assets/KP-BItPmeJA.js
+%%DATADIR%%/data/www/web/assets/KR-UUuMeJgj.js
+%%DATADIR%%/data/www/web/assets/KW-B-eZYjjt.js
+%%DATADIR%%/data/www/web/assets/KY-DjI8pk7A.js
+%%DATADIR%%/data/www/web/assets/KZ-BnuTjtd_.js
+%%DATADIR%%/data/www/web/assets/LA-CmcseVwR.js
+%%DATADIR%%/data/www/web/assets/LB-BpyBkLFs.js
+%%DATADIR%%/data/www/web/assets/LC-CPVriPlN.js
+%%DATADIR%%/data/www/web/assets/LI-BVF18f1m.js
+%%DATADIR%%/data/www/web/assets/LK-BKGOo40_.js
+%%DATADIR%%/data/www/web/assets/LR-VHPWKhMT.js
+%%DATADIR%%/data/www/web/assets/LS-DX59LbSJ.js
+%%DATADIR%%/data/www/web/assets/LT-DcerJVZ9.js
+%%DATADIR%%/data/www/web/assets/LU-BIADZ7Kd.js
+%%DATADIR%%/data/www/web/assets/LV-juKXMjFv.js
+%%DATADIR%%/data/www/web/assets/LY-TIoWIPnH.js
+%%DATADIR%%/data/www/web/assets/MA-CZmTf-jk.js
+%%DATADIR%%/data/www/web/assets/MC-Bso14psQ.js
+%%DATADIR%%/data/www/web/assets/MD-D2eZyWDH.js
+%%DATADIR%%/data/www/web/assets/ME-wp0w9F0r.js
+%%DATADIR%%/data/www/web/assets/MF-PWAfddVX.js
+%%DATADIR%%/data/www/web/assets/MG-BsrX5eXa.js
+%%DATADIR%%/data/www/web/assets/MH-PVMgcMHB.js
+%%DATADIR%%/data/www/web/assets/MK-D7lVQ6Xv.js
+%%DATADIR%%/data/www/web/assets/ML-BRfUtvar.js
+%%DATADIR%%/data/www/web/assets/MM-CpVOGWRF.js
+%%DATADIR%%/data/www/web/assets/MN-CQwi_XVk.js
+%%DATADIR%%/data/www/web/assets/MO-DHDZ3oiK.js
+%%DATADIR%%/data/www/web/assets/MP-CU5duFcA.js
+%%DATADIR%%/data/www/web/assets/MQ-CpyZfYzn.js
+%%DATADIR%%/data/www/web/assets/MR-NNsjUd7R.js
+%%DATADIR%%/data/www/web/assets/MS-n7Kko3dd.js
+%%DATADIR%%/data/www/web/assets/MT-CiOjyn-B.js
+%%DATADIR%%/data/www/web/assets/MU-D6rXnPWB.js
+%%DATADIR%%/data/www/web/assets/MV-B6jQ1h-J.js
+%%DATADIR%%/data/www/web/assets/MW-Bkt-ik9T.js
+%%DATADIR%%/data/www/web/assets/MX-Bkiy8r7B.js
+%%DATADIR%%/data/www/web/assets/MY-BFzIdmmk.js
+%%DATADIR%%/data/www/web/assets/MZ-BAvMPWrT.js
+%%DATADIR%%/data/www/web/assets/NA-BkrHacIf.js
+%%DATADIR%%/data/www/web/assets/NC-r8ApqwCV.js
+%%DATADIR%%/data/www/web/assets/NE-AJ9IgbM3.js
+%%DATADIR%%/data/www/web/assets/NF-B0iiiYkw.js
+%%DATADIR%%/data/www/web/assets/NG-BhTYQwGB.js
+%%DATADIR%%/data/www/web/assets/NI-A6xbs1JT.js
+%%DATADIR%%/data/www/web/assets/NL-DjFJb2xH.js
+%%DATADIR%%/data/www/web/assets/NO-86L4EYt1.js
+%%DATADIR%%/data/www/web/assets/NP-CxKDc5-T.js
+%%DATADIR%%/data/www/web/assets/NR-B8su_64b.js
+%%DATADIR%%/data/www/web/assets/NU-DSI7JMI9.js
+%%DATADIR%%/data/www/web/assets/NZ-C41L_I5d.js
+%%DATADIR%%/data/www/web/assets/OM-RQlFI4YB.js
+%%DATADIR%%/data/www/web/assets/PA-DMeK60Qa.js
+%%DATADIR%%/data/www/web/assets/PE-Ca2Jsjoe.js
+%%DATADIR%%/data/www/web/assets/PF-D1Ug4IAP.js
+%%DATADIR%%/data/www/web/assets/PG-8qXqEB3s.js
+%%DATADIR%%/data/www/web/assets/PH-BqKXRPqE.js
+%%DATADIR%%/data/www/web/assets/PK-D6ZT-Hcu.js
+%%DATADIR%%/data/www/web/assets/PL-DFBDuqRs.js
+%%DATADIR%%/data/www/web/assets/PM-B8vDbpLB.js
+%%DATADIR%%/data/www/web/assets/PN-W09zPp77.js
+%%DATADIR%%/data/www/web/assets/PR-DNh0l7ve.js
+%%DATADIR%%/data/www/web/assets/PS-BxHJsNeL.js
+%%DATADIR%%/data/www/web/assets/PT-CoJFuCLx.js
+%%DATADIR%%/data/www/web/assets/PW-BI3CWBTN.js
+%%DATADIR%%/data/www/web/assets/PY-CNXBcYnq.js
+%%DATADIR%%/data/www/web/assets/QA-DmWWreP8.js
+%%DATADIR%%/data/www/web/assets/RE-B8vDbpLB.js
+%%DATADIR%%/data/www/web/assets/RO-DWS7w99F.js
+%%DATADIR%%/data/www/web/assets/RS-Bh3OKS_i.js
+%%DATADIR%%/data/www/web/assets/RU-DuF-s0U5.js
+%%DATADIR%%/data/www/web/assets/RW-jsvhnRfd.js
+%%DATADIR%%/data/www/web/assets/SA-DSeUIsx_.js
+%%DATADIR%%/data/www/web/assets/SB-BtQG2ulB.js
+%%DATADIR%%/data/www/web/assets/SC-MyYKZ2WK.js
+%%DATADIR%%/data/www/web/assets/SD-cXXsGHLB.js
+%%DATADIR%%/data/www/web/assets/SE-CtVAMbcV.js
+%%DATADIR%%/data/www/web/assets/SG-CE2UisIC.js
+%%DATADIR%%/data/www/web/assets/SH-B5zpDzMq.js
+%%DATADIR%%/data/www/web/assets/SI-9a5HBiTQ.js
+%%DATADIR%%/data/www/web/assets/SJ-86L4EYt1.js
+%%DATADIR%%/data/www/web/assets/SK-BwOc2pOo.js
+%%DATADIR%%/data/www/web/assets/SL-Bxnx4vlW.js
+%%DATADIR%%/data/www/web/assets/SM-BJATjMbx.js
+%%DATADIR%%/data/www/web/assets/SN-B8j9XDTv.js
+%%DATADIR%%/data/www/web/assets/SO-8TW9h6yL.js
+%%DATADIR%%/data/www/web/assets/SR-BdANUAN1.js
+%%DATADIR%%/data/www/web/assets/SS-BqQGR0F0.js
+%%DATADIR%%/data/www/web/assets/ST-BQVf8PHB.js
+%%DATADIR%%/data/www/web/assets/SV-CxOhSw-7.js
+%%DATADIR%%/data/www/web/assets/SX-7FIfwi5n.js
+%%DATADIR%%/data/www/web/assets/SY-BkbbbGV4.js
+%%DATADIR%%/data/www/web/assets/SZ-Nsmpk1ta.js
+%%DATADIR%%/data/www/web/assets/TA-DF1AlPKL.js
+%%DATADIR%%/data/www/web/assets/TC-BTPPVZng.js
+%%DATADIR%%/data/www/web/assets/TD-CSh8i59s.js
+%%DATADIR%%/data/www/web/assets/TF-BPFEFMdK.js
+%%DATADIR%%/data/www/web/assets/TG-Oa56GPmf.js
+%%DATADIR%%/data/www/web/assets/TH-BJX0syoz.js
+%%DATADIR%%/data/www/web/assets/TJ-DtjFN_iR.js
+%%DATADIR%%/data/www/web/assets/TK-CaxH436f.js
+%%DATADIR%%/data/www/web/assets/TL-BPeBNRvt.js
+%%DATADIR%%/data/www/web/assets/TM-DT_5zC_0.js
+%%DATADIR%%/data/www/web/assets/TN-Cl0B51zJ.js
+%%DATADIR%%/data/www/web/assets/TO-BVPa4Mpa.js
+%%DATADIR%%/data/www/web/assets/TR-Bi14AjTg.js
+%%DATADIR%%/data/www/web/assets/TT-fwwKejP_.js
+%%DATADIR%%/data/www/web/assets/TV-_2T_W9_n.js
+%%DATADIR%%/data/www/web/assets/TW-DyIUquWk.js
+%%DATADIR%%/data/www/web/assets/TZ-_Cd0rEzL.js
+%%DATADIR%%/data/www/web/assets/UA-DewlWFPj.js
+%%DATADIR%%/data/www/web/assets/UG-1AXaIxpM.js
+%%DATADIR%%/data/www/web/assets/UM-hrHxDpNe.js
+%%DATADIR%%/data/www/web/assets/UNKNOWN-DIN2B7u2.js
+%%DATADIR%%/data/www/web/assets/US-hrHxDpNe.js
+%%DATADIR%%/data/www/web/assets/UY-D3PEaFKJ.js
+%%DATADIR%%/data/www/web/assets/UZ-DbF9PNiH.js
+%%DATADIR%%/data/www/web/assets/VA-XPVDV5gM.js
+%%DATADIR%%/data/www/web/assets/VC-BDghloKL.js
+%%DATADIR%%/data/www/web/assets/VE-BD6sp8D2.js
+%%DATADIR%%/data/www/web/assets/VG-JWeMT2dO.js
+%%DATADIR%%/data/www/web/assets/VI-BLcpEKX1.js
+%%DATADIR%%/data/www/web/assets/VN-88OylpOb.js
+%%DATADIR%%/data/www/web/assets/VU-B3o2l031.js
+%%DATADIR%%/data/www/web/assets/WF-Bv7MkmLx.js
+%%DATADIR%%/data/www/web/assets/WS-Cxo8EBUY.js
+%%DATADIR%%/data/www/web/assets/XK-DHuA0EV5.js
+%%DATADIR%%/data/www/web/assets/YE-By8P38Ye.js
+%%DATADIR%%/data/www/web/assets/YT-DbhRoF51.js
+%%DATADIR%%/data/www/web/assets/ZA-DsWnrAmj.js
+%%DATADIR%%/data/www/web/assets/ZM-CdkX6WZ3.js
+%%DATADIR%%/data/www/web/assets/ZW-B1PpRcC0.js
+%%DATADIR%%/data/www/web/assets/browser-ponyfill-touFzT30.js
%%DATADIR%%/data/www/web/assets/cc3200-B-jSkbsy.jpg
%%DATADIR%%/data/www/web/assets/cc3200_debugPort-CUfuhKbo.jpg
%%DATADIR%%/data/www/web/assets/cc3200_installCfwFlashUpload-D3jB7q0q.png
@@ -33,24 +296,25 @@ bin/teddycloud
%%DATADIR%%/data/www/web/assets/cc3235-Cr21bWbC.jpg
%%DATADIR%%/data/www/web/assets/cc3235_flash-D2YMWv70.jpg
%%DATADIR%%/data/www/web/assets/cc3235_smd_grippers-MdbEjaZo.jpg
-%%DATADIR%%/data/www/web/assets/esp32-BPYaDt9v.js
%%DATADIR%%/data/www/web/assets/esp32-B_b6hCjy.jpg
+%%DATADIR%%/data/www/web/assets/esp32-BhDgbdPM.js
+%%DATADIR%%/data/www/web/assets/esp32_j100-BMdNkIk7.png
%%DATADIR%%/data/www/web/assets/esp32_pcb-CWEYHEzm.png
%%DATADIR%%/data/www/web/assets/esp32_pcb_clamp-Cw2o3uco.png
%%DATADIR%%/data/www/web/assets/esp32_pcb_preview-Bh1UGQPK.png
%%DATADIR%%/data/www/web/assets/esp32_write_patched_image_with_esptools-DmsBlrjp.png
-%%DATADIR%%/data/www/web/assets/esp32c2-CVPL8n1g.js
-%%DATADIR%%/data/www/web/assets/esp32c3-I3vXmsVg.js
-%%DATADIR%%/data/www/web/assets/esp32c5-CAGCiNY4.js
-%%DATADIR%%/data/www/web/assets/esp32c6-C93uIFil.js
-%%DATADIR%%/data/www/web/assets/esp32c61-Qo5S0GG2.js
-%%DATADIR%%/data/www/web/assets/esp32h2-Cf8JbGZQ.js
-%%DATADIR%%/data/www/web/assets/esp32p4-DfBdIAkh.js
-%%DATADIR%%/data/www/web/assets/esp32s2-3nCAg6Ct.js
-%%DATADIR%%/data/www/web/assets/esp32s3-mu2zzjDN.js
-%%DATADIR%%/data/www/web/assets/esp8266-8VKmCx7J.js
-%%DATADIR%%/data/www/web/assets/index-DUW332vS.js
-%%DATADIR%%/data/www/web/assets/index-Dljhv4sL.css
+%%DATADIR%%/data/www/web/assets/esp32c2-CuDNJqQ0.js
+%%DATADIR%%/data/www/web/assets/esp32c3-D6PQO2EJ.js
+%%DATADIR%%/data/www/web/assets/esp32c5-D376rjyX.js
+%%DATADIR%%/data/www/web/assets/esp32c6-CcSzi6cJ.js
+%%DATADIR%%/data/www/web/assets/esp32c61-s_w6ZLOx.js
+%%DATADIR%%/data/www/web/assets/esp32h2-L83WRn7D.js
+%%DATADIR%%/data/www/web/assets/esp32p4-BQNWBb2f.js
+%%DATADIR%%/data/www/web/assets/esp32s2-NL0-Ytlx.js
+%%DATADIR%%/data/www/web/assets/esp32s3-wh7ZIwIl.js
+%%DATADIR%%/data/www/web/assets/esp8266-DjSL4SI8.js
+%%DATADIR%%/data/www/web/assets/index-ChpkR0Rj.js
+%%DATADIR%%/data/www/web/assets/index-zRaEDlqF.css
%%DATADIR%%/data/www/web/assets/logo-aw46LCqE.png
%%DATADIR%%/data/www/web/assets/openTB_step1_1-4vwQGflo.png
%%DATADIR%%/data/www/web/assets/openTB_step1_2-DIZc5DI4.png
@@ -59,13 +323,26 @@ bin/teddycloud
%%DATADIR%%/data/www/web/assets/openTB_step4-Bj5i-Kw_.png
%%DATADIR%%/data/www/web/assets/openTB_step5-DTGOEBgD.png
%%DATADIR%%/data/www/web/assets/rom-Caghk6Eh.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32-DIlGCCSz.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32c2-B8dsLG7-.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32c3-LInKOK0z.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32c5-DYguqfJK.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32c6-BMffPMCp.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32c61-Dm89Jp02.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32h2-DKTWdQO2.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32p4-77EG6B-R.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32s2-DLJQYVPj.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_32s3-B0-qH3ON.js
+%%DATADIR%%/data/www/web/assets/stub_flasher_8266-Bxnk_IeY.js
%%DATADIR%%/data/www/web/assets/tb-esp32-uart-BDPWj6EB.png
%%DATADIR%%/data/www/web/assets/tb-esp32-uart-clamp-D_86EMpu.png
%%DATADIR%%/data/www/web/assets/uart_3v3-5V_jumper_black-BW2kS97B.jpg
%%DATADIR%%/data/www/web/assets/uart_3v3-5V_jumper_switch-Cl7yHFlu.jpg
%%DATADIR%%/data/www/web/assets/uart_3v3-5V_jumper_yellow-d4JFD7jo.jpg
%%DATADIR%%/data/www/web/assets/unknown_box-xU178mnG.png
+%%DATADIR%%/data/www/web/favicon-96x96.png
%%DATADIR%%/data/www/web/favicon.ico
+%%DATADIR%%/data/www/web/favicon.svg
%%DATADIR%%/data/www/web/index.html
%%DATADIR%%/data/www/web/manifest.json
%%DATADIR%%/data/www/web/robots.txt
@@ -73,7 +350,14 @@ bin/teddycloud
%%DATADIR%%/data/www/web/translations/en.json
%%DATADIR%%/data/www/web/translations/es.json
%%DATADIR%%/data/www/web/translations/fr.json
+%%DATADIR%%/data/www/web/wasm/taf_encoder.js
+%%DATADIR%%/data/www/web/wasm/taf_encoder.wasm
+%%DATADIR%%/data/www/web/web-app-manifest-dark-192.png
+%%DATADIR%%/data/www/web/web-app-manifest-dark-512.png
+%%DATADIR%%/data/www/web/web-app-manifest-light-192.png
+%%DATADIR%%/data/www/web/web-app-manifest-light-512.png
%%DATADIR%%/data/www/web/web_version.json
+@dir %%ETCDIR%%
@dir %%DATADIR%%/certs/client
@dir %%DATADIR%%/certs/server
@dir %%DATADIR%%/data/content/default
@@ -82,3 +366,4 @@ bin/teddycloud
@dir %%DATADIR%%/data/firmware/ota/esp32
@dir %%DATADIR%%/data/library
@dir %%DATADIR%%/data/www/custom_img
+@dir %%DATADIR%%/data/www/plugins