player: make resuming playlists less noisy in verbose mode

mp_find_config_file() will print the filename lookup and its result in
verbose mode. This is wanted, but gets inconvenient when it is done for
every playlist entry (for resuming).

Lookup the watch_later subdir only once and cache the result instead.

This drops the logic for loading the resume file from other locations,
which should generally be unnecessary, though might lead to confusion if
the user has mixed old and new config paths (which the user shouldn't).

Also add a mp_find_user_config_file() function for a more
straightforward and reliable way to get actual local configpaths,
instead of possibly global and unwritable locations.

Also, for symmetry, check the resume option in mp_load_playback_resume()
just like mp_check_playlist_resume() does.
This commit is contained in:
wm4 2015-05-09 16:21:44 +02:00
parent 34ee78f2cb
commit b6346cd0ba
5 changed files with 37 additions and 23 deletions

View File

@ -91,6 +91,18 @@ static const char *mp_get_platform_path(void *talloc_ctx,
return NULL;
}
char *mp_find_user_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename)
{
void *tmp = talloc_new(NULL);
char *res = (char *)mp_get_platform_path(tmp, global, config_dirs[0]);
if (res)
res = mp_path_join(talloc_ctx, res, filename);
talloc_free(tmp);
MP_VERBOSE(global, "config file: '%s' -> '%s'\n", filename, res ? res : "-");
return res;
}
static char **mp_find_all_config_files_limited(void *talloc_ctx,
struct mpv_global *global,
int max_files,
@ -316,13 +328,8 @@ void mp_mkdirp(const char *dir)
void mp_mk_config_dir(struct mpv_global *global, char *subdir)
{
void *tmp = talloc_new(NULL);
const char *dir = mp_get_platform_path(tmp, global, "home");
if (dir) {
dir = talloc_asprintf(tmp, "%s/%s", dir, subdir);
char *dir = mp_find_user_config_file(NULL, global, subdir);
if (dir)
mp_mkdirp(dir);
}
talloc_free(tmp);
talloc_free(dir);
}

View File

@ -31,6 +31,12 @@ struct mpv_global;
char *mp_find_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename);
// Like mp_find_config_file(), but search only the local writable user config
// dir. Also, this returns a result even if the file does not exist. Calling
// it with filename="" is equivalent to retrieving the user config dir.
char *mp_find_user_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename);
// Find all instances of the given config file. Paths are returned in order
// from lowest to highest priority. filename can contain multiple names
// separated with '|', with the first having highest priority.

View File

@ -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)

View File

@ -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;

View File

@ -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);