]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
channel: accept custom blank name in channel_get_name() fcn
authorJaroslav Kysela <perex@perex.cz>
Wed, 24 May 2017 11:18:56 +0000 (13:18 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 24 May 2017 12:04:58 +0000 (14:04 +0200)
22 files changed:
src/api/api_channel.c
src/api/api_epg.c
src/bouquet.c
src/channels.c
src/channels.h
src/dvr/dvr.h
src/dvr/dvr_autorec.c
src/dvr/dvr_db.c
src/dvr/dvr_rec.c
src/dvr/dvr_timerec.c
src/epg.c
src/epggrab/channel.c
src/epggrab/module/eit.c
src/epggrab/module/psip.c
src/htsp_server.c
src/muxer/muxer_mkv.c
src/service.c
src/subscriptions.c
src/webui/simpleui.c
src/webui/statedump.c
src/webui/webui.c
src/webui/xmltv.c

index af89e2de59c3df061bd5d3efa007645f489b6bfd..0f09d7130dfb2487bb09beaadfee1151afb25fb0 100644 (file)
@@ -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));
   }
index ce789797279a5b8e2d383a3a6630afb9cbb30168..616a498a956a9932ef0f3f41cc7cbd687afbe475 100644 (file)
@@ -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++;
     }
index 9e63a34f43af8451bb7f58a5380ca2f659093f13..9fa8518f1f9daa5f91b07053229a0c0ecea32c84 100644 (file)
@@ -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 ?: "<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;
index ece0068564e50770832450dd6eba65eefb09e3ff..74677fe6d5db482fbe0cc3a88e739d1ac4528c04 100644 (file)
 #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)
index 991045fd08bc0937bacc6f5cac9161cb7de97bb0..357281df4b4344a093b1b3f17e6d7b6361575740 100644 (file)
@@ -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)
index b0cda81f5298f6c62c658fd8c38633fe5bac6f3f..3e93b1ffd43d4e9e62977bcc4513fdca6c4e6ae7 100644 (file)
@@ -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,
index 5cbaefb5458f15a7feb1e588552e04fa958413ca..b0af7be07b6a4fbce57002a67d61dcdd0e3da1c6 100644 (file)
@@ -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;
 }
 
index 6289f5813f11d055fedd2e3bf5efa3f4069629dc..aa2c375265302e2a91193f3075c755d5fa4485da 100644 (file)
@@ -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);
   }
 }
index d7d969d2f4ddc8c8d0a561aaaf71c444b8fc3810..3598df96755a645c7232f5d3549081f3dd396307 100644 (file)
@@ -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;
index 3f578a181d5433e5fdd31b32e9089faf655b641d..af93fb51fc0cf13c51523889c67a81e6e81d86f3 100644 (file)
@@ -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;
 }
 
index aaccc814f7462ce10dbc27f3c3f9e8853a70602b..e2d22f654ce8208ca5a1198199d032a87c17f215 100644 (file)
--- 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;
 }
index 24dd0034c563c57c7ae2226066b8229475c9eb5a..6a2fa68f97562733d848c6b4d06eba83becfab49 100644 (file)
@@ -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,
index b2dd2221ae00de533d8195d4897e8ff838e40d6d..78f4ecdbb445bf8803101b824fde258e76ff6754 100644 (file)
@@ -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);
index 4da7b4715f3d42cd8860ec831b2cdc08c44d68ce..68c56f74b7a535c631e33165afc63ec213c96b61 100644 (file)
@@ -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;
index 7d12eaac7a38a5c690136de1e0337485621c0803..6c1f51511be5f8091b00fabedf66dc544796f45b 100644 (file)
@@ -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 |
index f351e8ddef337bba4483a8b91595208f375934b1..bfdc683c5ace3bfa60ac2faa6f278d91007bc0a8 100644 (file)
@@ -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;
index 15ad00dff751ce0922d1e679d079720870d701d7..768fa2a3ab67c9334d28e9e16506be2e99c54a99 100644 (file)
@@ -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,
index b76eb2d1c413d1f83b80d2c5d844f609103ff85e..b5f46585c89b092942b0768b73677e7d20e7713d 100644 (file)
@@ -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) : "<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);
@@ -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)));
index 6784e30bf3f913c793b289628d5cca4456a36b7e..4722ac3375a08dff253e6c59cb259b1a79997c84 100644 (file)
@@ -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, "<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;
 
index 6c3dcb974800e6170fbd525d4ba2b887ecf73c04..1397df095d682eebb8e70a6fb1e210f49d622bd9 100644 (file)
@@ -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",
index c11f733b342c063631da4300a5b9ae982e7705a4..ba2c8902609abbbc1f4f1d5d959b20db1093b299 100644 (file)
@@ -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);
index 54da0452ea38a95f4f408d14d5d61c3622926fac..0c7f8733c63f43cfd31f869f35c05470b931e518 100644 (file)
@@ -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, "<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)