diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 5b7768fa..703443f4 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -93,7 +93,6 @@ typedef struct dvr_entry { gtimer_t de_timer; - /** * These meta fields will stay valid as long as reference count > 0 */ @@ -115,6 +114,7 @@ typedef struct dvr_entry { dvr_prio_t de_pri; epg_episode_t de_episode; + uint8_t de_content_type; uint32_t de_dont_reschedule; @@ -216,7 +216,8 @@ dvr_entry_t *dvr_entry_create_by_event(event_t *e, const char *creator, dvr_entry_t *dvr_entry_create(channel_t *ch, time_t start, time_t stop, const char *title, const char *description, const char *creator, dvr_autorec_entry_t *dae, - epg_episode_t *ee, dvr_prio_t pri); + epg_episode_t *ee, uint8_t content_type, + dvr_prio_t pri); void dvr_init(void); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 7b124102..a05a9847 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -249,7 +249,7 @@ dvr_entry_t * dvr_entry_create(channel_t *ch, time_t start, time_t stop, const char *title, const char *description, const char *creator, dvr_autorec_entry_t *dae, - epg_episode_t *ee, dvr_prio_t pri) + epg_episode_t *ee, uint8_t content_type, dvr_prio_t pri) { dvr_entry_t *de; char tbuf[30]; @@ -288,6 +288,8 @@ dvr_entry_create(channel_t *ch, time_t start, time_t stop, tvh_str_set(&de->de_episode.ee_onscreen, ee->ee_onscreen); } + de->de_content_type = content_type; + dvr_entry_link(de); t = de->de_start - de->de_start_extra * 60; @@ -321,7 +323,7 @@ dvr_entry_create_by_event(event_t *e, const char *creator, return dvr_entry_create(e->e_channel, e->e_start, e->e_stop, e->e_title, e->e_desc, creator, dae, &e->e_episode, - pri); + e->e_content_type, pri); } @@ -471,6 +473,8 @@ dvr_db_load_one(htsmsg_t *c, int id) if(!htsmsg_get_s32(c, "part", &d)) de->de_episode.ee_part = d; + de->de_content_type = htsmsg_get_u32_or_default(c, "contenttype", 0); + tvh_str_set(&de->de_episode.ee_onscreen, htsmsg_get_str(c, "episodename")); dvr_entry_link(de); @@ -547,6 +551,9 @@ dvr_entry_save(dvr_entry_t *de) if(de->de_episode.ee_onscreen) htsmsg_add_str(m, "episodename", de->de_episode.ee_onscreen); + if(de->de_content_type) + htsmsg_add_u32(m, "contenttype", de->de_content_type); + hts_settings_save(m, "dvr/log/%d", de->de_id); htsmsg_destroy(m); } diff --git a/src/dvr/mkmux.c b/src/dvr/mkmux.c index ebf00ef9..1eafaa45 100644 --- a/src/dvr/mkmux.c +++ b/src/dvr/mkmux.c @@ -419,9 +419,29 @@ static htsbuf_queue_t * mk_build_metadata(const dvr_entry_t *de) { htsbuf_queue_t *q = htsbuf_queue_alloc(0); + char datestr[64]; + struct tm tm; + + localtime_r(&de->de_start, &tm); + + snprintf(datestr, sizeof(datestr), + "%04d-%02d-%02d %02d:%02d:%02d", + tm.tm_year + 1900, + tm.tm_mon + 1, + tm.tm_mday, + tm.tm_hour, + tm.tm_min, + tm.tm_sec); + + addtag(q, build_tag_string("DATE_BROADCASTED", datestr, 0, NULL)); addtag(q, build_tag_string("ORIGINAL_MEDIA_TYPE", "TV", 0, NULL)); + if(de->de_content_type) + addtag(q, build_tag_string("CONTENT_TYPE", + epg_content_group_get_name(de->de_content_type), + 0, NULL)); + if(de->de_channel != NULL) addtag(q, build_tag_string("TVCHANNEL", de->de_channel->ch_name, 0, NULL)); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index 686f6f0a..c2891a33 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -788,7 +788,7 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque) stop += 86400; dvr_entry_create(ch, start, stop, title, NULL, hc->hc_representative, - NULL, NULL, dvr_pri2val(pri)); + NULL, NULL, 0, dvr_pri2val(pri)); out = htsmsg_create_map(); htsmsg_add_u32(out, "success", 1);