clean up the PVR recop interface slightly. We want to have a clear distinction between aborting a current recording and clearing all status

This commit is contained in:
Andreas Öman 2008-02-10 13:44:11 +00:00
parent 0ce7637407
commit 26cee09253
3 changed files with 38 additions and 25 deletions

View file

@ -654,7 +654,15 @@ page_event(http_connection_t *hc, const char *remain, void *opaque)
epg_unlock();
return HTTP_STATUS_UNAUTHORIZED;
}
cmd = RECOP_CANCEL;
cmd = RECOP_ABORT;
}
if(http_arg_get(&hc->hc_url_args, "clear")) {
if(!html_verify_access(hc, "record-events")) {
epg_unlock();
return HTTP_STATUS_UNAUTHORIZED;
}
cmd = RECOP_CLEAR;
}
if(cmd != -1)
@ -723,7 +731,7 @@ page_event(http_connection_t *hc, const char *remain, void *opaque)
default:
tcp_qprintf(&tq,
"<input type=\"submit\" class=\"knapp\" name=\"cancel\" "
"<input type=\"submit\" class=\"knapp\" name=\"clear\" "
"value=\"Clear error status\">");
break;

47
pvr.c
View file

@ -53,7 +53,6 @@ struct pvr_rec_list pvrr_global_list;
static void pvr_database_save(pvr_rec_t *pvrr);
static void pvr_database_erase(pvr_rec_t *pvrr);
static void pvr_database_load(void);
static void pvr_unrecord(pvr_rec_t *pvrr);
static void pvrr_fsm(pvr_rec_t *pvrr);
static void pvrr_subscription_callback(struct th_subscription *s,
subscription_event_t event,
@ -156,15 +155,14 @@ pvr_free(pvr_rec_t *pvrr)
static void
pvr_unrecord(pvr_rec_t *pvrr)
pvr_abort(pvr_rec_t *pvrr)
{
if(pvrr->pvrr_status == HTSTV_PVR_STATUS_SCHEDULED) {
pvr_free(pvrr);
} else {
pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED;
pvrr_fsm(pvrr);
}
if(pvrr->pvrr_status != HTSTV_PVR_STATUS_RECORDING)
return;
pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED;
pvrr_fsm(pvrr);
pvr_database_save(pvrr);
clients_send_ref(-1);
}
@ -225,31 +223,38 @@ pvr_event_record_op(th_channel_t *ch, event_t *e, recop_t op)
break;
}
if(pvrr != NULL) {
if(pvrr != NULL && op == RECOP_CLEAR) {
switch(pvrr->pvrr_status) {
case HTSTV_PVR_STATUS_ABORTED:
case HTSTV_PVR_STATUS_NO_TRANSPONDER:
case HTSTV_PVR_STATUS_FILE_ERROR:
case HTSTV_PVR_STATUS_DISK_FULL:
case HTSTV_PVR_STATUS_BUFFER_ERROR:
case HTSTV_PVR_STATUS_SCHEDULED:
pvr_database_erase(pvrr);
pvr_free(pvrr);
pvrr = NULL;
break;
return;
}
}
switch(op) {
case RECOP_TOGGLE:
if(pvrr != NULL) {
pvr_unrecord(pvrr);
return;
case RECOP_CLEAR:
if(pvrr != NULL) switch(pvrr->pvrr_status) {
case HTSTV_PVR_STATUS_ABORTED:
case HTSTV_PVR_STATUS_NO_TRANSPONDER:
case HTSTV_PVR_STATUS_FILE_ERROR:
case HTSTV_PVR_STATUS_DISK_FULL:
case HTSTV_PVR_STATUS_BUFFER_ERROR:
case HTSTV_PVR_STATUS_SCHEDULED:
pvr_database_erase(pvrr);
pvr_free(pvrr);
break;
}
break;
return;
case RECOP_CANCEL:
case RECOP_ABORT:
if(pvrr != NULL)
pvr_unrecord(pvrr);
pvr_abort(pvrr);
return;
case RECOP_ONCE:
@ -1106,8 +1111,8 @@ static struct strtab recoptab[] = {
{ "once", RECOP_ONCE },
{ "daily", RECOP_DAILY },
{ "weekly", RECOP_WEEKLY },
{ "cancel", RECOP_CANCEL },
{ "toggle", RECOP_TOGGLE }
{ "abort", RECOP_ABORT },
{ "clear", RECOP_CLEAR }
};
int

4
pvr.h
View file

@ -92,11 +92,11 @@ typedef struct pvr_rec {
typedef enum {
RECOP_TOGGLE,
RECOP_ONCE,
RECOP_DAILY,
RECOP_WEEKLY,
RECOP_CANCEL,
RECOP_ABORT,
RECOP_CLEAR,
} recop_t;
void pvr_init(void);