From a71606d39cc64f0162a6f3832e185e122f252969 Mon Sep 17 00:00:00 2001
From: jo <ljonas@riseup.net>
Date: Sat, 25 Feb 2023 20:14:30 +0100
Subject: [PATCH] feat(playout): enable vorbis metadata per icecast output

Use new jinja template system to tweak the streams per output.
---
 .../liquidsoap/entrypoint.py                  | 13 +----------
 .../liquidsoap/templates/entrypoint.liq.j2    |  3 ---
 .../liquidsoap/templates/outputs.liq.j2       |  6 +++++
 .../__snapshots__/entrypoint_test.ambr        | 22 ++++---------------
 4 files changed, 11 insertions(+), 33 deletions(-)

diff --git a/playout/libretime_playout/liquidsoap/entrypoint.py b/playout/libretime_playout/liquidsoap/entrypoint.py
index c8869cbd7..4d8c43454 100644
--- a/playout/libretime_playout/liquidsoap/entrypoint.py
+++ b/playout/libretime_playout/liquidsoap/entrypoint.py
@@ -2,7 +2,6 @@ from pathlib import Path
 from typing import Optional, Tuple
 
 from jinja2 import Environment, PackageLoader
-from libretime_shared.config import AudioFormat
 
 from ..config import Config
 from .models import Info, StreamPreferences
@@ -33,23 +32,13 @@ def generate_entrypoint(
     if log_filepath is not None:
         paths["log_filepath"] = log_filepath.resolve()
 
-    config = config.copy()
-
-    # Global icecast_vorbis_metadata until it is
-    # handled per output
-    icecast_vorbis_metadata = any(
-        o.enabled and o.audio.format == AudioFormat.OGG and o.audio.enable_metadata  # type: ignore
-        for o in config.stream.outputs.icecast
-    )
-
     entrypoint_filepath.write_text(
         templates.get_template("entrypoint.liq.j2").render(
-            config=config,
+            config=config.copy(),
             preferences=preferences,
             info=info,
             paths=paths,
             version=version,
-            icecast_vorbis_metadata=icecast_vorbis_metadata,
         ),
         encoding="utf-8",
     )
diff --git a/playout/libretime_playout/liquidsoap/templates/entrypoint.liq.j2 b/playout/libretime_playout/liquidsoap/templates/entrypoint.liq.j2
index 20d7fc089..9a040ce79 100644
--- a/playout/libretime_playout/liquidsoap/templates/entrypoint.liq.j2
+++ b/playout/libretime_playout/liquidsoap/templates/entrypoint.liq.j2
@@ -8,9 +8,6 @@ input_main_port = {{ config.stream.inputs.main.port }}
 input_show_mount = {{ config.stream.inputs.show.mount | quote }}
 input_show_port = {{ config.stream.inputs.show.port }}
 
-# Outputs
-icecast_vorbis_metadata = {{ icecast_vorbis_metadata | lower }}
-
 # Settings
 auth_path = {{ paths.auth_filepath | quote }}
 
diff --git a/playout/libretime_playout/liquidsoap/templates/outputs.liq.j2 b/playout/libretime_playout/liquidsoap/templates/outputs.liq.j2
index c17d15824..09c5e5f61 100644
--- a/playout/libretime_playout/liquidsoap/templates/outputs.liq.j2
+++ b/playout/libretime_playout/liquidsoap/templates/outputs.liq.j2
@@ -53,6 +53,12 @@ output_icecast_{{ output_id }}_source = s
 output_icecast_{{ output_id }}_source = mean(s)
 {% endif -%}
 
+{#- Add per output stream modifications. -#}
+{% if output.audio.format == "ogg" and not output.audio.enable_metadata -%}
+# Disable ogg metadata
+output_icecast_{{ output_id }}_source = add(normalize=false, [amplify(0.00001, noise()), output_icecast_{{ output_id }}_source])
+{% endif -%}
+
 output.icecast(
   id="icecast:{{ output_id }}",
   host={{ output.host | quote }},
diff --git a/playout/tests/liquidsoap/__snapshots__/entrypoint_test.ambr b/playout/tests/liquidsoap/__snapshots__/entrypoint_test.ambr
index f1b057bd1..6218862c0 100644
--- a/playout/tests/liquidsoap/__snapshots__/entrypoint_test.ambr
+++ b/playout/tests/liquidsoap/__snapshots__/entrypoint_test.ambr
@@ -11,9 +11,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"
   
@@ -51,9 +48,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"
   
@@ -75,6 +69,8 @@
   
   # icecast:1
   output_icecast_1_source = s
+  # Disable ogg metadata
+  output_icecast_1_source = add(normalize=false, [amplify(0.00001, noise()), output_icecast_1_source])
   output.icecast(
     id="icecast:1",
     host="localhost",
@@ -114,9 +110,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"
   
@@ -175,9 +168,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"
   
@@ -199,6 +189,8 @@
   
   # icecast:1
   output_icecast_1_source = s
+  # Disable ogg metadata
+  output_icecast_1_source = add(normalize=false, [amplify(0.00001, noise()), output_icecast_1_source])
   output.icecast(
     id="icecast:1",
     host="localhost",
@@ -259,9 +251,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"
   
@@ -306,9 +295,6 @@
   input_show_mount = "show"
   input_show_port = 8002
   
-  # Outputs
-  icecast_vorbis_metadata = false
-  
   # Settings
   auth_path = "/fake/liquidsoap_auth.py"