summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-02-16 22:06:41 +0100
committerwm4 <wm4@nowhere>2015-02-16 22:08:16 +0100
commitd26ba961d05a2de165fa87c41d705ed3db00231b (patch)
treeeb3dfc217322ca600decad7a6bf7a051c6d521f5 /player
parent37183532ae2b3b919540a31f56d0089cd16652d9 (diff)
downloadmpv-d26ba961d05a2de165fa87c41d705ed3db00231b.tar.bz2
mpv-d26ba961d05a2de165fa87c41d705ed3db00231b.tar.xz
command: add rescan_external_files
Requested. Hopefully will be useful for things that download and add external subtitles on demand. Or something. Closes #1586.
Diffstat (limited to 'player')
-rw-r--r--player/command.c18
-rw-r--r--player/core.h3
-rw-r--r--player/loadfile.c7
3 files changed, 24 insertions, 4 deletions
diff --git a/player/command.c b/player/command.c
index 484b8d7aad..e2a69fe808 100644
--- a/player/command.c
+++ b/player/command.c
@@ -4636,6 +4636,24 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd)
return -1;
}
+ case MP_CMD_RESCAN_EXTERNAL_FILES: {
+ if (!mpctx->playing)
+ return -1;
+ autoload_external_files(mpctx);
+ if (cmd->args[0].v.i) {
+ // somewhat fuzzy and not ideal
+ struct track *a = select_track(mpctx, STREAM_AUDIO, opts->audio_id,
+ opts->audio_id_ff, opts->audio_lang);
+ if (a && a->is_external)
+ mp_switch_track(mpctx, STREAM_AUDIO, a);
+ struct track *s = select_track(mpctx, STREAM_SUB, opts->sub_id,
+ opts->sub_id_ff, opts->sub_lang);
+ if (s && s->is_external)
+ mp_switch_track(mpctx, STREAM_SUB, s);
+ }
+ break;
+ }
+
case MP_CMD_SCREENSHOT:
screenshot_request(mpctx, cmd->args[0].v.i, cmd->args[1].v.i, msg_osd);
break;
diff --git a/player/core.h b/player/core.h
index d6475eb385..5b69541d24 100644
--- a/player/core.h
+++ b/player/core.h
@@ -394,6 +394,9 @@ void mp_play_files(struct MPContext *mpctx);
void update_demuxer_properties(struct MPContext *mpctx);
void reselect_demux_streams(struct MPContext *mpctx);
void prepare_playlist(struct MPContext *mpctx, struct playlist *pl);
+void autoload_external_files(struct MPContext *mpctx);
+struct track *select_track(struct MPContext *mpctx, enum stream_type type,
+ int tid, int ffid, char **langs);
// main.c
int mpv_main(int argc, char *argv[]);
diff --git a/player/loadfile.c b/player/loadfile.c
index 472304d5f0..9148050c6a 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -441,9 +441,8 @@ static bool compare_track(struct track *t1, struct track *t2, char **langs,
}
return t1->user_tid <= t2->user_tid;
}
-static struct track *select_track(struct MPContext *mpctx,
- enum stream_type type, int tid, int ffid,
- char **langs)
+struct track *select_track(struct MPContext *mpctx, enum stream_type type,
+ int tid, int ffid, char **langs)
{
if (ffid != -1)
tid = -1; // prefer selecting ffid
@@ -727,7 +726,7 @@ static void open_subtitles_from_options(struct MPContext *mpctx)
mp_add_external_file(mpctx, opts->sub_name[i], STREAM_SUB);
}
-static void autoload_external_files(struct MPContext *mpctx)
+void autoload_external_files(struct MPContext *mpctx)
{
if (mpctx->opts->sub_auto < 0 && mpctx->opts->audiofile_auto < 0)
return;