bouquet: prepare storage for tags

This commit is contained in:
Jaroslav Kysela 2014-11-07 11:03:38 +01:00
parent f2f3c9d5cf
commit abef913871
4 changed files with 32 additions and 13 deletions

View file

@ -5,7 +5,7 @@ The bouquets are obtained automatically from the DVB source during
the mux scan period. Note that bouquets may use more muxes and only
services from scanned muxes are added. The mux with bouquets might
require another scan when all muxes are discovered (manually using
a stream for the mux or reset the mux scan state to pending).
the rescan checkbox).
</p>
<p>

View file

@ -247,7 +247,7 @@ bouquet_map_channel(bouquet_t *bq, service_t *t)
*
*/
void
bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn)
bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag)
{
service_lcn_t *tl;
channel_service_mapping_t *csm;
@ -465,6 +465,15 @@ bouquet_get_channel_number(bouquet_t *bq, service_t *t)
return 0;
}
/*
*
*/
static uint32_t
bouquet_get_tag_number(bouquet_t *bq, service_t *t)
{
return 0;
}
/**
*
*/
@ -692,16 +701,22 @@ bouquet_class_chtag_ref_set ( void *obj, const void *p )
static const void *
bouquet_class_services_get ( void *obj )
{
htsmsg_t *m = htsmsg_create_map();
htsmsg_t *m = htsmsg_create_map(), *e;
bouquet_t *bq = obj;
service_t *t;
int64_t lcn;
uint32_t tag;
size_t z;
/* Add all */
for (z = 0; z < bq->bq_services->is_count; z++) {
t = (service_t *)bq->bq_services->is_array[z];
htsmsg_add_s64(m, idnode_uuid_as_str(&t->s_id),
bouquet_get_channel_number0(bq, t));
e = htsmsg_create_map();
if ((lcn = bouquet_get_channel_number0(bq, t)) != 0)
htsmsg_add_s64(e, "lcn", lcn);
if ((tag = bouquet_get_tag_number(bq, t)) != 0)
htsmsg_add_s64(e, "tag", lcn);
htsmsg_add_msg(m, idnode_uuid_as_str(&t->s_id), e);
}
return m;
@ -888,9 +903,11 @@ void
bouquet_service_resolve(void)
{
bouquet_t *bq;
htsmsg_t *e;
htsmsg_field_t *f;
service_t *s;
uint32_t lcn;
int64_t lcn;
uint32_t tag;
int saveflag;
lock_assert(&global_lock);
@ -901,10 +918,12 @@ bouquet_service_resolve(void)
saveflag = bq->bq_saveflag;
if (bq->bq_enabled) {
HTSMSG_FOREACH(f, bq->bq_services_waiting) {
if (htsmsg_field_get_u32(f, &lcn)) continue;
if ((e = htsmsg_field_get_map(f)) == NULL) continue;
lcn = htsmsg_get_s64_or_default(e, "lcn", 0);
tag = htsmsg_get_u32_or_default(e, "tag", 0);
s = service_find_by_identifier(f->hmf_name);
if (s)
bouquet_add_service(bq, s, lcn);
bouquet_add_service(bq, s, lcn, tag);
}
}
htsmsg_destroy(bq->bq_services_waiting);

View file

@ -82,7 +82,7 @@ bouquet_t * bouquet_find_by_source(const char *name, const char *src, int create
void bouquet_map_to_channels(bouquet_t *bq);
void bouquet_notify_channels(bouquet_t *bq);
void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn);
void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag);
void bouquet_completed(bouquet_t *bq, uint32_t seen);
uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t);

View file

@ -399,7 +399,7 @@ dvb_desc_service_list
bs->svc = s;
TAILQ_INSERT_TAIL(&bi->services, bs, link);
} else if (bq) {
bouquet_add_service(bq, (service_t *)s, 0);
bouquet_add_service(bq, (service_t *)s, 0, 0);
}
if (save)
s->s_config_save((service_t*)s);
@ -527,7 +527,7 @@ dvb_freesat_add_service
snprintf(name, sizeof(name), "%s: %s", bi->name, fr->name);
fr->bouquet = bouquet_find_by_source(name, src, 1);
}
bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT);
bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT, 0);
}
static void
@ -1178,7 +1178,7 @@ dvb_bat_completed
dvb_bouquet_comment(bq, bi->mm);
TAILQ_FOREACH(bs, &bi->services, link)
bouquet_add_service(bq, (service_t *)bs->svc, 0);
bouquet_add_service(bq, (service_t *)bs->svc, 0, 0);
bouquet_completed(bq, bi->services_count);
@ -1747,7 +1747,7 @@ dvb_fs_sdt_callback
s = mpegts_service_find(mux, service_id, 0, 1, &save);
charset = dvb_charset_find(mn, mux, s);
if (bq && s) {
bouquet_add_service(bq, (service_t *)s, 0);
bouquet_add_service(bq, (service_t *)s, 0, 0);
} else {
tvhtrace(mt->mt_name, " service not found (bq %p, svc %p)", bq, s);
}