From: Jaroslav Kysela Date: Fri, 3 Jun 2016 07:14:46 +0000 (+0200) Subject: api: add /api/dvr/entry/filemoved, fixes #3818 X-Git-Tag: v4.2.1~440 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ea572983cf2ae09ccfcdcf1605677df2f56a1c31;p=thirdparty%2Ftvheadend.git api: add /api/dvr/entry/filemoved, fixes #3818 --- diff --git a/src/api/api_dvr.c b/src/api/api_dvr.c index 9ab72bfff..be0b039e5 100644 --- a/src/api/api_dvr.c +++ b/src/api/api_dvr.c @@ -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 }, diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index f45f71d9a..81d32e60b 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -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); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index fcce73a03..4762b0edb 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -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; +} + /** * */