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));
}
}
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;
}
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];
if (!ee || !ch) return NULL;
+ if (*blank == NULL)
+ *blank = tvh_gettext_lang(lang, channel_blank_name);
+
m = htsmsg_create_map();
/* EPG IDs */
}
/* Channel Info */
- api_epg_add_channel(m, ch);
+ api_epg_add_channel(m, ch, *blank);
/* Time */
htsmsg_add_s64(m, "start", eb->start);
{
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;
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);
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)++;
}
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")))
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++;
}
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 ?: "<unknown>");
+ channel_get_name((channel_t *)ilm->ilm_in2, channel_blank_name),
+ t->s_nicename, bq->bq_name ?: "<unknown>");
channel_delete((channel_t *)ilm->ilm_in2, 1);
}
ilm = ilm_next;
#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 );
{
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)
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));
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';
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 */
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;
}
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;
}
* *************************************************************************/
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;
/* 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);
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);
}
/* **************************************************************************
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)
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);
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)
} 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,
{
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 ?: "");
{
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;
}
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"),
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)
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,
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;
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) {
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);
}
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);
}
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) {
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);
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) {
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);
}
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;
{
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;
}
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;
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);
}
}
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;
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;
{
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;
}
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
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);
}
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;
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);
_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);
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;
}
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);
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;
}
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);
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;
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;
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;
}
if (!epggrab_channel_check(ec, ch))
return 0;
- name = channel_get_name(ch);
+ name = channel_get_name(ch, NULL);
if (name == NULL)
return 0;
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);
}
/* 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,
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);
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;
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 */
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 |
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;
/* 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,
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;
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);
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);
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);
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);
}
const char *pro_name = prch->prch_pro ? profile_get_name(prch->prch_pro) : "<none>";
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);
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)));
s = epg_episode_get_title(e->episode, lang);
htsbuf_qprintf(hq, "<hr><b>\"%s\": \"%s\"</b><br><br>",
- channel_get_name(e->channel), s ?: "");
+ channel_get_name(e->channel, lang), s ?: "");
dvr_status = de != NULL ? de->de_sched_state : DVR_NOSTATE;
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",
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;
}
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)
*/
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;
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");
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))
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) {
} else if (pltype == PLAYLIST_SATIP_M3U) {
- http_satip_m3u_playlist_add(hq, hostpath, channel);
+ http_satip_m3u_playlist_add(hq, hostpath, channel, blank);
}
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;
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),
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);
}
}
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 ||
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];
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;
}
}
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);
}
}
}
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))
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];
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) {
} 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);
}
}
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);
char ubuf[UUID_HEX_SIZE];
htsbuf_qprintf(hq, "<channel id=\"%s\">\n<display-name>",
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, "</display-name>\n");
if (icon) {
if (strncmp(icon, "imagecache/", 11) == 0)