diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/configfiles.c | 26 | ||||
-rw-r--r-- | player/core.h | 2 | ||||
-rw-r--r-- | player/loadfile.c | 3 |
3 files changed, 16 insertions, 15 deletions
diff --git a/player/configfiles.c b/player/configfiles.c index 6806938a1a..0cd1d0d523 100644 --- a/player/configfiles.c +++ b/player/configfiles.c @@ -166,10 +166,10 @@ void mp_load_auto_profiles(struct MPContext *mpctx) #define MP_WATCH_LATER_CONF "watch_later" -static char *mp_get_playback_resume_config_filename(struct mpv_global *global, +static char *mp_get_playback_resume_config_filename(struct MPContext *mpctx, const char *fname) { - struct MPOpts *opts = global->opts; + struct MPOpts *opts = mpctx->opts; char *res = NULL; void *tmp = talloc_new(NULL); const char *realpath = fname; @@ -195,15 +195,14 @@ static char *mp_get_playback_resume_config_filename(struct mpv_global *global, for (int i = 0; i < 16; i++) conf = talloc_asprintf_append(conf, "%02X", md5[i]); - res = talloc_asprintf(tmp, MP_WATCH_LATER_CONF "/%s", conf); - res = mp_find_config_file(NULL, global, res); - - if (!res) { - res = mp_find_config_file(tmp, global, MP_WATCH_LATER_CONF); - if (res) - res = talloc_asprintf(NULL, "%s/%s", res, conf); + if (!mpctx->cached_watch_later_configdir) { + mpctx->cached_watch_later_configdir = + mp_find_user_config_file(mpctx, mpctx->global, MP_WATCH_LATER_CONF); } + if (mpctx->cached_watch_later_configdir) + res = mp_path_join(NULL, mpctx->cached_watch_later_configdir, conf); + exit: talloc_free(tmp); return res; @@ -298,7 +297,7 @@ void mp_write_watch_later_conf(struct MPContext *mpctx) mp_mk_config_dir(mpctx->global, MP_WATCH_LATER_CONF); - conffile = mp_get_playback_resume_config_filename(mpctx->global, filename); + conffile = mp_get_playback_resume_config_filename(mpctx, filename); if (!conffile) goto exit; @@ -342,7 +341,9 @@ exit: void mp_load_playback_resume(struct MPContext *mpctx, const char *file) { - char *fname = mp_get_playback_resume_config_filename(mpctx->global, file); + if (!mpctx->opts->position_resume) + return; + char *fname = mp_get_playback_resume_config_filename(mpctx, file); if (fname && mp_path_exists(fname)) { // Never apply the saved start position to following files m_config_backup_opt(mpctx->mconfig, "start"); @@ -365,8 +366,7 @@ struct playlist_entry *mp_check_playlist_resume(struct MPContext *mpctx, if (!mpctx->opts->position_resume) return NULL; for (struct playlist_entry *e = playlist->first; e; e = e->next) { - char *conf = mp_get_playback_resume_config_filename(mpctx->global, - e->filename); + char *conf = mp_get_playback_resume_config_filename(mpctx, e->filename); bool exists = conf && mp_path_exists(conf); talloc_free(conf); if (exists) diff --git a/player/core.h b/player/core.h index ea7694d02a..055a48bda4 100644 --- a/player/core.h +++ b/player/core.h @@ -335,6 +335,8 @@ typedef struct MPContext { // playback rate. Used to avoid showing it multiple times. bool drop_message_shown; + char *cached_watch_later_configdir; + struct screenshot_ctx *screenshot_ctx; struct command_ctx *command_ctx; struct encode_lavc_context *encode_lavc_ctx; diff --git a/player/loadfile.c b/player/loadfile.c index 40ed71d5fd..3dc0e0318a 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -1063,8 +1063,7 @@ static void play_current_file(struct MPContext *mpctx) mp_load_auto_profiles(mpctx); - if (opts->position_resume) - mp_load_playback_resume(mpctx, mpctx->filename); + mp_load_playback_resume(mpctx, mpctx->filename); load_per_file_options(mpctx->mconfig, mpctx->playing->params, mpctx->playing->num_params); |