1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-25 04:38:01 +00:00

command: add some playlist manipulation commands

playlist_remove and playlist_move.
This commit is contained in:
wm4 2013-07-02 13:17:50 +02:00
parent 0b77649c0b
commit 451f6788ce
6 changed files with 55 additions and 0 deletions

View File

@ -164,6 +164,17 @@ loadlist "<playlist>" [replace|append]
playlist_clear
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 the given command with ``/bin/sh -c``. The string is expanded like in
property_expansion_.

View File

@ -2180,6 +2180,29 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
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:
// Go back to the starting point.
mpctx->stop_play = PT_STOP;

View File

@ -183,6 +183,8 @@ static const mp_cmd_t mp_cmds[] = {
{"append", 1}, {"1", 1})),
}},
{ 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_KEYDOWN_EVENTS, "key_down_event", { ARG_INT } },

View File

@ -39,6 +39,8 @@ enum mp_command_type {
MP_CMD_LOADFILE,
MP_CMD_LOADLIST,
MP_CMD_PLAYLIST_CLEAR,
MP_CMD_PLAYLIST_REMOVE,
MP_CMD_PLAYLIST_MOVE,
MP_CMD_SUB_STEP,
MP_CMD_TV_SET_CHANNEL,
MP_CMD_TV_LAST_CHANNEL,

View File

@ -114,6 +114,20 @@ void playlist_clear(struct playlist *pl)
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)
{
playlist_add(pl, playlist_entry_new(filename));

View File

@ -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_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_shuffle(struct playlist *pl);
struct playlist_entry *playlist_get_next(struct playlist *pl, int direction);