*
*/
void
-bouquet_add_service(bouquet_t *bq, service_t *s, uint32_t lcn)
+bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn)
{
service_lcn_t *tl;
if (!idnode_set_exists(bq->bq_services, &s->s_id)) {
tvhtrace("bouquet", "add service %s to %s", s->s_nicename, bq->bq_name ?: "<unknown>");
idnode_set_add(bq->bq_services, &s->s_id, NULL);
+ bq->bq_saveflag = 1;
+ }
- LIST_FOREACH(tl, &s->s_lcns, sl_link)
- if (tl->sl_bouquet == bq) {
- tl->sl_lcn = lcn;
- break;
- }
-
- if (!tl) {
- tl = calloc(1, sizeof(*tl));
- tl->sl_bouquet = bq;
- tl->sl_lcn = lcn;
- LIST_INSERT_HEAD(&s->s_lcns, tl, sl_link);
- }
- tl->sl_seen = 1;
+ LIST_FOREACH(tl, &s->s_lcns, sl_link)
+ if (tl->sl_bouquet == bq)
+ break;
+ if (!tl) {
+ tl = calloc(1, sizeof(*tl));
+ tl->sl_bouquet = bq;
+ LIST_INSERT_HEAD(&s->s_lcns, tl, sl_link);
bq->bq_saveflag = 1;
- if (bq->bq_enabled && bq->bq_maptoch)
- bouquet_map_channel(bq, s);
+ } else {
+ if (tl->sl_lcn != lcn)
+ bq->bq_saveflag = 1;
}
+ tl->sl_lcn = lcn;
+ tl->sl_seen = 1;
+
+ if (bq->bq_enabled && bq->bq_maptoch)
+ bouquet_map_channel(bq, s);
+
if (!bq->bq_in_load &&
!idnode_set_exists(bq->bq_active_services, &s->s_id))
idnode_set_add(bq->bq_active_services, &s->s_id, NULL);
LIST_FOREACH(tl, &t->s_lcns, sl_link)
if (tl->sl_bouquet == bq)
- return (int64_t)tl->sl_lcn * CHANNEL_SPLIT;
+ return (int64_t)tl->sl_lcn;
return 0;
}
/* Add all */
for (z = 0; z < bq->bq_services->is_count; z++) {
t = (service_t *)bq->bq_services->is_array[z];
- htsmsg_add_u32(m, idnode_uuid_as_str(&t->s_id),
+ htsmsg_add_s64(m, idnode_uuid_as_str(&t->s_id),
bouquet_get_channel_number(bq, t));
}
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, uint32_t lcn);
+void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn);
void bouquet_completed(bouquet_t *bq);
uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t);
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, lcn);
+ bouquet_add_service(fr->bouquet, (service_t *)s, lcn * CHANNEL_SPLIT);
}
static void
if (!fs) {
fs = calloc(1, sizeof(*fs));
fs->sid = sid;
- fs->regionid = regionid == 0xff ? 0xffff : regionid;
+ fs->regionid = regionid != 0xff ? regionid : 0xffff;
fs->lcn = lcn != 0xffff ? lcn : 0;
TAILQ_INSERT_TAIL(&b->fservices, fs, link);
}