From: Glenn-1990 Date: Fri, 4 Nov 2016 14:20:45 +0000 (+0100) Subject: [htsp] fix real time tag and channel updates X-Git-Tag: v4.2.1~209 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b9e58b979d40bd7f2029040d1c9b603f1a343770;p=thirdparty%2Ftvheadend.git [htsp] fix real time tag and channel updates --- diff --git a/src/channels.c b/src/channels.c index 4c3ce3660..7f2feff5d 100644 --- a/src/channels.c +++ b/src/channels.c @@ -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, diff --git a/src/htsp_server.c b/src/htsp_server.c index bfb837098..b20e0f6c3 100644 --- a/src/htsp_server.c +++ b/src/htsp_server.c @@ -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); } /**