]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvr: report error if a recordings file is missing.
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 10 Jan 2013 14:51:53 +0000 (14:51 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 11 Jan 2013 11:13:29 +0000 (11:13 +0000)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/htsp_server.c
src/webui/extjs.c
src/webui/static/app/dvr.js

index 4c2174aaee1dd4522c34b6737701e296294ef6b9..1ec73fb2d7bc1a9194f58de09a9dd806815dce3d 100644 (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);
 
index 1b4edf2dd189455e7e6248c1d262b502703a67e1..d975b1f58b5d1ac0cf8a4bd2036a45ea463f146f 100644 (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;
 }
index b59f35d98d312c824fc40b4d893c2639bbcea43f..5cb05edcc1b4ca32dd697aa971c4d3c0049ac82e 100644 (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:
index 2b6fff4555ba4d18681ef26bcf6a7f90ec01c402..76a12886902f620ad4991f706360c440ac5b5691 100644 (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
index 215fdf6685ab988bb29dea0ec25b1ad023f2d422..02021eb3b8b91daa6112fa4628144e491b60575d 100644 (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'
                }, {