From 3288f781a9efa1d4baba2d79e231d4cef7aabfdb Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Fri, 22 Jul 2022 12:40:25 +0200
Subject: [PATCH] SOC: Update fallback state by fallback events only

---
 src/events.liq      | 10 ----------
 src/in_fallback.liq | 20 ++++++++++++++------
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/src/events.liq b/src/events.liq
index d329569..8ff9817 100644
--- a/src/events.liq
+++ b/src/events.liq
@@ -18,21 +18,11 @@
 
 
 
-# Updates the playout state
-def on_playout_state_change(source_type) =
-    if source_type == "fallback" then
-        engine_state.is_fallback := true
-    else
-        engine_state.is_fallback := false
-    end
-end
-
 # Called when some new metadata info is available
 def on_metadata_notification(meta) =
     # FIXME For some reason stream channels do not pass the `source` property in meta
     channel_name = meta["source"]
     source_type = eval_source_type(channel_name)
-    on_playout_state_change(source_type)
 
     log(level=3, label="metadata", "Raw metadata before POST:\n\n #{meta}\n\n")
 
diff --git a/src/in_fallback.liq b/src/in_fallback.liq
index c90ba59..61aa27b 100644
--- a/src/in_fallback.liq
+++ b/src/in_fallback.liq
@@ -43,6 +43,16 @@ def on_track_change(s) =
     end
 end
 
+# Called when a fallback source is actively playing
+def on_fallback_notify(metadata) =
+    engine_state.is_fallback := true
+    on_metadata_notification(metadata)
+end
+
+# Called when a fallback source stopped playing
+def on_fallback_leave_notify() =
+    engine_state.is_fallback := false
+end
 
 #####################################
 #            FUNCTIONS              #
@@ -60,10 +70,9 @@ def attach_fallback_source(main_stream)
                 reload_mode="seconds")
 
             s = amplify(id="fallback_folder", 1., override="replay_gain", s)
-            # s.on_metadata(on_metadata_notification)
-            # s.on_track(on_metadata_notification)
-            s = source.on_track(id="fallback_folder", s, on_metadata_notification)
+            s = source.on_track(id="fallback_folder", s, on_fallback_notify)
             s = mksafe(s)
+            source.on_leave(s, on_fallback_leave_notify)
 
             fallback_folder := s
             main_stream.on_track(on_track_change)
@@ -80,10 +89,9 @@ def attach_fallback_source(main_stream)
                 reload=0)
 
             s = amplify(id="fallback_playlist", 1., override="replay_gain", s)
-            # s.on_metadata(on_metadata_notification)
-            # s.on_track(on_metadata_notification)
-            s = source.on_track(id="fallback_playlist", s, on_metadata_notification)
+            s = source.on_track(id="fallback_playlist", s, on_fallback_notify)
             s = mksafe(s)
+            source.on_leave(s, on_fallback_leave_notify)
 
             fallback_playlist := s
             main_stream.on_track(on_track_change)
-- 
GitLab