From 7c4c9bc86f55f4d1224814fbeafdee8f1c3c3108 Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Tue, 2 May 2023 19:29:27 -0500 Subject: player: use XDG_STATE_HOME for watch_later A pain point for some users is the fact that watch_later is stored in the ~/.config directory when it's really not configuration data. Roughly 2 years ago, XDG_STATE_DIR was added to the XDG Base Directory Specification[0] and its description, user-specific state data, actually perfectly matches what watch_later data is for. Let's go ahead and use this directory as the default for watch_later. This change only affects non-darwin unix-like systems (i.e. Linux, BSDs, etc.). The directory doesn't move for anyone else. Internally, quite a few things change with regards to the path selection. If the platform in question does not have a statedir concept, then the path selection will simply return "home" instead (old behavior). Fixes #9147. [0]: https://gitlab.freedesktop.org/xdg/xdg-specs/-/commit/4f2884e16db35f2962d9b64312917c81be5cb54b --- player/configfiles.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'player/configfiles.c') diff --git a/player/configfiles.c b/player/configfiles.c index 9de7e36ec7..93079f85a9 100644 --- a/player/configfiles.c +++ b/player/configfiles.c @@ -192,6 +192,17 @@ static bool copy_mtime(const char *f1, const char *f2) return true; } +static char *mp_get_playback_resume_dir(struct MPContext *mpctx) +{ + char *wl_dir = mpctx->opts->watch_later_directory; + if (wl_dir && wl_dir[0]) { + wl_dir = mp_get_user_path(mpctx, mpctx->global, wl_dir); + } else { + wl_dir = mp_find_user_file(mpctx, mpctx->global, "state", MP_WATCH_LATER_CONF); + } + return wl_dir; +} + static char *mp_get_playback_resume_config_filename(struct MPContext *mpctx, const char *fname) { @@ -216,21 +227,9 @@ static char *mp_get_playback_resume_config_filename(struct MPContext *mpctx, for (int i = 0; i < 16; i++) conf = talloc_asprintf_append(conf, "%02X", md5[i]); - if (!mpctx->cached_watch_later_configdir) { - char *wl_dir = mpctx->opts->watch_later_directory; - if (wl_dir && wl_dir[0]) { - mpctx->cached_watch_later_configdir = - mp_get_user_path(mpctx, mpctx->global, wl_dir); - } - } - - if (!mpctx->cached_watch_later_configdir) { - mpctx->cached_watch_later_configdir = - mp_find_user_file(mpctx, mpctx->global, "home", MP_WATCH_LATER_CONF); - } - - if (mpctx->cached_watch_later_configdir) - res = mp_path_join(NULL, mpctx->cached_watch_later_configdir, conf); + char *wl_dir = mp_get_playback_resume_dir(mpctx); + if (wl_dir && wl_dir[0]) + res = mp_path_join(NULL, wl_dir, conf); exit: talloc_free(tmp); @@ -292,7 +291,8 @@ void mp_write_watch_later_conf(struct MPContext *mpctx) if (!conffile) goto exit; - mp_mk_user_dir(mpctx->global, "home", mpctx->cached_watch_later_configdir); + char *wl_dir = mp_get_playback_resume_dir(mpctx); + mp_mk_user_dir(mpctx->global, "state", wl_dir); MP_INFO(mpctx, "Saving state.\n"); -- cgit v1.2.3