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[] = {
{ "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 },
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);
}
+/**
+ *
+ */
+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;
+}
+
/**
*
*/