dvr: report error if a recordings file is missing.

This commit is contained in:
Adam Sutton 2013-01-10 14:51:53 +00:00
parent 60371b07f8
commit efee88c8a2
5 changed files with 45 additions and 21 deletions

View file

@ -303,7 +303,7 @@ dvr_entry_t *dvr_entry_find_by_event_fuzzy(epg_broadcast_t *e);
dvr_entry_t *dvr_entry_find_by_episode(epg_broadcast_t *e);
off_t dvr_get_filesize(dvr_entry_t *de);
int64_t dvr_get_filesize(dvr_entry_t *de);
dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de);

View file

@ -68,6 +68,8 @@ dvr_entry_status(dvr_entry_t *de)
}
case DVR_COMPLETED:
if(dvr_get_filesize(de) == -1)
return "File Missing";
if(de->de_last_error)
return streaming_code2txt(de->de_last_error);
else
@ -97,7 +99,7 @@ dvr_entry_schedstatus(dvr_entry_t *de)
else
return "recording";
case DVR_COMPLETED:
if(de->de_last_error)
if(de->de_last_error || dvr_get_filesize(de) == -1)
return "completedError";
else
return "completed";
@ -1375,16 +1377,16 @@ dvr_query_sort(dvr_query_result_t *dqr)
/**
*
*/
off_t
int64_t
dvr_get_filesize(dvr_entry_t *de)
{
struct stat st;
if(de->de_filename == NULL)
return 0;
return -1;
if(stat(de->de_filename, &st) != 0)
return 0;
return -1;
return st.st_size;
}

View file

@ -579,7 +579,9 @@ htsp_build_dvrentry(dvr_entry_t *de, const char *method)
break;
case DVR_COMPLETED:
s = "completed";
if(de->de_last_error)
if(dvr_get_filesize(de) == -1)
error = "File missing";
else if(de->de_last_error)
error = streaming_code2txt(de->de_last_error);
break;
case DVR_MISSED_TIME:

View file

@ -1348,7 +1348,7 @@ extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque,
dvr_entry_t *de;
int start = 0, end, limit, i;
const char *s;
off_t fsize;
int64_t fsize = 0;
char buf[100];
if((s = http_arg_get(&hc->hc_req_args, "start")) != NULL)
@ -1418,16 +1418,14 @@ extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque,
if(de->de_sched_state == DVR_COMPLETED) {
fsize = dvr_get_filesize(de);
if(fsize > 0) {
char url[100];
htsmsg_add_s64(m, "filesize", fsize);
snprintf(url, sizeof(url), "dvrfile/%d", de->de_id);
htsmsg_add_str(m, "url", url);
if (fsize > 0) {
char url[100];
htsmsg_add_s64(m, "filesize", fsize);
snprintf(url, sizeof(url), "dvrfile/%d", de->de_id);
htsmsg_add_str(m, "url", url);
}
}
htsmsg_add_msg(array, NULL, m);
}
@ -1446,7 +1444,7 @@ extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque,
static int is_dvr_entry_finished(dvr_entry_t *entry)
{
dvr_entry_sched_state_t state = entry->de_sched_state;
return state == DVR_COMPLETED;
return state == DVR_COMPLETED && !entry->de_last_error && dvr_get_filesize(entry) != -1;
}
static int is_dvr_entry_upcoming(dvr_entry_t *entry)
@ -1458,8 +1456,11 @@ static int is_dvr_entry_upcoming(dvr_entry_t *entry)
static int is_dvr_entry_failed(dvr_entry_t *entry)
{
dvr_entry_sched_state_t state = entry->de_sched_state;
return state == DVR_MISSED_TIME || state == DVR_NOSTATE;
if (is_dvr_entry_finished(entry))
return 0;
if (is_dvr_entry_upcoming(entry))
return 0;
return 1;
}
static int

View file

@ -182,6 +182,13 @@ tvheadend.dvrschedule = function(title, iconCls, dvrStore) {
}
}
function renderSize(value)
{
if (value == null)
return '';
return parseInt(value / 1000000) + ' MB';
}
function renderPri(value) {
return tvheadend.dvrprio.getById(value).data.name;
}
@ -201,11 +208,12 @@ tvheadend.dvrschedule = function(title, iconCls, dvrStore) {
id : 'pri',
header : "Priority",
dataIndex : 'pri',
renderer : renderPri
renderer : renderPri,
hidden : iconCls != 'clock',
}, {
width : 100,
id : 'start',
header : "Start",
header : iconCls == 'clock' ? "Start" : "Date/Time",
dataIndex : 'start',
renderer : renderDate
}, {
@ -221,6 +229,13 @@ tvheadend.dvrschedule = function(title, iconCls, dvrStore) {
header : "Duration",
dataIndex : 'duration',
renderer : renderDuration
}, {
width : 100,
id : 'filesize',
header : "Filesize",
dataIndex : 'filesize',
renderer : renderSize,
hidden : iconCls != 'television'
}, {
width : 250,
id : 'channel',
@ -244,12 +259,14 @@ tvheadend.dvrschedule = function(title, iconCls, dvrStore) {
return value;
}
},
dataIndex : 'config_name'
dataIndex : 'config_name',
hidden: iconCls != 'clock'
}, {
width : 200,
id : 'status',
header : "Status",
dataIndex : 'status'
dataIndex : 'status',
hidden: iconCls != 'exclamation'
} ]);
function addEntry() {
@ -608,6 +625,8 @@ tvheadend.dvr = function() {
name : 'status'
}, {
name : 'schedstate'
}, {
name : 'error'
}, {
name : 'creator'
}, {