mirror of
https://github.com/mpv-player/mpv
synced 2025-03-31 15:59:34 +00:00
command: add some playlist manipulation commands
playlist_remove and playlist_move.
This commit is contained in:
parent
0b77649c0b
commit
451f6788ce
@ -164,6 +164,17 @@ loadlist "<playlist>" [replace|append]
|
|||||||
playlist_clear
|
playlist_clear
|
||||||
Clear the playlist, except the currently played file.
|
Clear the playlist, except the currently played file.
|
||||||
|
|
||||||
|
playlist_remove <index>
|
||||||
|
Remove the playlist entry at the given index. Index values start counting
|
||||||
|
with 0. You can't remove the entry for the currently played file.
|
||||||
|
|
||||||
|
playlist_move <index1> <index2>
|
||||||
|
Move the playlist entry at index1, so that it takes the place of the
|
||||||
|
entry index2. (Paradoxically, the moved playlist entry will not have
|
||||||
|
the index value index2 after moving if index1 was lower than index2,
|
||||||
|
because index2 refers to the target entry, not the index the entry
|
||||||
|
will have after moving.)
|
||||||
|
|
||||||
run "<command>"
|
run "<command>"
|
||||||
Run the given command with ``/bin/sh -c``. The string is expanded like in
|
Run the given command with ``/bin/sh -c``. The string is expanded like in
|
||||||
property_expansion_.
|
property_expansion_.
|
||||||
|
@ -2180,6 +2180,29 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case MP_CMD_PLAYLIST_REMOVE: {
|
||||||
|
struct playlist_entry *e = playlist_entry_from_index(mpctx->playlist,
|
||||||
|
cmd->args[0].v.i);
|
||||||
|
if (e) {
|
||||||
|
// Can't play a removed entry
|
||||||
|
if (mpctx->playlist->current == e)
|
||||||
|
mpctx->stop_play = PT_CURRENT_ENTRY;
|
||||||
|
playlist_remove(mpctx->playlist, e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MP_CMD_PLAYLIST_MOVE: {
|
||||||
|
struct playlist_entry *e1 = playlist_entry_from_index(mpctx->playlist,
|
||||||
|
cmd->args[0].v.i);
|
||||||
|
struct playlist_entry *e2 = playlist_entry_from_index(mpctx->playlist,
|
||||||
|
cmd->args[1].v.i);
|
||||||
|
if (e1) {
|
||||||
|
playlist_move(mpctx->playlist, e1, e2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case MP_CMD_STOP:
|
case MP_CMD_STOP:
|
||||||
// Go back to the starting point.
|
// Go back to the starting point.
|
||||||
mpctx->stop_play = PT_STOP;
|
mpctx->stop_play = PT_STOP;
|
||||||
|
@ -183,6 +183,8 @@ static const mp_cmd_t mp_cmds[] = {
|
|||||||
{"append", 1}, {"1", 1})),
|
{"append", 1}, {"1", 1})),
|
||||||
}},
|
}},
|
||||||
{ MP_CMD_PLAYLIST_CLEAR, "playlist_clear", },
|
{ MP_CMD_PLAYLIST_CLEAR, "playlist_clear", },
|
||||||
|
{ MP_CMD_PLAYLIST_REMOVE, "playlist_remove", { ARG_INT } },
|
||||||
|
{ MP_CMD_PLAYLIST_MOVE, "playlist_move", { ARG_INT, ARG_INT } },
|
||||||
{ MP_CMD_RUN, "run", { ARG_STRING } },
|
{ MP_CMD_RUN, "run", { ARG_STRING } },
|
||||||
|
|
||||||
{ MP_CMD_KEYDOWN_EVENTS, "key_down_event", { ARG_INT } },
|
{ MP_CMD_KEYDOWN_EVENTS, "key_down_event", { ARG_INT } },
|
||||||
|
@ -39,6 +39,8 @@ enum mp_command_type {
|
|||||||
MP_CMD_LOADFILE,
|
MP_CMD_LOADFILE,
|
||||||
MP_CMD_LOADLIST,
|
MP_CMD_LOADLIST,
|
||||||
MP_CMD_PLAYLIST_CLEAR,
|
MP_CMD_PLAYLIST_CLEAR,
|
||||||
|
MP_CMD_PLAYLIST_REMOVE,
|
||||||
|
MP_CMD_PLAYLIST_MOVE,
|
||||||
MP_CMD_SUB_STEP,
|
MP_CMD_SUB_STEP,
|
||||||
MP_CMD_TV_SET_CHANNEL,
|
MP_CMD_TV_SET_CHANNEL,
|
||||||
MP_CMD_TV_LAST_CHANNEL,
|
MP_CMD_TV_LAST_CHANNEL,
|
||||||
|
@ -114,6 +114,20 @@ void playlist_clear(struct playlist *pl)
|
|||||||
pl->current_was_replaced = false;
|
pl->current_was_replaced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Moves entry such that entry->prev = at (even if at is NULL)
|
||||||
|
void playlist_move(struct playlist *pl, struct playlist_entry *entry,
|
||||||
|
struct playlist_entry *at)
|
||||||
|
{
|
||||||
|
struct playlist_entry *save_current = pl->current;
|
||||||
|
bool save_replaced = pl->current_was_replaced;
|
||||||
|
|
||||||
|
playlist_unlink(pl, entry);
|
||||||
|
playlist_insert(pl, at ? at->prev : pl->last, entry);
|
||||||
|
|
||||||
|
pl->current = save_current;
|
||||||
|
pl->current_was_replaced = save_replaced;
|
||||||
|
}
|
||||||
|
|
||||||
void playlist_add_file(struct playlist *pl, const char *filename)
|
void playlist_add_file(struct playlist *pl, const char *filename)
|
||||||
{
|
{
|
||||||
playlist_add(pl, playlist_entry_new(filename));
|
playlist_add(pl, playlist_entry_new(filename));
|
||||||
|
@ -58,6 +58,9 @@ void playlist_add(struct playlist *pl, struct playlist_entry *add);
|
|||||||
void playlist_remove(struct playlist *pl, struct playlist_entry *entry);
|
void playlist_remove(struct playlist *pl, struct playlist_entry *entry);
|
||||||
void playlist_clear(struct playlist *pl);
|
void playlist_clear(struct playlist *pl);
|
||||||
|
|
||||||
|
void playlist_move(struct playlist *pl, struct playlist_entry *entry,
|
||||||
|
struct playlist_entry *at);
|
||||||
|
|
||||||
void playlist_add_file(struct playlist *pl, const char *filename);
|
void playlist_add_file(struct playlist *pl, const char *filename);
|
||||||
void playlist_shuffle(struct playlist *pl);
|
void playlist_shuffle(struct playlist *pl);
|
||||||
struct playlist_entry *playlist_get_next(struct playlist *pl, int direction);
|
struct playlist_entry *playlist_get_next(struct playlist *pl, int direction);
|
||||||
|
Loading…
Reference in New Issue
Block a user