From fb7edeae0b32dbe221f42b9c0613b73d3ccb5c99 Mon Sep 17 00:00:00 2001
From: Nils <34674720+nils-kt@users.noreply.github.com>
Date: Mon, 6 Apr 2026 18:29:42 +0200
Subject: [PATCH] Add CHANGELOG.md for version 1.1.0; implement watermark
feature and update check
- Introduced a mandatory update check on startup, disabling the plugin until updated.
- Added a watermark for free users, displaying "Easy IRL Stream - stools.cc" in the video.
- Fixed SSL connection errors by utilizing the Windows certificate store in API calls.
- Updated help dialog to include information about the watermark feature.
---
CHANGELOG.md | 23 ++++++
CMakeLists.txt | 1 +
src/help-dialog.cpp | 43 +++++++++++
src/help-dialog.hpp | 1 +
src/irl-source.c | 1 +
src/irl-source.h | 3 +
src/media-decoder.c | 17 +++++
src/plugin-main.c | 80 ++++++++++----------
src/remote-settings.c | 8 ++
src/watermark.c | 171 ++++++++++++++++++++++++++++++++++++++++++
src/watermark.h | 5 ++
src/webhook.c | 3 +
12 files changed, 318 insertions(+), 38 deletions(-)
create mode 100644 CHANGELOG.md
create mode 100644 src/watermark.c
create mode 100644 src/watermark.h
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..cb4ed54
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,23 @@
+# Easy IRL Stream
+
+## v1.1.0 — Update Check, Watermark & SSL Fix
+
+### New Features
+- **Mandatory update check** — The plugin now checks for updates on startup. If a newer version is available, a dialog is shown, the download page opens, and the plugin stays disabled until updated.
+- **Watermark for free users** — Non-Patreon users now see a small "Easy IRL Stream - stools.cc" watermark in the bottom-right corner of the video. Patreon supporters get it removed automatically.
+
+### Bug Fixes
+- **Fixed SSL connect errors** — API calls to `stools.cc` failed with "SSL connect error" because libcurl (built with OpenSSL) couldn't find CA certificates on Windows. Added `CURLSSLOPT_NATIVE_CA` to all curl calls so OpenSSL uses the Windows certificate store.
+
+---
+
+## v1.0.1 — Bug Fixes & Improvements
+
+### Bug Fixes
+- **Fixed HTTPS webhooks** — Webhooks to `https://` URLs were silently failing because the plugin used raw TCP sockets without TLS. Replaced with libcurl, which properly handles HTTPS, and added connect/request timeouts to prevent hangs.
+- **Fixed shared decoder counters** — Debug counters for video packets/frames were shared across all source instances (static variables). They are now per-source and reset on each new connection.
+- **Fixed SRT streamid not applied** — The `streamid` setting was loaded from the remote config but never actually appended to the SRT listener URL. It is now included when set.
+
+### Improvements
+- **Enriched webhook payload** — Webhook POST body now includes `bitrate_kbps`, `uptime_sec`, `video_width`, `video_height`, and `video_codec` alongside the existing `event`, `source`, and `timestamp` fields.
+- **IP addresses in Stream Monitor** — The monitor dock now shows your local (LAN) and external (WAN) IP at the bottom, so you don't have to open the Help dialog to check them.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c9e7a38..584ffff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,6 +22,7 @@ add_library(easy-irl-stream MODULE
src/webhook.c
src/srtla-server.c
src/remote-settings.c
+ src/watermark.c
src/obfuscation.cpp
src/help-dialog.cpp
src/stats-dialog.cpp
diff --git a/src/help-dialog.cpp b/src/help-dialog.cpp
index 1a22408..5134423 100644
--- a/src/help-dialog.cpp
+++ b/src/help-dialog.cpp
@@ -56,6 +56,8 @@ struct HelpStrings {
const char *srtla_step4;
const char *faq_q7;
const char *faq_a7;
+ const char *faq_q8;
+ const char *faq_a8;
};
static const HelpStrings LANG_DE = {
@@ -135,6 +137,11 @@ static const HelpStrings LANG_DE = {
"der die Pakete entgegennimmt und an den internen SRT-Server weiterleitet.
"
"Standard-Ports: SRTLA = UDP 5000, SRT = UDP 9000
"
"Wichtig: In Moblin den SRTLA-Port (5000) angeben, nicht den SRT-Port (9000)!",
+ "Was ist das Wasserzeichen im Video?",
+ "In der kostenlosen Version wird Easy IRL Stream – stools.cc "
+ "unten rechts im Bild eingeblendet. Als "
+ "Patreon-Unterstützer "
+ "wird das Wasserzeichen automatisch entfernt.",
};
static const HelpStrings LANG_EN = {
@@ -212,6 +219,11 @@ static const HelpStrings LANG_EN = {
"receives the packets and forwards them to the internal SRT server.
"
"Default ports: SRTLA = UDP 5000, SRT = UDP 9000
"
"Important: In Moblin, enter the SRTLA port (5000), not the SRT port (9000)!",
+ "What is the watermark in the video?",
+ "The free version shows Easy IRL Stream – stools.cc "
+ "in the bottom-right corner of the video. "
+ "Patreon supporters "
+ "get the watermark removed automatically.",
};
static QString build_html(const char *local_ip, const char *external_ip,
@@ -307,6 +319,7 @@ static QString build_html(const char *local_ip, const char *external_ip,
+ QString("