From 7e0d9693f87059ee0f0db1812f656223d64a916d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 7 Aug 2014 11:13:03 +0200 Subject: [PATCH] dbus: add mpegts input subscription notifications --- src/input/mpegts/mpegts_input.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index afb6a5a0..682f0e11 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -24,6 +24,7 @@ #include "atomic.h" #include "notify.h" #include "idnode.h" +#include "dbus.h" #include #include @@ -33,6 +34,29 @@ SKEL_DECLARE(mpegts_pid_sub_skel, mpegts_pid_sub_t); static void mpegts_input_del_network ( mpegts_network_link_t *mnl ); +/* + * DBUS + */ + +static void +mpegts_input_dbus_notify(mpegts_input_t *mi, int64_t subs) +{ +#if ENABLE_DBUS_1 + char buf[256]; + htsmsg_t *msg; + + if (mi->mi_dbus_subs == subs) + return; + mi->mi_dbus_subs = subs; + msg = htsmsg_create_list(); + mi->mi_display_name(mi, buf, sizeof(buf)); + htsmsg_add_str(msg, NULL, buf); + htsmsg_add_s64(msg, NULL, subs); + snprintf(buf, sizeof(buf), "/input/mpegts/%s", idnode_uuid_as_str(&mi->ti_id)); + dbus_emit_signal(buf, "status", msg); +#endif +} + /* ************************************************************************** * Class definition * *************************************************************************/ @@ -411,6 +435,7 @@ mpegts_input_started_mux mmi->mmi_mux->mm_active = mmi; LIST_INSERT_HEAD(&mi->mi_mux_active, mmi, mmi_active_link); notify_reload("input_status"); + mpegts_input_dbus_notify(mi, 1); } static void @@ -435,6 +460,7 @@ mpegts_input_stopped_mux s = LIST_NEXT(s, s_active_link); } notify_reload("input_status"); + mpegts_input_dbus_notify(mi, 0); } static int @@ -957,6 +983,8 @@ mpegts_input_status_timer ( void *p ) mpegts_input_t *mi = p; mpegts_mux_instance_t *mmi; htsmsg_t *e; + int64_t subs = 0; + pthread_mutex_lock(&mi->mi_output_lock); LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link) { memset(&st, 0, sizeof(st)); @@ -964,10 +992,12 @@ mpegts_input_status_timer ( void *p ) e = tvh_input_stream_create_msg(&st); htsmsg_add_u32(e, "update", 1); notify_by_msg("input_status", e); + subs += st.subs_count; tvh_input_stream_destroy(&st); } pthread_mutex_unlock(&mi->mi_output_lock); gtimer_arm(&mi->mi_status_timer, mpegts_input_status_timer, mi, 1); + mpegts_input_dbus_notify(mi, subs); } /* **************************************************************************