From: Jaroslav Kysela Date: Wed, 24 May 2017 11:18:56 +0000 (+0200) Subject: channel: accept custom blank name in channel_get_name() fcn X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d27c11d2c9fa11898cf8c529f055a3a03d91f740;p=thirdparty%2Ftvheadend.git channel: accept custom blank name in channel_get_name() fcn --- diff --git a/src/api/api_channel.c b/src/api/api_channel.c index af89e2de5..0f09d7130 100644 --- a/src/api/api_channel.c +++ b/src/api/api_channel.c @@ -41,17 +41,18 @@ api_channel_list htsmsg_t *l; int cfg = api_channel_is_all(perm, args); char buf[128], ubuf[UUID_HEX_SIZE]; - const char *name; + const char *name, *blank; + blank = tvh_gettext_lang(perm->aa_lang_ui, channel_blank_name); l = htsmsg_create_list(); pthread_mutex_lock(&global_lock); CHANNEL_FOREACH(ch) { if (!cfg && !channel_access(ch, perm, 0)) continue; if (!ch->ch_enabled) { - snprintf(buf, sizeof(buf), "{%s}", channel_get_name(ch)); - name =buf; + snprintf(buf, sizeof(buf), "{%s}", channel_get_name(ch, blank)); + name = buf; } else { - name = channel_get_name(ch); + name = channel_get_name(ch, blank); } htsmsg_add_msg(l, NULL, htsmsg_create_key_val(idnode_uuid_as_str(&ch->ch_id, ubuf), name)); } diff --git a/src/api/api_epg.c b/src/api/api_epg.c index ce7897972..616a498a9 100644 --- a/src/api/api_epg.c +++ b/src/api/api_epg.c @@ -50,12 +50,12 @@ api_epg_get_list ( const char *s ) } static void -api_epg_add_channel ( htsmsg_t *m, channel_t *ch ) +api_epg_add_channel ( htsmsg_t *m, channel_t *ch, const char *blank ) { int64_t chnum; char buf[32], ubuf[UUID_HEX_SIZE]; const char *s; - htsmsg_add_str(m, "channelName", channel_get_name(ch)); + htsmsg_add_str(m, "channelName", channel_get_name(ch, blank)); htsmsg_add_str(m, "channelUuid", channel_get_uuid(ch, ubuf)); if ((chnum = channel_get_number(ch)) >= 0) { uint32_t maj = chnum / CHANNEL_SPLIT; @@ -71,7 +71,7 @@ api_epg_add_channel ( htsmsg_t *m, channel_t *ch ) } static htsmsg_t * -api_epg_entry ( epg_broadcast_t *eb, const char *lang, access_t *perm ) +api_epg_entry ( epg_broadcast_t *eb, const char *lang, access_t *perm, const char **blank ) { const char *s; char buf[64]; @@ -85,6 +85,9 @@ api_epg_entry ( epg_broadcast_t *eb, const char *lang, access_t *perm ) if (!ee || !ch) return NULL; + if (*blank == NULL) + *blank = tvh_gettext_lang(lang, channel_blank_name); + m = htsmsg_create_map(); /* EPG IDs */ @@ -101,7 +104,7 @@ api_epg_entry ( epg_broadcast_t *eb, const char *lang, access_t *perm ) } /* Channel Info */ - api_epg_add_channel(m, ch); + api_epg_add_channel(m, ch, *blank); /* Time */ htsmsg_add_s64(m, "start", eb->start); @@ -307,7 +310,7 @@ api_epg_grid { int i; epg_query_t eq; - const char *str; + const char *str, *blank = NULL; char *lang; uint32_t start, limit, end, genre; int64_t duration_min, duration_max; @@ -458,7 +461,7 @@ api_epg_grid end = MIN(eq.entries, start + limit); l = htsmsg_create_list(); for (i = start; i < end; i++) { - if (!(e = api_epg_entry(eq.result[i], lang, perm))) continue; + if (!(e = api_epg_entry(eq.result[i], lang, perm, &blank))) continue; htsmsg_add_msg(l, NULL, e); } pthread_mutex_unlock(&global_lock); @@ -487,7 +490,7 @@ api_epg_episode_broadcasts ch = ebc->channel; if (ch == NULL) continue; if (ebc == ebc_skip) continue; - m = api_epg_entry(ebc, lang, perm); + m = api_epg_entry(ebc, lang, perm, NULL); htsmsg_add_msg(l, NULL, m); (*entries)++; } @@ -573,6 +576,7 @@ api_epg_load htsmsg_t *l = htsmsg_create_list(), *ids = NULL, *m; htsmsg_field_t *f; epg_broadcast_t *e; + const char *blank = NULL; char *lang; if (!(f = htsmsg_field_find(args, "eventId"))) @@ -589,13 +593,13 @@ api_epg_load if (htsmsg_field_get_u32(f, &id)) continue; e = epg_broadcast_find_by_id(id); if (e == NULL) continue; - if ((m = api_epg_entry(e, lang, perm)) == NULL) continue; + if ((m = api_epg_entry(e, lang, perm, &blank)) == NULL) continue; htsmsg_add_msg(l, NULL, m); entries++; } } else { e = epg_broadcast_find_by_id(id); - if (e != NULL && (m = api_epg_entry(e, lang, perm)) != NULL) { + if (e != NULL && (m = api_epg_entry(e, lang, perm, &blank)) != NULL) { htsmsg_add_msg(l, NULL, m); entries++; } diff --git a/src/bouquet.c b/src/bouquet.c index 9e63a34f4..9fa8518f1 100644 --- a/src/bouquet.c +++ b/src/bouquet.c @@ -387,8 +387,8 @@ bouquet_unmap_channel(bouquet_t *bq, service_t *t) ilm_next = LIST_NEXT(ilm, ilm_in1_link); if (((channel_t *)ilm->ilm_in2)->ch_bouquet == bq) { tvhinfo(LS_BOUQUET, "%s / %s: unmapped from %s", - channel_get_name((channel_t *)ilm->ilm_in2), t->s_nicename, - bq->bq_name ?: ""); + channel_get_name((channel_t *)ilm->ilm_in2, channel_blank_name), + t->s_nicename, bq->bq_name ?: ""); channel_delete((channel_t *)ilm->ilm_in2, 1); } ilm = ilm_next; diff --git a/src/channels.c b/src/channels.c index ece006856..74677fe6d 100644 --- a/src/channels.c +++ b/src/channels.c @@ -46,12 +46,11 @@ #include "intlconv.h" #include "memoryinfo.h" -#define CHANNEL_BLANK_NAME "{name-not-set}" - struct channel_tree channels; struct channel_tag_queue channel_tags; +const char *channel_blank_name = N_("{name-not-set}"); static int channel_in_load; static void channel_tag_init ( void ); @@ -74,7 +73,7 @@ channel_class_changed ( idnode_t *self ) { channel_t *ch = (channel_t *)self; - tvhdebug(LS_CHANNEL, "channel '%s' changed", channel_get_name(ch)); + tvhdebug(LS_CHANNEL, "channel '%s' changed", channel_get_name(ch, channel_blank_name)); /* update the EPG channel <-> channel mapping here */ if (ch->ch_enabled && ch->ch_epgauto) @@ -92,7 +91,7 @@ channel_class_save ( idnode_t *self, char *filename, size_t fsize ) char ubuf[UUID_HEX_SIZE]; /* save channel (on demand) */ if (ch->ch_dont_save == 0) { - tvhdebug(LS_CHANNEL, "channel '%s' save", channel_get_name(ch)); + tvhdebug(LS_CHANNEL, "channel '%s' save", channel_get_name(ch, channel_blank_name)); c = htsmsg_create_map(); idnode_save(&ch->ch_id, c); snprintf(filename, fsize, "channel/config/%s", idnode_uuid_as_str(&ch->ch_id, ubuf)); @@ -114,9 +113,13 @@ channel_class_autoname_set ( void *obj, const void *p ) int b = *(int *)p; if (ch->ch_autoname != b) { if (b == 0 && (!ch->ch_name || *ch->ch_name == '\0')) { - s = channel_get_name(ch); - free(ch->ch_name); - ch->ch_name = strdup(s); + s = channel_get_name(ch, NULL); + if (s) { + free(ch->ch_name); + ch->ch_name = strdup(s); + } else { + return 0; + } } else if (b) { if (ch->ch_name) ch->ch_name[0] = '\0'; @@ -211,7 +214,7 @@ channel_class_get_icon ( void *obj ) static const char * channel_class_get_title ( idnode_t *self, const char *lang ) { - return channel_get_name((channel_t*)self); + return channel_get_name((channel_t*)self, tvh_gettext_lang(lang, channel_blank_name)); } /* exported for others */ @@ -247,7 +250,7 @@ static const void * channel_class_get_name ( void *o ) { static const char *s; - s = channel_get_name(o); + s = channel_get_name(o, channel_blank_name); return &s; } @@ -557,11 +560,16 @@ channel_t * channel_find_by_name ( const char *name ) { channel_t *ch; + const char *s; + if (name == NULL) return NULL; - CHANNEL_FOREACH(ch) - if (ch->ch_enabled && !strcmp(channel_get_name(ch), name)) - break; + CHANNEL_FOREACH(ch) { + if (!ch->ch_enabled) continue; + s = channel_get_name(ch, NULL); + if (s == NULL) continue; + if (strcmp(s, name) == 0) break; + } return ch; } @@ -674,9 +682,8 @@ channel_epg_update_all ( channel_t *ch ) * *************************************************************************/ const char * -channel_get_name ( channel_t *ch ) +channel_get_name ( channel_t *ch, const char *blank ) { - static const char *blank = CHANNEL_BLANK_NAME; const char *s; idnode_list_mapping_t *ilm; if (ch->ch_name && *ch->ch_name) return ch->ch_name; @@ -825,8 +832,7 @@ channel_get_icon ( channel_t *ch ) /* No user icon - try to get the channel icon by name */ if (!pick && chicon && chicon[0] >= ' ' && chicon[0] <= 122 && - (chname = channel_get_name(ch)) != NULL && chname[0] && - strcmp(chname, CHANNEL_BLANK_NAME)) { + (chname = channel_get_name(ch, NULL)) != NULL && chname[0]) { const char *chi, *send, *sname, *s; chi = strdup(chicon); @@ -966,7 +972,7 @@ channel_get_epgid ( channel_t *ch ) LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) if ((s = service_get_channel_epgid((service_t *)ilm->ilm_in1))) return s; - return channel_get_name(ch); + return channel_get_name(ch, NULL); } /* ************************************************************************** @@ -1040,7 +1046,7 @@ channel_delete ( channel_t *ch, int delconf ) idnode_save_check(&ch->ch_id, delconf); if (delconf) - tvhinfo(LS_CHANNEL, "%s - deleting", channel_get_name(ch)); + tvhinfo(LS_CHANNEL, "%s - deleting", channel_get_name(ch, channel_blank_name)); /* Tags */ while((ilm = LIST_FIRST(&ch->ch_ctms)) != NULL) diff --git a/src/channels.h b/src/channels.h index 991045fd0..357281df4 100644 --- a/src/channels.h +++ b/src/channels.h @@ -115,6 +115,7 @@ typedef struct channel_tag { extern const idclass_t channel_class; extern const idclass_t channel_tag_class; +extern const char *channel_blank_name; void channel_init(void); void channel_done(void); @@ -163,7 +164,7 @@ void channel_tag_unmap(channel_t *ch, void *origin); int channel_tag_access(channel_tag_t *ct, struct access *a, int disabled); -const char *channel_get_name ( channel_t *ch ); +const char *channel_get_name ( channel_t *ch, const char *blank ); int channel_set_name ( channel_t *ch, const char *name ); #define CHANNEL_SPLIT ((int64_t)1000000) diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index b0cda81f5..3e93b1ffd 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -295,7 +295,8 @@ typedef struct dvr_entry { } dvr_entry_t; -#define DVR_CH_NAME(e) ((e)->de_channel == NULL ? (e)->de_channel_name : channel_get_name((e)->de_channel)) +#define DVR_CH_NAME(e) \ + ((e)->de_channel == NULL ? (e)->de_channel_name : channel_get_name((e)->de_channel, channel_blank_name)) typedef enum { DVR_AUTOREC_RECORD_ALL = 0, diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 5cbaefb54..b0af7be07 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -354,16 +354,20 @@ dvr_autorec_add_series_link(const char *dvr_config_name, { dvr_autorec_entry_t *dae; htsmsg_t *conf; + const char *chname; char *title; if (!event || !event->episode) return NULL; + chname = channel_get_name(event->channel, NULL); + if (!chname) + return NULL; conf = htsmsg_create_map(); title = regexp_escape(epg_broadcast_get_title(event, NULL)); htsmsg_add_u32(conf, "enabled", 1); htsmsg_add_str(conf, "title", title); free(title); htsmsg_add_str(conf, "config_name", dvr_config_name ?: ""); - htsmsg_add_str(conf, "channel", channel_get_name(event->channel)); + htsmsg_add_str(conf, "channel", chname); if (event->serieslink) htsmsg_add_str(conf, "serieslink", event->serieslink->uri); htsmsg_add_str(conf, "owner", owner ?: ""); @@ -525,7 +529,7 @@ dvr_autorec_entry_class_channel_rend(void *o, const char *lang) { dvr_autorec_entry_t *dae = (dvr_autorec_entry_t *)o; if (dae->dae_channel) - return strdup(channel_get_name(dae->dae_channel)); + return strdup(channel_get_name(dae->dae_channel, tvh_gettext_lang(lang, channel_blank_name))); return NULL; } diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 6289f5813..aa2c37526 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -1202,7 +1202,7 @@ not_so_good: dvr_entry_trace_time2(de, "start", e->start, "stop", e->stop, "rerecord event %s on %s", epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); idnode_uuid_as_str(&de->de_config->dvr_id, cfg_uuid); snprintf(buf, sizeof(buf), _("Re-record%s%s"), @@ -1905,7 +1905,7 @@ dvr_event_replaced(epg_broadcast_t *e, epg_broadcast_t *new_e) dvr_entry_trace_time2(de, "start", e->start, "stop", e->stop, "event replaced %s on %s", epg_broadcast_get_title(e, NULL), - channel_get_name(ch)); + channel_get_name(ch, channel_blank_name)); /* Ignore - already in progress */ if (de->de_sched_state != DVR_SCHEDULED) @@ -1925,7 +1925,7 @@ dvr_event_replaced(epg_broadcast_t *e, epg_broadcast_t *new_e) de->de_config->dvr_update_window)) { tvhtrace(LS_DVR, " replacement event %s on %s @ start %s stop %s", epg_broadcast_get_title(e2, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(e2->start, t1buf, sizeof(t1buf)), gmtime2local(e2->stop, t2buf, sizeof(t2buf))); _dvr_entry_update(de, -1, NULL, e2, NULL, NULL, NULL, NULL, NULL, @@ -1983,7 +1983,7 @@ void dvr_event_updated(epg_broadcast_t *e) dvr_entry_trace_time2(de, "start", e->start, "stop", e->stop, "link to event %s on %s", epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); _dvr_entry_update(de, -1, NULL, e, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, DVR_PRIO_NOTSET, 0, 0, -1, -1); break; @@ -2005,7 +2005,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn return; tvhtrace(LS_DVR, "dvr event running check for %s on %s running %d", epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel), + channel_get_name(e->channel, channel_blank_name), running); LIST_FOREACH(de, &e->channel->ch_dvrs, de_channel_link) { if (running == EPG_RUNNING_NOW && de->de_dvb_eid == e->dvb_eid) { @@ -2013,7 +2013,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG unpause", idnode_uuid_as_str(&de->de_id, ubuf), epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); atomic_set_time_t(&de->de_running_pause, 0); atomic_add(&de->de_running_change, 1); } @@ -2021,7 +2021,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG marking start", idnode_uuid_as_str(&de->de_id, ubuf), epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); atomic_set_time_t(&de->de_running_start, gclk()); atomic_add(&de->de_running_change, 1); } @@ -2032,7 +2032,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG start", idnode_uuid_as_str(&de->de_id, ubuf), epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); } } else if ((running == EPG_RUNNING_STOP && de->de_dvb_eid == e->dvb_eid) || running == EPG_RUNNING_NOW) { @@ -2051,7 +2051,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s %s %s on %s - EPG marking stop", idnode_uuid_as_str(&de->de_id, ubuf), srcname, epg_broadcast_get_title(e, NULL), - channel_get_name(de->de_channel)); + channel_get_name(de->de_channel, channel_blank_name)); } atomic_set_time_t(&de->de_running_stop, gclk()); atomic_set_time_t(&de->de_running_pause, 0); @@ -2061,7 +2061,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s %s %s on %s - EPG stop", idnode_uuid_as_str(&de->de_id, ubuf), srcname, epg_broadcast_get_title(e, NULL), - channel_get_name(de->de_channel)); + channel_get_name(de->de_channel, channel_blank_name)); } } } else if (running == EPG_RUNNING_PAUSE && de->de_dvb_eid == e->dvb_eid) { @@ -2069,7 +2069,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG pause", idnode_uuid_as_str(&de->de_id, ubuf), epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); + channel_get_name(e->channel, channel_blank_name)); atomic_set_time_t(&de->de_running_pause, gclk()); atomic_add(&de->de_running_change, 1); } @@ -2502,7 +2502,7 @@ dvr_entry_class_channel_set(void *o, const void *v) if (de->de_channel) LIST_REMOVE(de, de_channel_link); free(de->de_channel_name); - de->de_channel_name = strdup(channel_get_name(ch)); + de->de_channel_name = strdup(channel_get_name(ch, "")); de->de_channel = ch; LIST_INSERT_HEAD(&ch->ch_dvrs, de, de_channel_link); return 1; @@ -2526,7 +2526,7 @@ dvr_entry_class_channel_rend(void *o, const char *lang) { dvr_entry_t *de = (dvr_entry_t *)o; if (de->de_channel) - return strdup(channel_get_name(de->de_channel)); + return strdup(channel_get_name(de->de_channel, tvh_gettext_lang(lang, channel_blank_name))); return NULL; } @@ -2556,7 +2556,7 @@ dvr_entry_class_channel_name_get(void *o) static const char *ret; dvr_entry_t *de = (dvr_entry_t *)o; if (de->de_channel) - ret = channel_get_name(de->de_channel); + ret = channel_get_name(de->de_channel, channel_blank_name); else ret = de->de_channel_name; return &ret; @@ -3505,7 +3505,7 @@ dvr_destroy_by_channel(channel_t *ch, int delconf) LIST_REMOVE(de, de_channel_link); de->de_channel = NULL; free(de->de_channel_name); - de->de_channel_name = strdup(channel_get_name(ch)); + de->de_channel_name = strdup(channel_get_name(ch, "")); dvr_entry_purge(de, delconf); } } diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index d7d969d2f..3598df967 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -118,12 +118,12 @@ dvr_rec_subscribe(dvr_entry_t *de) if (profile_chain_open(prch, &de->de_config->dvr_muxcnf, 0, 0)) { profile_chain_close(prch); tvherror(LS_DVR, "unable to create new channel streaming chain '%s' for '%s', using default", - profile_get_name(pro), channel_get_name(de->de_channel)); + profile_get_name(pro), channel_get_name(de->de_channel, channel_blank_name)); pro = profile_find_by_name(NULL, NULL); profile_chain_init(prch, pro, de->de_channel); if (profile_chain_open(prch, &de->de_config->dvr_muxcnf, 0, 0)) { tvherror(LS_DVR, "unable to create channel streaming default chain '%s' for '%s'", - profile_get_name(pro), channel_get_name(de->de_channel)); + profile_get_name(pro), channel_get_name(de->de_channel, channel_blank_name)); profile_chain_close(prch); free(prch); return -EINVAL; @@ -135,7 +135,7 @@ dvr_rec_subscribe(dvr_entry_t *de) NULL, NULL, NULL, NULL); if (de->de_s == NULL) { tvherror(LS_DVR, "unable to create new channel subcription for '%s' profile '%s'", - channel_get_name(de->de_channel), profile_get_name(pro)); + channel_get_name(de->de_channel, channel_blank_name), profile_get_name(pro)); profile_chain_close(prch); free(prch); return -EINVAL; diff --git a/src/dvr/dvr_timerec.c b/src/dvr/dvr_timerec.c index 3f578a181..af93fb51f 100644 --- a/src/dvr/dvr_timerec.c +++ b/src/dvr/dvr_timerec.c @@ -356,7 +356,7 @@ dvr_timerec_entry_class_channel_rend(void *o, const char *lang) { dvr_timerec_entry_t *dte = (dvr_timerec_entry_t *)o; if (dte->dte_channel) - return strdup(channel_get_name(dte->dte_channel)); + return strdup(channel_get_name(dte->dte_channel, tvh_gettext_lang(lang, channel_blank_name))); return NULL; } diff --git a/src/epg.c b/src/epg.c index aaccc814f..e2d22f654 100644 --- a/src/epg.c +++ b/src/epg.c @@ -1601,7 +1601,7 @@ static void _epg_channel_timer_callback ( void *p ) if ( ebc->stop <= gclk() ) { tvhdebug(LS_EPG, "expire event %u (%s) from %s", ebc->id, epg_broadcast_get_title(ebc, NULL), - channel_get_name(ch)); + channel_get_name(ch, channel_blank_name)); _epg_channel_rem_broadcast(ch, ebc, NULL); continue; // skip to next @@ -1624,16 +1624,16 @@ static void _epg_channel_timer_callback ( void *p ) tvhdebug(LS_EPG, "now/next %u/%u set on %s", ch->ch_epg_now ? ch->ch_epg_now->id : 0, ch->ch_epg_next ? ch->ch_epg_next->id : 0, - channel_get_name(ch)); + channel_get_name(ch, channel_blank_name)); tvhdebug(LS_EPG, "inform HTSP of now event change on %s", - channel_get_name(ch)); + channel_get_name(ch, channel_blank_name)); htsp_channel_update_nownext(ch); } /* re-arm */ if (next) { tvhdebug(LS_EPG, "arm channel timer @ %s for %s", - gmtime2local(next, tm1, sizeof(tm1)), channel_get_name(ch)); + gmtime2local(next, tm1, sizeof(tm1)), channel_get_name(ch, channel_blank_name)); gtimer_arm_absn(&ch->ch_epg_timer, _epg_channel_timer_callback, ch, next); } @@ -1653,7 +1653,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast if (!src) { tvherror(LS_EPG, "skipped event (!grabber) %u (%s) on %s @ %s to %s", (*bcast)->id, epg_broadcast_get_title(*bcast, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local((*bcast)->start, tm1, sizeof(tm1)), gmtime2local((*bcast)->stop, tm2, sizeof(tm2))); return NULL; @@ -1682,7 +1682,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast ret->grabber = src; tvhtrace(LS_EPG, "added event %u (%s) on %s @ %s to %s (grabber %s)", ret->id, epg_broadcast_get_title(ret, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ret->start, tm1, sizeof(tm1)), gmtime2local(ret->stop, tm2, sizeof(tm2)), src->id); @@ -1702,7 +1702,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast _epg_object_set_updated(ret); tvhtrace(LS_EPG, "updated event %u (%s) on %s @ %s to %s (grabber %s)", ret->id, epg_broadcast_get_title(ret, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ret->start, tm1, sizeof(tm1)), gmtime2local(ret->stop, tm2, sizeof(tm2)), src->id); @@ -1725,7 +1725,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast ebc->stop - ret->start <= config.epg_cutwindow) { tvhtrace(LS_EPG, "cut stop for overlap (b) event %u (%s) on %s @ %s to %s", ebc->id, epg_broadcast_get_title(ebc, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ebc->start, tm1, sizeof(tm1)), gmtime2local(ebc->stop, tm2, sizeof(tm2))); ebc->stop = ret->start; @@ -1734,7 +1734,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast } tvhtrace(LS_EPG, "remove overlap (b) event %u (%s) on %s @ %s to %s", ebc->id, epg_broadcast_get_title(ebc, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ebc->start, tm1, sizeof(tm1)), gmtime2local(ebc->stop, tm2, sizeof(tm2))); _epg_channel_rem_broadcast(ch, ebc, ret); @@ -1752,7 +1752,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast ret->stop - ebc->start <= config.epg_cutwindow) { tvhtrace(LS_EPG, "cut stop for overlap (a) event %u (%s) on %s @ %s to %s", ebc->id, epg_broadcast_get_title(ebc, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ebc->start, tm1, sizeof(tm1)), gmtime2local(ebc->stop, tm2, sizeof(tm2))); ret->stop = ebc->start; @@ -1761,7 +1761,7 @@ static epg_broadcast_t *_epg_channel_add_broadcast } tvhtrace(LS_EPG, "remove overlap (a) event %u (%s) on %s @ %s to %s", ebc->id, epg_broadcast_get_title(ebc, NULL), - channel_get_name(ch), + channel_get_name(ch, channel_blank_name), gmtime2local(ebc->start, tm1, sizeof(tm1)), gmtime2local(ebc->stop, tm2, sizeof(tm2))); _epg_channel_rem_broadcast(ch, ebc, ret); @@ -2653,6 +2653,7 @@ _eq_comp_num ( epg_filter_num_t *f, int64_t val ) static inline int _eq_comp_str ( epg_filter_str_t *f, const char *str ) { + if (!str) return 0; switch (f->comp) { case EC_EQ: return strcmp(str, f->str); case EC_LT: return strcmp(str, f->str) > 0; @@ -2687,7 +2688,7 @@ _eq_add ( epg_query_t *eq, epg_broadcast_t *e ) if (eq->channel_num.comp != EC_NO) if (_eq_comp_num(&eq->channel_num, channel_get_number(e->channel))) return; if (eq->channel_name.comp != EC_NO) - if (_eq_comp_str(&eq->channel_name, channel_get_name(e->channel))) return; + if (_eq_comp_str(&eq->channel_name, channel_get_name(e->channel, NULL))) return; if (eq->genre_count) { epg_genre_t genre; uint32_t i, r = 0; @@ -2873,10 +2874,9 @@ static int _epg_sort_description_descending ( const void *a, const void *b, void static int _epg_sort_channel_ascending ( const void *a, const void *b, void *eq ) { - char *s1 = strdup(channel_get_name((*(epg_broadcast_t**)a)->channel)); - char *s2 = strdup(channel_get_name((*(epg_broadcast_t**)b)->channel)); + char *s1 = strdup(channel_get_name((*(epg_broadcast_t**)a)->channel, "")); + const char *s2 = channel_get_name((*(epg_broadcast_t**)b)->channel, ""); int r = strcmp(s1, s2); - free(s2); free(s1); return r; } diff --git a/src/epggrab/channel.c b/src/epggrab/channel.c index 24dd0034c..6a2fa68f9 100644 --- a/src/epggrab/channel.c +++ b/src/epggrab/channel.c @@ -78,7 +78,7 @@ int epggrab_channel_match_name ( epggrab_channel_t *ec, channel_t *ch ) if (!epggrab_channel_check(ec, ch)) return 0; - name = channel_get_name(ch); + name = channel_get_name(ch, NULL); if (name == NULL) return 0; @@ -114,7 +114,7 @@ _epgggrab_channel_link_delete(idnode_list_mapping_t *ilm, int delconf) epggrab_channel_t *ec = (epggrab_channel_t *)ilm->ilm_in1; channel_t *ch = (channel_t *)ilm->ilm_in2; tvhdebug(ec->mod->subsys, "%s: unlinking %s from %s", - ec->mod->id, ec->id, channel_get_name(ch)); + ec->mod->id, ec->id, channel_get_name(ch, channel_blank_name)); idnode_list_unlink(ilm, delconf ? ec : NULL); } @@ -173,7 +173,7 @@ epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch, void *origin ) /* New link */ tvhdebug(ec->mod->subsys, "%s: linking %s to %s", - ec->mod->id, ec->id, channel_get_name(ch)); + ec->mod->id, ec->id, channel_get_name(ch, channel_blank_name)); ilm = idnode_list_link(&ec->idnode, &ec->channels, &ch->ch_id, &ch->ch_epggrab, diff --git a/src/epggrab/module/eit.c b/src/epggrab/module/eit.c index b2dd2221a..78f4ecdbb 100644 --- a/src/epggrab/module/eit.c +++ b/src/epggrab/module/eit.c @@ -450,7 +450,8 @@ static int _eit_process_event_one ebc = epg_broadcast_find_by_time(ch, mod, start, stop, 1, &save2, &changes2); tvhtrace(LS_TBL_EIT, "svc='%s', ch='%s', eid=%5d, tbl=%02x, running=%d, start=%s," " stop=%s, ebc=%p", - svc->s_dvb_svcname ?: "(null)", ch ? channel_get_name(ch) : "(null)", + svc->s_dvb_svcname ?: "(null)", + ch ? channel_get_name(ch, channel_blank_name) : "(null)", eid, tableid, running, gmtime2local(start, tm1, sizeof(tm1)), gmtime2local(stop, tm2, sizeof(tm2)), ebc); diff --git a/src/epggrab/module/psip.c b/src/epggrab/module/psip.c index 4da7b4715..68c56f74b 100644 --- a/src/epggrab/module/psip.c +++ b/src/epggrab/module/psip.c @@ -381,7 +381,8 @@ _psip_eit_callback_channel if (title == NULL) continue; tvhtrace(LS_PSIP, " %03d: [%s] eventid 0x%04x at %"PRItime_t", duration %d, title: '%s' (%d bytes)", - i, ch ? channel_get_name(ch) : "(null)", eventid, start, length, + i, ch ? channel_get_name(ch, channel_blank_name) : "(null)", + eventid, start, length, lang_str_get(title, NULL), titlelen); save2 = save3 = changes2 = changes3 = 0; diff --git a/src/htsp_server.c b/src/htsp_server.c index 7d12eaac7..6c1f51511 100644 --- a/src/htsp_server.c +++ b/src/htsp_server.c @@ -797,7 +797,7 @@ htsp_build_channel(channel_t *ch, const char *method, htsp_connection_t *htsp) if (channel_get_minor(chnum)) htsmsg_add_u32(out, "channelNumberMinor", channel_get_minor(chnum)); - htsmsg_add_str(out, "channelName", channel_get_name(ch)); + htsmsg_add_str(out, "channelName", channel_get_name(ch, channel_blank_name)); if ((icon = channel_get_icon(ch))) { /* Handle older clients */ @@ -2493,7 +2493,8 @@ htsp_method_subscribe(htsp_connection_t *htsp, htsmsg_t *in) LIST_INSERT_HEAD(&htsp->htsp_subscriptions, hs, hs_link); tvhdebug(LS_HTSP, "%s - subscribe to %s using profile %s", - htsp->htsp_logname, channel_get_name(ch), profile_get_name(pro)); + htsp->htsp_logname, channel_get_name(ch, channel_blank_name), + profile_get_name(pro)); hs->hs_s = subscription_create_from_channel(&hs->hs_prch, NULL, weight, htsp->htsp_logname, SUBSCRIPTION_PACKET | diff --git a/src/muxer/muxer_mkv.c b/src/muxer/muxer_mkv.c index f351e8dde..bfdc683c5 100644 --- a/src/muxer/muxer_mkv.c +++ b/src/muxer/muxer_mkv.c @@ -745,7 +745,7 @@ _mk_build_metadata(const dvr_entry_t *de, const epg_broadcast_t *ebc, if(ch) addtag(q, build_tag_string("TVCHANNEL", - channel_get_name(ch), NULL, 0, NULL)); + channel_get_name(ch, channel_blank_name), NULL, 0, NULL)); if (ee && ee->summary) ls = ee->summary; diff --git a/src/service.c b/src/service.c index 15ad00dff..768fa2a3a 100644 --- a/src/service.c +++ b/src/service.c @@ -834,7 +834,7 @@ service_find_instance /* Debug */ TAILQ_FOREACH(si, sil, si_link) { - const char *name = ch ? channel_get_name(ch) : NULL; + const char *name = ch ? channel_get_name(ch, NULL) : NULL; if (!name && s) name = s->s_nicename; tvhdebug(LS_SERVICE, "%d: %s si %p %s weight %d prio %d error %d", si->si_instance, name, si, si->si_source, si->si_weight, si->si_prio, diff --git a/src/subscriptions.c b/src/subscriptions.c index b76eb2d1c..b5f46585c 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -197,7 +197,8 @@ subscription_show_none(th_subscription_t *s) s->ths_title); if (s->ths_channel) tvh_strlcatf(buf, sizeof(buf), l, " to channel \"%s\"", - s->ths_channel ? channel_get_name(s->ths_channel) : "none"); + s->ths_channel ? + channel_get_name(s->ths_channel, channel_blank_name) : "none"); #if ENABLE_MPEGTS else if (s->ths_raw_service) { mpegts_service_t *ms = (mpegts_service_t *)s->ths_raw_service; @@ -231,7 +232,8 @@ subscription_show_info(th_subscription_t *s) tvh_strlcatf(buf, sizeof(buf), l, "\"%s\" subscribing", s->ths_title); if (s->ths_channel) { tvh_strlcatf(buf, sizeof(buf), l, " on channel \"%s\"", - s->ths_channel ? channel_get_name(s->ths_channel) : "none"); + s->ths_channel ? + channel_get_name(s->ths_channel, channel_blank_name) : "none"); #if ENABLE_MPEGTS } else if (s->ths_raw_service && si.si_mux) { tvh_strlcatf(buf, sizeof(buf), l, " to mux \"%s\"", si.si_mux); @@ -321,7 +323,7 @@ subscription_start_instance if (s->ths_channel) tvhtrace(LS_SUBSCRIPTION, "%04X: find service for %s weight %d", - shortid(s), channel_get_name(s->ths_channel), s->ths_weight); + shortid(s), channel_get_name(s->ths_channel, channel_blank_name), s->ths_weight); else tvhtrace(LS_SUBSCRIPTION, "%04X: find instance for %s weight %d", shortid(s), s->ths_service->s_nicename, s->ths_weight); @@ -410,7 +412,7 @@ subscription_reschedule(void) if (s->ths_flags & SUBSCRIPTION_RESTART) { if (s->ths_channel) tvhwarn(LS_SUBSCRIPTION, "%04X: restarting channel %s", - shortid(s), channel_get_name(s->ths_channel)); + shortid(s), channel_get_name(s->ths_channel, channel_blank_name)); else tvhwarn(LS_SUBSCRIPTION, "%04X: restarting service %s", shortid(s), s->ths_service->s_nicename); @@ -710,7 +712,7 @@ subscription_unsubscribe(th_subscription_t *s, int flags) if (s->ths_channel != NULL) { LIST_REMOVE(s, ths_channel_link); tvh_strlcatf(buf, sizeof(buf), l, "\"%s\" unsubscribing from \"%s\"", - s->ths_title, channel_get_name(s->ths_channel)); + s->ths_title, channel_get_name(s->ths_channel, channel_blank_name)); } else { tvh_strlcatf(buf, sizeof(buf), l, "\"%s\" unsubscribing", s->ths_title); } @@ -862,7 +864,7 @@ subscription_create_from_channel_or_service(profile_chain_t *prch, const char *pro_name = prch->prch_pro ? profile_get_name(prch->prch_pro) : ""; if (ch) tvhtrace(LS_SUBSCRIPTION, "%04X: creating subscription for %s weight %d using profile %s", - shortid(s), channel_get_name(ch), weight, pro_name); + shortid(s), channel_get_name(ch, channel_blank_name), weight, pro_name); else tvhtrace(LS_SUBSCRIPTION, "%04X: creating subscription for service %s weight %d using profile %s", shortid(s), service->s_nicename, weight, pro_name); @@ -1014,7 +1016,7 @@ subscription_create_msg(th_subscription_t *s, const char *lang) htsmsg_add_str(m, "title", s->ths_title); if(s->ths_channel != NULL) - htsmsg_add_str(m, "channel", channel_get_name(s->ths_channel)); + htsmsg_add_str(m, "channel", channel_get_name(s->ths_channel, tvh_gettext_lang(lang, channel_blank_name))); if((t = s->ths_service) != NULL) { htsmsg_add_str(m, "service", service_adapter_nicename(t, buf, sizeof(buf))); diff --git a/src/webui/simpleui.c b/src/webui/simpleui.c index 6784e30bf..4722ac337 100644 --- a/src/webui/simpleui.c +++ b/src/webui/simpleui.c @@ -356,7 +356,7 @@ page_einfo(http_connection_t *hc, const char *remain, void *opaque) s = epg_episode_get_title(e->episode, lang); htsbuf_qprintf(hq, "
\"%s\": \"%s\"

", - channel_get_name(e->channel), s ?: ""); + channel_get_name(e->channel, lang), s ?: ""); dvr_status = de != NULL ? de->de_sched_state : DVR_NOSTATE; diff --git a/src/webui/statedump.c b/src/webui/statedump.c index 6c3dcb974..1397df095 100644 --- a/src/webui/statedump.c +++ b/src/webui/statedump.c @@ -60,7 +60,8 @@ dumpchannels(htsbuf_queue_t *hq) CHANNEL_FOREACH(ch) { htsbuf_qprintf(hq, "%s%s (%d)\n", !ch->ch_enabled ? "[DISABLED] " : "", - channel_get_name(ch), channel_get_id(ch)); + channel_get_name(ch, channel_blank_name), + channel_get_id(ch)); chnum = channel_get_number(ch); if (channel_get_minor(chnum)) snprintf(chbuf, sizeof(chbuf), "%u.%u", diff --git a/src/webui/webui.c b/src/webui/webui.c index c11f733b3..ba2c89026 100644 --- a/src/webui/webui.c +++ b/src/webui/webui.c @@ -85,7 +85,7 @@ http_channel_playlist_cmp(const void *a, const void *b) else if (n1 < n2) r = -1; else - r = strcasecmp(channel_get_name(c1), channel_get_name(c2)); + r = strcasecmp(channel_get_name(c1, ""), channel_get_name(c2, "")); return r; } @@ -93,7 +93,7 @@ static int http_channel_playlist_cmp2(const void *a, const void *b) { channel_t *c1 = *(channel_t **)a, *c2 = *(channel_t **)b; - return strcasecmp(channel_get_name(c1), channel_get_name(c2)); + return strcasecmp(channel_get_name(c1, ""), channel_get_name(c2, "")); } static sortfcn_t *http_channel_playlist_sfcn(http_connection_t *hc) @@ -584,7 +584,7 @@ http_e2_playlist_add(htsbuf_queue_t *hq, const char *hostpath, */ static void http_satip_m3u_playlist_add(htsbuf_queue_t *hq, const char *hostpath, - channel_t *ch) + channel_t *ch, const char *blank) { char buf[64]; const char *name, *logo; @@ -601,7 +601,7 @@ http_satip_m3u_playlist_add(htsbuf_queue_t *hq, const char *hostpath, src = (s && s->s_satip_source) ? s->s_satip_source(s) : -1; if (src < 1) return; - name = channel_get_name(ch); + name = channel_get_name(ch, blank); logo = channel_get_icon(ch); snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(ch)); htsbuf_append_str(hq, "#EXTINF:-1"); @@ -623,7 +623,8 @@ http_channel_playlist(http_connection_t *hc, int pltype, channel_t *channel) htsbuf_queue_t *hq; char buf[255]; char *profile, *hostpath; - const char *name; + const char *name, *blank; + const char *lang = hc->hc_access->aa_lang_ui; char ubuf[UUID_HEX_SIZE]; if (http_access_verify_channel(hc, ACCESS_STREAMING, channel)) @@ -636,7 +637,8 @@ http_channel_playlist(http_connection_t *hc, int pltype, channel_t *channel) snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(channel)); - name = channel_get_name(channel); + blank = tvh_gettext_lang(lang, channel_blank_name); + name = channel_get_name(channel, blank); if (pltype == PLAYLIST_M3U) { @@ -653,7 +655,7 @@ http_channel_playlist(http_connection_t *hc, int pltype, channel_t *channel) } else if (pltype == PLAYLIST_SATIP_M3U) { - http_satip_m3u_playlist_add(hq, hostpath, channel); + http_satip_m3u_playlist_add(hq, hostpath, channel, blank); } @@ -673,7 +675,8 @@ http_tag_playlist(http_connection_t *hc, int pltype, channel_tag_t *tag) char buf[255], ubuf[UUID_HEX_SIZE]; idnode_list_mapping_t *ilm; char *profile, *hostpath; - const char *name; + const char *name, *blank; + const char *lang = hc->hc_access->aa_lang_ui; channel_t *ch; channel_t **chlist; int idx = 0, count = 0; @@ -709,12 +712,13 @@ http_tag_playlist(http_connection_t *hc, int pltype, channel_tag_t *tag) htsbuf_append_str(hq, "#EXTM3U\n"); else if (pltype == PLAYLIST_E2) htsbuf_qprintf(hq, "#NAME %s\n", tag->ct_name); + blank = tvh_gettext_lang(lang, channel_blank_name); for (idx = 0; idx < count; idx++) { ch = chlist[idx]; if (http_access_verify_channel(hc, ACCESS_STREAMING, ch)) continue; snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(ch)); - name = channel_get_name(ch); + name = channel_get_name(ch, blank); if (pltype == PLAYLIST_M3U) { http_m3u_playlist_add(hq, hostpath, buf, profile, name, channel_get_icon(ch), @@ -724,7 +728,7 @@ http_tag_playlist(http_connection_t *hc, int pltype, channel_tag_t *tag) htsbuf_qprintf(hq, "#NAME %s\n", name); http_e2_playlist_add(hq, hostpath, buf, profile, name); } else if (pltype == PLAYLIST_SATIP_M3U) { - http_satip_m3u_playlist_add(hq, hostpath, ch); + http_satip_m3u_playlist_add(hq, hostpath, ch, blank); } } @@ -752,6 +756,8 @@ http_tag_list_playlist(http_connection_t *hc, int pltype) int idx = 0, count = 0; int chidx = 0, chcount = 0; char *profile, *hostpath; + const char *lang = hc->hc_access->aa_lang_ui; + const char *blank; idnode_list_mapping_t *ilm; if(hc->hc_access == NULL || @@ -796,6 +802,7 @@ http_tag_list_playlist(http_connection_t *hc, int pltype) chlist = NULL; } + blank = tvh_gettext_lang(lang, channel_blank_name); htsbuf_append_str(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n"); for (idx = 0; idx < count; idx++) { ct = ctlist[idx]; @@ -812,7 +819,7 @@ http_tag_list_playlist(http_connection_t *hc, int pltype) LIST_FOREACH(ilm, &ct->ct_ctms, ilm_in1_link) if (ch == (channel_t *)ilm->ilm_in2) { snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(ch)); - http_e2_playlist_add(hq, hostpath, buf, profile, channel_get_name(ch)); + http_e2_playlist_add(hq, hostpath, buf, profile, channel_get_name(ch, blank)); break; } } @@ -821,7 +828,7 @@ http_tag_list_playlist(http_connection_t *hc, int pltype) ch = chlist[chidx]; LIST_FOREACH(ilm, &ct->ct_ctms, ilm_in1_link) if (ch == (channel_t *)ilm->ilm_in2) - http_satip_m3u_playlist_add(hq, hostpath, ch); + http_satip_m3u_playlist_add(hq, hostpath, ch, blank); } } } @@ -847,7 +854,8 @@ http_channel_list_playlist(http_connection_t *hc, int pltype) channel_t **chlist; int idx = 0, count = 0; char *profile, *hostpath; - const char *name; + const char *name, *blank; + const char *lang = hc->hc_access->aa_lang_ui; if(hc->hc_access == NULL || access_verify2(hc->hc_access, ACCESS_STREAMING)) @@ -872,6 +880,7 @@ http_channel_list_playlist(http_connection_t *hc, int pltype) qsort(chlist, count, sizeof(channel_t *), http_channel_playlist_sfcn(hc)); + blank = tvh_gettext_lang(lang, channel_blank_name); htsbuf_append_str(hq, pltype == PLAYLIST_E2 ? "#NAME Tvheadend Channels\n" : "#EXTM3U\n"); for (idx = 0; idx < count; idx++) { ch = chlist[idx]; @@ -879,7 +888,7 @@ http_channel_list_playlist(http_connection_t *hc, int pltype) if (http_access_verify_channel(hc, ACCESS_STREAMING, ch)) continue; - name = channel_get_name(ch); + name = channel_get_name(ch, blank); snprintf(buf, sizeof(buf), "/stream/channelid/%d", channel_get_id(ch)); if (pltype == PLAYLIST_M3U) { @@ -890,7 +899,7 @@ http_channel_list_playlist(http_connection_t *hc, int pltype) } else if (pltype == PLAYLIST_E2) { http_e2_playlist_add(hq, hostpath, buf, profile, name); } else if (pltype == PLAYLIST_SATIP_M3U) { - http_satip_m3u_playlist_add(hq, hostpath, ch); + http_satip_m3u_playlist_add(hq, hostpath, ch, blank); } } @@ -1315,7 +1324,7 @@ http_stream_channel(http_connection_t *hc, channel_t *ch, int weight) NULL); if(s) { - name = tvh_strdupa(channel_get_name(ch)); + name = tvh_strdupa(channel_get_name(ch, channel_blank_name)); pthread_mutex_unlock(&global_lock); http_stream_run(hc, &prch, name, s); pthread_mutex_lock(&global_lock); diff --git a/src/webui/xmltv.c b/src/webui/xmltv.c index 54da0452e..0c7f8733c 100644 --- a/src/webui/xmltv.c +++ b/src/webui/xmltv.c @@ -68,7 +68,7 @@ http_xmltv_channel_add(htsbuf_queue_t *hq, const char *hostpath, channel_t *ch) char ubuf[UUID_HEX_SIZE]; htsbuf_qprintf(hq, "\n", idnode_uuid_as_str(&ch->ch_id, ubuf)); - htsbuf_append_and_escape_xml(hq, channel_get_name(ch)); + htsbuf_append_and_escape_xml(hq, channel_get_name(ch, "")); htsbuf_append_str(hq, "\n"); if (icon) { if (strncmp(icon, "imagecache/", 11) == 0)