mirror of https://github.com/mpv-player/mpv
player: add loadlist insert-next commands
Analogous changes to the previous commit ("add loadfile insert-next commands"), but for the `loadlist` command. This allows us to insert a new playlist next in the current playlist, rather than just appending it to the end.
This commit is contained in:
parent
9e162d2604
commit
432256e5d2
|
@ -496,6 +496,13 @@ Remember to quote string arguments in input.conf (see `Flat command syntax`_).
|
||||||
Append the new playlist, and if nothing is currently playing, start
|
Append the new playlist, and if nothing is currently playing, start
|
||||||
playback. (Always starts with the new playlist, even if the internal
|
playback. (Always starts with the new playlist, even if the internal
|
||||||
playlist was not empty before running this command.)
|
playlist was not empty before running this command.)
|
||||||
|
<insert-next>
|
||||||
|
Insert the new playlist into the current internal playlist, directly
|
||||||
|
after the current entry.
|
||||||
|
<insert-next-play>
|
||||||
|
Insert the new playlist, and if nothing is currently playing, start
|
||||||
|
playback. (Always starts with the new playlist, even if the internal
|
||||||
|
playlist was not empty before running this command.)
|
||||||
|
|
||||||
``playlist-clear``
|
``playlist-clear``
|
||||||
Clear the playlist, except the currently played file.
|
Clear the playlist, except the currently played file.
|
||||||
|
|
|
@ -5567,24 +5567,32 @@ static void cmd_loadlist(void *p)
|
||||||
struct mp_cmd_ctx *cmd = p;
|
struct mp_cmd_ctx *cmd = p;
|
||||||
struct MPContext *mpctx = cmd->mpctx;
|
struct MPContext *mpctx = cmd->mpctx;
|
||||||
char *filename = cmd->args[0].v.s;
|
char *filename = cmd->args[0].v.s;
|
||||||
int append = cmd->args[1].v.i;
|
int flag = cmd->args[1].v.i;
|
||||||
|
|
||||||
|
bool replace = (flag == 0);
|
||||||
|
bool insert_next = (flag == 3 || flag == 4);
|
||||||
|
bool play = (flag == 2 || flag == 4);
|
||||||
|
|
||||||
struct playlist *pl = playlist_parse_file(filename, cmd->abort->cancel,
|
struct playlist *pl = playlist_parse_file(filename, cmd->abort->cancel,
|
||||||
mpctx->global);
|
mpctx->global);
|
||||||
if (pl) {
|
if (pl) {
|
||||||
prepare_playlist(mpctx, pl);
|
prepare_playlist(mpctx, pl);
|
||||||
struct playlist_entry *new = pl->current;
|
struct playlist_entry *new = pl->current;
|
||||||
if (!append)
|
if (replace)
|
||||||
playlist_clear(mpctx->playlist);
|
playlist_clear(mpctx->playlist);
|
||||||
struct playlist_entry *first = playlist_entry_from_index(pl, 0);
|
struct playlist_entry *first = playlist_entry_from_index(pl, 0);
|
||||||
int num_entries = pl->num_entries;
|
int num_entries = pl->num_entries;
|
||||||
|
if (insert_next) {
|
||||||
|
playlist_transfer_entries(mpctx->playlist, pl);
|
||||||
|
} else {
|
||||||
playlist_append_entries(mpctx->playlist, pl);
|
playlist_append_entries(mpctx->playlist, pl);
|
||||||
|
}
|
||||||
talloc_free(pl);
|
talloc_free(pl);
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
new = playlist_get_first(mpctx->playlist);
|
new = playlist_get_first(mpctx->playlist);
|
||||||
|
|
||||||
if ((!append || (append == 2 && !mpctx->playlist->current)) && new)
|
if ((replace || (play && !mpctx->playlist->current)) && new)
|
||||||
mp_set_playlist_entry(mpctx, new);
|
mp_set_playlist_entry(mpctx, new);
|
||||||
|
|
||||||
struct mpv_node *res = &cmd->result;
|
struct mpv_node *res = &cmd->result;
|
||||||
|
@ -6703,7 +6711,9 @@ const struct mp_cmd_def mp_cmds[] = {
|
||||||
{"flags", OPT_CHOICE(v.i,
|
{"flags", OPT_CHOICE(v.i,
|
||||||
{"replace", 0},
|
{"replace", 0},
|
||||||
{"append", 1},
|
{"append", 1},
|
||||||
{"append-play", 2}),
|
{"append-play", 2},
|
||||||
|
{"insert-next", 3},
|
||||||
|
{"insert-next-play", 4}),
|
||||||
.flags = MP_CMD_OPT_ARG},
|
.flags = MP_CMD_OPT_ARG},
|
||||||
},
|
},
|
||||||
.spawn_thread = true,
|
.spawn_thread = true,
|
||||||
|
|
Loading…
Reference in New Issue