diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index a7f0e12b..de46f301 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -43,9 +43,9 @@ LIST_HEAD(dvr_rec_stream_list, dvr_rec_stream); typedef enum { DVR_SCHEDULED, /* Scheduled for recording (in the future) */ DVR_RECORDING, - DVR_COMPLETED /* If recording failed, de->de_error is set to + DVR_COMPLETED, /* If recording failed, de->de_error is set to a string */ - + DVR_NOSTATE, } dvr_entry_sched_state_t; @@ -125,7 +125,7 @@ typedef struct dvr_entry { /** * Prototypes */ -void dvr_entry_create_by_event(event_t *e, const char *creator); +dvr_entry_t *dvr_entry_create_by_event(event_t *e, const char *creator); void dvr_init(void); @@ -139,9 +139,11 @@ void dvr_rec_unsubscribe(dvr_entry_t *de); dvr_entry_t *dvr_entry_find_by_id(int id); +dvr_entry_t *dvr_entry_find_by_event(event_t *e); + off_t dvr_get_filesize(dvr_entry_t *de); -void dvr_entry_cancel(dvr_entry_t *de); +dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de); void dvr_entry_dec_ref(dvr_entry_t *de); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 71907e57..808b9ef0 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -131,7 +131,7 @@ dvr_entry_link(dvr_entry_t *de) /** * */ -void +dvr_entry_t * dvr_entry_create_by_event(event_t *e, const char *creator) { dvr_entry_t *de; @@ -139,11 +139,11 @@ dvr_entry_create_by_event(event_t *e, const char *creator) struct tm tm; if(e->e_channel == NULL || e->e_title == NULL) - return; + return NULL; LIST_FOREACH(de, &e->e_channel->ch_dvrs, de_channel_link) if(de->de_start == e->e_start && de->de_sched_state != DVR_COMPLETED) - return; + return NULL; de = calloc(1, sizeof(dvr_entry_t)); de->de_id = ++de_tally; @@ -169,6 +169,7 @@ dvr_entry_create_by_event(event_t *e, const char *creator) dvrdb_changed(); dvr_entry_save(de); + return de; } @@ -403,25 +404,44 @@ dvr_entry_find_by_id(int id) return de; } + /** * */ -void +dvr_entry_t * +dvr_entry_find_by_event(event_t *e) +{ + dvr_entry_t *de; + + LIST_FOREACH(de, &e->e_channel->ch_dvrs, de_channel_link) + if(de->de_start == e->e_start && + de->de_stop == e->e_stop) + return de; + return NULL; +} + +/** + * + */ +dvr_entry_t * dvr_entry_cancel(dvr_entry_t *de) { switch(de->de_sched_state) { case DVR_SCHEDULED: dvr_entry_remove(de); - break; + return NULL; case DVR_RECORDING: de->de_dont_reschedule = 1; dvr_stop_recording(de, "Aborted by user"); - break; + return de; case DVR_COMPLETED: dvr_entry_remove(de); - break; + return NULL; + + default: + abort(); } }