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(); epg_unlock();
return HTTP_STATUS_UNAUTHORIZED; 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) if(cmd != -1)
@ -723,7 +731,7 @@ page_event(http_connection_t *hc, const char *remain, void *opaque)
default: default:
tcp_qprintf(&tq, tcp_qprintf(&tq,
"<input type=\"submit\" class=\"knapp\" name=\"cancel\" " "<input type=\"submit\" class=\"knapp\" name=\"clear\" "
"value=\"Clear error status\">"); "value=\"Clear error status\">");
break; 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_save(pvr_rec_t *pvrr);
static void pvr_database_erase(pvr_rec_t *pvrr); static void pvr_database_erase(pvr_rec_t *pvrr);
static void pvr_database_load(void); 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_fsm(pvr_rec_t *pvrr);
static void pvrr_subscription_callback(struct th_subscription *s, static void pvrr_subscription_callback(struct th_subscription *s,
subscription_event_t event, subscription_event_t event,
@ -156,15 +155,14 @@ pvr_free(pvr_rec_t *pvrr)
static void static void
pvr_unrecord(pvr_rec_t *pvrr) pvr_abort(pvr_rec_t *pvrr)
{ {
if(pvrr->pvrr_status == HTSTV_PVR_STATUS_SCHEDULED) { if(pvrr->pvrr_status != HTSTV_PVR_STATUS_RECORDING)
pvr_free(pvrr); return;
} else {
pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED; pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED;
pvrr_fsm(pvrr); pvrr_fsm(pvrr);
}
pvr_database_save(pvrr); pvr_database_save(pvrr);
clients_send_ref(-1); clients_send_ref(-1);
} }
@ -225,31 +223,38 @@ pvr_event_record_op(th_channel_t *ch, event_t *e, recop_t op)
break; break;
} }
if(pvrr != NULL) { if(pvrr != NULL && op == RECOP_CLEAR) {
switch(pvrr->pvrr_status) { switch(pvrr->pvrr_status) {
case HTSTV_PVR_STATUS_ABORTED: case HTSTV_PVR_STATUS_ABORTED:
case HTSTV_PVR_STATUS_NO_TRANSPONDER: case HTSTV_PVR_STATUS_NO_TRANSPONDER:
case HTSTV_PVR_STATUS_FILE_ERROR: case HTSTV_PVR_STATUS_FILE_ERROR:
case HTSTV_PVR_STATUS_DISK_FULL: case HTSTV_PVR_STATUS_DISK_FULL:
case HTSTV_PVR_STATUS_BUFFER_ERROR: case HTSTV_PVR_STATUS_BUFFER_ERROR:
case HTSTV_PVR_STATUS_SCHEDULED:
pvr_database_erase(pvrr); pvr_database_erase(pvrr);
pvr_free(pvrr); pvr_free(pvrr);
pvrr = NULL; return;
break;
} }
} }
switch(op) { switch(op) {
case RECOP_TOGGLE: case RECOP_CLEAR:
if(pvrr != NULL) { if(pvrr != NULL) switch(pvrr->pvrr_status) {
pvr_unrecord(pvrr); case HTSTV_PVR_STATUS_ABORTED:
return; 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) if(pvrr != NULL)
pvr_unrecord(pvrr); pvr_abort(pvrr);
return; return;
case RECOP_ONCE: case RECOP_ONCE:
@ -1106,8 +1111,8 @@ static struct strtab recoptab[] = {
{ "once", RECOP_ONCE }, { "once", RECOP_ONCE },
{ "daily", RECOP_DAILY }, { "daily", RECOP_DAILY },
{ "weekly", RECOP_WEEKLY }, { "weekly", RECOP_WEEKLY },
{ "cancel", RECOP_CANCEL }, { "abort", RECOP_ABORT },
{ "toggle", RECOP_TOGGLE } { "clear", RECOP_CLEAR }
}; };
int int

4
pvr.h
View file

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