]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
[htsp] fix real time tag and channel updates
authorGlenn-1990 <g_christiaensen@msn.com>
Fri, 4 Nov 2016 14:20:45 +0000 (15:20 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 24 Nov 2016 13:51:59 +0000 (14:51 +0100)
src/channels.c
src/htsp_server.c

index 4c3ce3660b90642e496a0f9b1ac800fb7ff53223..7f2feff5d6b032c67feca6f2146382217ea212f6 100644 (file)
@@ -77,6 +77,9 @@ channel_class_changed ( idnode_t *self )
   /* update the EPG channel <-> channel mapping here */
   if (ch->ch_enabled && ch->ch_epgauto)
     epggrab_channel_add(ch);
+
+  /* HTSP */
+  htsp_channel_update(ch);
 }
 
 static htsmsg_t *
@@ -1255,6 +1258,7 @@ channel_tag_create(const char *uuid, htsmsg_t *conf)
   if (conf)
     idnode_load(&ct->ct_id, conf);
 
+  /* Defaults */
   if (ct->ct_name == NULL)
     ct->ct_name = strdup("New tag");
   if (ct->ct_comment == NULL)
@@ -1262,6 +1266,9 @@ channel_tag_create(const char *uuid, htsmsg_t *conf)
   if (ct->ct_icon == NULL)
     ct->ct_icon = strdup("");
 
+  /* HTSP */
+  htsp_tag_add(ct);
+
   TAILQ_INSERT_TAIL(&channel_tags, ct, ct_link);
   return ct;
 }
@@ -1283,8 +1290,8 @@ channel_tag_destroy(channel_tag_t *ct, int delconf)
   if (delconf)
     hts_settings_remove("channel/tag/%s", idnode_uuid_as_str(&ct->ct_id, ubuf));
 
-  if(ct->ct_enabled && !ct->ct_internal)
-    htsp_tag_delete(ct);
+  /* HTSP */
+  htsp_tag_delete(ct);
 
   TAILQ_REMOVE(&channel_tags, ct, ct_link);
   idnode_unlink(&ct->ct_id);
@@ -1351,6 +1358,13 @@ chtags_ok:
  * Channel Tag Class definition
  * **************************************************************************/
 
+static void
+channel_tag_class_changed(idnode_t *self)
+{
+  /* HTSP */
+  htsp_tag_update((channel_tag_t *)self);
+}
+
 static htsmsg_t *
 channel_tag_class_save(idnode_t *self, char *filename, size_t fsize)
 {
@@ -1359,7 +1373,6 @@ channel_tag_class_save(idnode_t *self, char *filename, size_t fsize)
   char ubuf[UUID_HEX_SIZE];
   idnode_save(&ct->ct_id, c);
   snprintf(filename, fsize, "channel/tag/%s", idnode_uuid_as_str(&ct->ct_id, ubuf));
-  htsp_tag_update(ct);
   return c;
 }
 
@@ -1411,6 +1424,7 @@ const idclass_t channel_tag_class = {
   .ic_caption    = N_("Channel Tags"),
   .ic_doc        = tvh_doc_channeltag_class,
   .ic_event      = "channeltag",
+  .ic_changed    = channel_tag_class_changed,
   .ic_save       = channel_tag_class_save,
   .ic_get_title  = channel_tag_class_get_title,
   .ic_delete     = channel_tag_class_delete,
index bfb8370982e5aeae081e62447ae7882d6bb4e29d..b20e0f6c3c12002e1969f0262256b3d16b482d11 100644 (file)
@@ -72,10 +72,12 @@ static void *htsp_server, *htsp_server_2;
 #define HTSP_ASYNC_ON   0x01
 #define HTSP_ASYNC_EPG  0x02
 
-#define HTSP_ASYNC_AUX_CHTAG   0x01
-#define HTSP_ASYNC_AUX_DVR     0x02
-#define HTSP_ASYNC_AUX_AUTOREC 0x03
-#define HTSP_ASYNC_AUX_TIMEREC 0x04
+#define HTSP_ASYNC_AUX_CH        0x01
+#define HTSP_ASYNC_AUX_CHTAG     0x02
+#define HTSP_ASYNC_AUX_CHTAG_DEL 0x03
+#define HTSP_ASYNC_AUX_DVR       0x04
+#define HTSP_ASYNC_AUX_AUTOREC   0x05
+#define HTSP_ASYNC_AUX_TIMEREC   0x06
 
 #define HTSP_ASYNC_EPG_INTERVAL 30
 
@@ -3448,7 +3450,10 @@ htsp_channel_add(channel_t *ch)
 void
 htsp_channel_update(channel_t *ch)
 {
-  _htsp_channel_update(ch, "channelUpdate", NULL);
+  if (ch->ch_enabled)
+    _htsp_channel_update(ch, "channelUpdate", NULL);
+  else // in case the channel was ever sent to the client
+    htsp_channel_delete(ch);
 }
 
 /**
@@ -3460,7 +3465,7 @@ htsp_channel_delete(channel_t *ch)
   htsmsg_t *m = htsmsg_create_map();
   htsmsg_add_u32(m, "channelId", channel_get_id(ch));
   htsmsg_add_str(m, "method", "channelDelete");
-  _htsp_channel_update(ch, NULL, m);
+  htsp_async_send(m, HTSP_ASYNC_ON, HTSP_ASYNC_AUX_CH, ch);
 }
 
 
@@ -3481,8 +3486,12 @@ htsp_tag_add(channel_tag_t *ct)
 void
 htsp_tag_update(channel_tag_t *ct)
 {
-  htsp_async_send(htsp_build_tag(ct, "tagUpdate", 1), HTSP_ASYNC_ON,
-                  HTSP_ASYNC_AUX_CHTAG, ct);
+  if (ct->ct_enabled && !ct->ct_internal) {
+    htsp_async_send(htsp_build_tag(ct, "tagUpdate", 1), HTSP_ASYNC_ON,
+                    HTSP_ASYNC_AUX_CHTAG, ct);
+  }
+  else // in case the tag was ever sent to the client
+    htsp_tag_delete(ct);
 }
 
 
@@ -3495,7 +3504,7 @@ htsp_tag_delete(channel_tag_t *ct)
   htsmsg_t *m = htsmsg_create_map();
   htsmsg_add_u32(m, "tagId", htsp_channel_tag_get_identifier(ct));
   htsmsg_add_str(m, "method", "tagDelete");
-  htsp_async_send(m, HTSP_ASYNC_ON, HTSP_ASYNC_AUX_CHTAG, ct);
+  htsp_async_send(m, HTSP_ASYNC_ON, HTSP_ASYNC_AUX_CHTAG_DEL, ct);
 }
 
 /**