diff --git a/src/channels.h b/src/channels.h index 0ccd3349..dfe1b332 100644 --- a/src/channels.h +++ b/src/channels.h @@ -43,9 +43,12 @@ typedef struct channel { LIST_HEAD(, service) ch_services; LIST_HEAD(, th_subscription) ch_subscriptions; + struct epg_channel *ch_epg_channel; +#if 1 //TODO_REMOVE_THESE struct event_tree ch_epg_events; struct event *ch_epg_current; struct event *ch_epg_next; +#endif gtimer_t ch_epg_timer_head; gtimer_t ch_epg_timer_current; @@ -60,6 +63,7 @@ typedef struct channel { struct channel_tag_mapping_list ch_ctms; + } channel_t; diff --git a/src/epg.c b/src/epg.c index 3f070d08..45e23fa1 100644 --- a/src/epg.c +++ b/src/epg.c @@ -627,6 +627,12 @@ int epg_broadcast_set_episode return save; } +epg_broadcast_t *epg_broadcast_get_next ( epg_broadcast_t *broadcast ) +{ + if ( !broadcast ) return NULL; + return RB_NEXT(broadcast, eb_slink); +} + /* ************************************************************************** * Channel * *************************************************************************/ @@ -670,6 +676,13 @@ int epg_channel_set_name ( epg_channel_t *channel, const char *name ) return save; } +epg_broadcast_t *epg_channel_get_current_broadcast ( epg_channel_t *channel ) +{ + // TODO: its not really the head! + if ( !channel ) return NULL; + return RB_FIRST(&channel->ec_schedule); +} + /* ************************************************************************** * Querying * *************************************************************************/ diff --git a/src/epg.h b/src/epg.h index 8a5ca3c8..3485c664 100644 --- a/src/epg.h +++ b/src/epg.h @@ -223,6 +223,9 @@ epg_broadcast_t *epg_broadcast_find_by_id ( int id ); int epg_broadcast_set_episode ( epg_broadcast_t *b, epg_episode_t *e, int u ) __attribute__((warn_unused_result)); +/* Accessors */ +epg_broadcast_t *epg_broadcast_get_next ( epg_broadcast_t *b ); + /* ************************************************************************ * Channel - provides mapping from EPG channels to real channels * ***********************************************************************/ @@ -250,6 +253,9 @@ epg_channel_t *epg_channel_find_by_uri ( const char *uri, int create ); int epg_channel_set_name ( epg_channel_t *c, const char *n ) __attribute__((warn_unused_result)); +/* Accessors */ +epg_broadcast_t *epg_channel_get_current_broadcast ( epg_channel_t *c ); + /* ************************************************************************ * Querying * ***********************************************************************/ diff --git a/src/htsp.c b/src/htsp.c index 006090c7..9c0fdef0 100644 --- a/src/htsp.c +++ b/src/htsp.c @@ -297,6 +297,7 @@ htsp_build_channel(channel_t *ch, const char *method) channel_tag_mapping_t *ctm; channel_tag_t *ct; service_t *t; + epg_broadcast_t *now, *next = NULL; htsmsg_t *out = htsmsg_create_map(); htsmsg_t *tags = htsmsg_create_list(); @@ -309,12 +310,10 @@ htsp_build_channel(channel_t *ch, const char *method) if(ch->ch_icon != NULL) htsmsg_add_str(out, "channelIcon", ch->ch_icon); -#if TODO_EPG_CHANNEL - htsmsg_add_u32(out, "eventId", - ch->ch_epg_current != NULL ? ch->ch_epg_current->e_id : 0); - htsmsg_add_u32(out, "nextEventId", - ch->ch_epg_next ? ch->ch_epg_next->e_id : 0); -#endif + now = epg_channel_get_current_broadcast(ch->ch_epg_channel); + if ( now ) next = epg_broadcast_get_next(now); + htsmsg_add_u32(out, "eventId", now ? now->eb_id : 0); + htsmsg_add_u32(out, "nextEventId", next ? next->eb_id : 0); LIST_FOREACH(ctm, &ch->ch_ctms, ctm_channel_link) { ct = ctm->ctm_tag; @@ -785,7 +784,7 @@ htsp_build_event(epg_broadcast_t *e) } #endif - n = RB_NEXT(e, eb_slink); + n = epg_broadcast_get_next(e); if(n != NULL) htsmsg_add_u32(out, "nextEventId", n->eb_id); @@ -818,7 +817,7 @@ htsp_method_getEvents(htsp_connection_t *htsp, htsmsg_t *in) htsmsg_add_msg(events, NULL, htsp_build_event(e)); while( numFollowing-- > 0 ) { - e = RB_NEXT(e, eb_slink); + e = epg_broadcast_get_next(e); if( e == NULL ) break; htsmsg_add_msg(events, NULL, htsp_build_event(e));