]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVR: save dvr entry when the files were deleted (retention)
authorJaroslav Kysela <perex@perex.cz>
Mon, 14 Dec 2015 20:01:23 +0000 (21:01 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 14 Dec 2015 20:01:23 +0000 (21:01 +0100)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/dvr/dvr_vfsmgr.c

index f4ec7dec391405b533a095386caebc06e1749364..fb885fc1c6fdb2d7e50e644c522866ba50618698 100644 (file)
@@ -565,7 +565,7 @@ dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de, int rerecord);
 
 void dvr_entry_dec_ref(dvr_entry_t *de);
 
-void dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched);
+int dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched);
 
 void dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord);
 
index b26248c0427770d67450313fa7021173837bcbaa..88bd8f8d0b7a2832c18b2b540c2eeafaafbc2606 100644 (file)
@@ -393,6 +393,7 @@ dvr_entry_retention_timer(dvr_entry_t *de)
   time_t stop = de->de_stop;
   uint32_t removal = dvr_entry_get_removal_days(de);
   uint32_t retention = dvr_entry_get_retention_days(de);
+  int save;
 
   stop = de->de_stop + removal * (time_t)86400;
   if ((removal > 0 || retention == 0) && removal < DVR_RET_SPACE) {
@@ -400,12 +401,15 @@ dvr_entry_retention_timer(dvr_entry_t *de)
       dvr_entry_retention_arm(de, dvr_timer_remove_files, stop);
       return;
     }
+    save = 0;
     if (dvr_get_filename(de))
-      dvr_entry_delete(de, 1);    // delete actual file
+      save = dvr_entry_delete(de, 1);    // delete actual file
     if (retention == DVR_RET_ONREMOVE) {
       dvr_entry_destroy(de, 1);   // also remove database entry
       return;
     }
+    if (save)
+      dvr_entry_save(de);
   }
 
   if (retention < DVR_RET_ONREMOVE) {
@@ -3143,7 +3147,7 @@ dvr_val2pri(dvr_prio_t v)
 /**
  *
  */
-void
+int
 dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
 {
   dvr_config_t *cfg = de->de_config;
@@ -3153,7 +3157,7 @@ dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
   struct tm tm;
   const char *filename;
   char tbuf[64], ubuf[UUID_HEX_SIZE], *rdir, *postcmd;
-  int r;
+  int r, ret = 0;
 
   t = dvr_entry_get_start_time(de, 1);
   localtime_r(&t, &tm);
@@ -3191,12 +3195,14 @@ dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
       if (postcmd && postcmd[0])
         dvr_spawn_postcmd(de, postcmd, filename);
       htsmsg_delete_field(m, "filename");
+      ret = 1;
     }
   }
   if (no_missed_time_resched)
     dvr_entry_set_state(de, DVR_MISSED_TIME, DVR_RS_PENDING, de->de_last_error);
   else
     dvr_entry_missed_time(de, de->de_last_error);
+  return ret;
 }
 
 /**
index a87539e0f35574e6f7a566215e8647cbc64a1930..0960bf5e90b32dce053d4d123c2cd442fc15f03e 100644 (file)
@@ -265,7 +265,8 @@ dvr_disk_space_cleanup(dvr_config_t *cfg)
         dvr_entry_delete(oldest, 1);  // delete actual file
         dvr_entry_destroy(oldest, 1); // also delete database entry
       } else {
-        dvr_entry_delete(oldest, 0);  // delete actual file
+        if (dvr_entry_delete(oldest, 0))  // delete actual file
+          dvr_entry_save(oldest);
       }
     } else {
       tvhlog(LOG_WARNING, "dvr", "%s \"until space needed\" recordings found for config \"%s\", you are running out of disk space very soon!",