summaryrefslogtreecommitdiffstats
path: root/player/configfiles.c
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-05-02 19:29:27 -0500
committerDudemanguy <random342@airmail.cc>2023-05-09 20:37:17 +0000
commit7c4c9bc86f55f4d1224814fbeafdee8f1c3c3108 (patch)
tree049c5f74a1380fd5de1c1911a4829103c875d146 /player/configfiles.c
parent5158b85b21b9316b610ab59ba65da36144e03b9a (diff)
downloadmpv-7c4c9bc86f55f4d1224814fbeafdee8f1c3c3108.tar.bz2
mpv-7c4c9bc86f55f4d1224814fbeafdee8f1c3c3108.tar.xz
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
Diffstat (limited to 'player/configfiles.c')
-rw-r--r--player/configfiles.c32
1 files changed, 16 insertions, 16 deletions
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");