]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
api: add /api/dvr/entry/filemoved, fixes #3818
authorJaroslav Kysela <perex@perex.cz>
Fri, 3 Jun 2016 07:14:46 +0000 (09:14 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 3 Jun 2016 07:14:46 +0000 (09:14 +0200)
src/api/api_dvr.c
src/dvr/dvr.h
src/dvr/dvr_db.c

index 9ab72bffffec3582f4ceea5dce88cef4bd51fd3d..be0b039e5950e4b65025b30e9f408f171ae9d42f 100644 (file)
@@ -479,6 +479,21 @@ api_dvr_timerec_create
   return 0;
 }
 
+static int
+api_dvr_entry_file_moved
+  ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
+{
+  const char *src, *dst;
+  if (!(src = htsmsg_get_str(args, "src")))
+    return -EINVAL;
+  if (!(dst = htsmsg_get_str(args, "dst")))
+    return -EINVAL;
+  if (dvr_entry_file_moved(src, dst))
+    return -ENOENT;
+  return 0;
+}
+
+
 void api_dvr_init ( void )
 {
   static api_hook_t ah[] = {
@@ -500,6 +515,7 @@ void api_dvr_init ( void )
     { "dvr/entry/rerecord/allow",  ACCESS_RECORDER, api_dvr_entry_rerecord_allow, NULL },
     { "dvr/entry/stop",            ACCESS_RECORDER, api_dvr_entry_stop, NULL },
     { "dvr/entry/cancel",          ACCESS_RECORDER, api_dvr_entry_cancel, NULL },
+    { "dvr/entry/filemoved",       ACCESS_ADMIN,    api_dvr_entry_file_moved, NULL },
     { "dvr/entry/move/finished",   ACCESS_RECORDER, api_dvr_entry_move_finished, NULL },
     { "dvr/entry/move/failed",     ACCESS_RECORDER, api_dvr_entry_move_failed, NULL },
 
index f45f71d9ad24f3bb2d449218fbc72c8d64f00619..81d32e60bbcb1404e88a7bbd52bb59d9ad8c0475 100644 (file)
@@ -586,6 +586,8 @@ int dvr_entry_delete(dvr_entry_t *de);
 
 void dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord);
 
+int dvr_entry_file_moved(const char *src, const char *dst);
+
 void dvr_entry_destroy(dvr_entry_t *de, int delconf);
 
 htsmsg_t *dvr_entry_class_mc_list (void *o, const char *lang);
index fcce73a033535acf6884d29cde581e1dc3d25934..4762b0edb67ee013b255f730d959ab5a8edf8434 100644 (file)
@@ -3516,6 +3516,35 @@ dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord)
 
 }
 
+/**
+ *
+ */
+int
+dvr_entry_file_moved(const char *src, const char *dst)
+{
+  dvr_entry_t *de;
+  htsmsg_t *m;
+  htsmsg_field_t *f;
+  const char *filename;
+  int r = -1;
+
+  if (!src || !dst || src[0] == '\0' || dst[0] == '\0' || access(dst, R_OK))
+    return r;
+  pthread_mutex_lock(&global_lock);
+  LIST_FOREACH(de, &dvrentries, de_global_link)
+    HTSMSG_FOREACH(f, de->de_files)
+      if ((m = htsmsg_field_get_map(f)) != NULL) {
+        filename = htsmsg_get_str(m, "filename");
+        if (strcmp(filename, src) == 0) {
+          htsmsg_set_str(m, "filename", dst);
+          dvr_vfs_refresh_entry(de);
+          r = 0;
+        }
+      }
+  pthread_mutex_unlock(&global_lock);
+  return r;
+}
+
 /**
  *
  */