Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
service: add PMT# for noname services and include full service name i…
…n service lists
  • Loading branch information
perexg committed Jul 31, 2014
1 parent ea7a93b commit 43253f8
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 4 deletions.
49 changes: 45 additions & 4 deletions src/service.c
Expand Up @@ -128,7 +128,7 @@ service_class_channel_enum
static const char *
service_class_get_title ( idnode_t *self )
{
return service_get_channel_name((service_t*)self);
return service_get_full_channel_name((service_t *)self);
}

static const void *
Expand Down Expand Up @@ -856,25 +856,39 @@ service_stream_make_nicename(service_t *t, elementary_stream_t *st)
void
service_make_nicename(service_t *t)
{
char buf[256];
char buf[256], buf2[16];
source_info_t si;
elementary_stream_t *st;
char *service_name;
int prefidx;

lock_assert(&t->s_stream_mutex);

t->s_setsourceinfo(t, &si);

service_name = si.si_service;
if (service_name == NULL || si.si_service[0] == '0') {
snprintf(buf2, sizeof(buf2), "{PMT:%d}", t->s_pmt_pid);
service_name = buf2;
}

snprintf(buf, sizeof(buf),
"%s%s%s%s%s%s%s",
si.si_adapter ?: "", si.si_adapter && si.si_network ? "/" : "",
si.si_network ?: "", si.si_network && si.si_mux ? "/" : "",
si.si_mux ?: "", si.si_mux && si.si_service ? "/" : "",
si.si_service ?: "");
si.si_mux ?: "", si.si_mux && service_name ? "/" : "",
service_name ?: "");
prefidx = (si.si_adapter ? strlen(si.si_adapter) : 0) +
(si.si_adapter && si.si_network ? 1 : 0) +
(si.si_network ? strlen(si.si_network) : 0) +
(si.si_network && si.si_mux ? 1 : 0) +
(si.si_mux ? strlen(si.si_mux) : 0);

service_source_info_free(&si);

free(t->s_nicename);
t->s_nicename = strdup(buf);
t->s_nicename_prefidx = prefidx;

TAILQ_FOREACH(st, &t->s_components, es_link)
service_stream_make_nicename(t, st);
Expand Down Expand Up @@ -1482,6 +1496,33 @@ service_get_channel_name ( service_t *s )
return r;
}

/*
* Get full name for channel from service
*/
const char *
service_get_full_channel_name ( service_t *s )
{
static char __thread buf[256];
const char *r = NULL;
int len;

if (s->s_channel_name)
r = s->s_channel_name(s);
if (r == NULL)
return s->s_nicename;

len = s->s_nicename_prefidx;
if (len >= sizeof(buf))
len = sizeof(buf) - 1;
strncpy(buf, s->s_nicename, len);
if (len < sizeof(buf) - 1)
buf[len++] = '/';
buf[len] = '\0';
if (len < sizeof(buf))
snprintf(buf + len, sizeof(buf) - len, "%s", r);
return buf;
}

/*
* Get number for service
*/
Expand Down
2 changes: 2 additions & 0 deletions src/service.h
Expand Up @@ -300,6 +300,7 @@ typedef struct service {
* Name usable for displaying to user
*/
char *s_nicename;
int s_nicename_prefidx;

/**
* Teletext...
Expand Down Expand Up @@ -553,6 +554,7 @@ void service_save ( service_t *s, htsmsg_t *c );
void sort_elementary_streams(service_t *t);

const char *service_get_channel_name (service_t *s);
const char *service_get_full_channel_name (service_t *s);
int service_get_channel_number (service_t *s);

#endif // SERVICE_H__

0 comments on commit 43253f8

Please sign in to comment.