Skip to content

Commit

Permalink
Merge branch 'queue_loaded_playlist' of https://github.com/jcorporati…
Browse files Browse the repository at this point in the history
  • Loading branch information
MaxKellermann committed Oct 26, 2024
2 parents 98bc632 + bfbff31 commit 17d0cd0
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 2 deletions.
1 change: 1 addition & 0 deletions doc/protocol.rst
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,7 @@ Querying :program:`MPD`'s status
:ref:`audio_output_format` for a detailed explanation.
- ``updating_db``: ``job id``
- ``error``: if there is an error, returns message here
- ``lastloadedplaylist``: last loaded stored playlist [#since_0_24]_

:program:`MPD` may omit lines which have no (known) value. Older
:program:`MPD` versions used to have a "magic" value for
Expand Down
7 changes: 5 additions & 2 deletions src/command/PlayerCommands.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#define COMMAND_STATUS_MIXRAMPDELAY "mixrampdelay"
#define COMMAND_STATUS_AUDIO "audio"
#define COMMAND_STATUS_UPDATING_DB "updating_db"
#define COMMAND_STATUS_LOADED_PLAYLIST "lastloadedplaylist"

CommandResult
handle_play(Client &client, Request args, [[maybe_unused]] Response &r)
Expand Down Expand Up @@ -128,7 +129,8 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
COMMAND_STATUS_PLAYLIST ": {}\n"
COMMAND_STATUS_PLAYLIST_LENGTH ": {}\n"
COMMAND_STATUS_MIXRAMPDB ": {}\n"
COMMAND_STATUS_STATE ": {}\n"),
COMMAND_STATUS_STATE ": {}\n"
COMMAND_STATUS_LOADED_PLAYLIST ": {}\n"),
(unsigned)playlist.GetRepeat(),
(unsigned)playlist.GetRandom(),
SingleToString(playlist.GetSingle()),
Expand All @@ -137,7 +139,8 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
playlist.GetVersion(),
playlist.GetLength(),
pc.GetMixRampDb(),
state);
state,
playlist.GetLastLoadedPlaylist());

if (pc.GetCrossFade() > FloatDuration::zero())
r.Fmt(FMT_STRING(COMMAND_STATUS_CROSSFADE ": {}\n"),
Expand Down
1 change: 1 addition & 0 deletions src/playlist/PlaylistQueue.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,

dest.AppendSong(pc, std::move(*song));
}
dest.SetLastLoadedPlaylist(uri);
}

void
Expand Down
8 changes: 8 additions & 0 deletions src/queue/Playlist.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,14 @@ struct playlist {
[[gnu::pure]]
int GetNextPosition() const noexcept;

const std::string_view GetLastLoadedPlaylist() const noexcept {
return queue.last_loaded_playlist;
}

void SetLastLoadedPlaylist(const char *playlist_name) noexcept {
queue.last_loaded_playlist = playlist_name;
}

/**
* Returns the song object which is currently queued. Returns
* none if there is none (yet?) or if MPD isn't playing.
Expand Down
5 changes: 5 additions & 0 deletions src/queue/PlaylistState.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#define PLAYLIST_STATE_FILE_CROSSFADE "crossfade: "
#define PLAYLIST_STATE_FILE_MIXRAMPDB "mixrampdb: "
#define PLAYLIST_STATE_FILE_MIXRAMPDELAY "mixrampdelay: "
#define PLAYLIST_STATE_FILE_LOADED_PLAYLIST "lastloadedplaylist: "
#define PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "playlist_begin"
#define PLAYLIST_STATE_FILE_PLAYLIST_END "playlist_end"

Expand Down Expand Up @@ -85,6 +86,8 @@ playlist_state_save(BufferedOutputStream &os, const struct playlist &playlist,
pc.GetMixRampDb());
os.Fmt(FMT_STRING(PLAYLIST_STATE_FILE_MIXRAMPDELAY "{}\n"),
pc.GetMixRampDelay().count());
os.Fmt(FMT_STRING(PLAYLIST_STATE_FILE_LOADED_PLAYLIST "{}\n"),
playlist.GetLastLoadedPlaylist());
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
queue_save(os, playlist.queue);
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_END "\n");
Expand Down Expand Up @@ -156,6 +159,8 @@ playlist_state_restore(const StateFileConfig &config,
prior to MPD 0.18 */
if (IsDigitASCII(*p))
pc.SetMixRampDelay(FloatDuration(ParseFloat(p)));
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_LOADED_PLAYLIST))) {
playlist.SetLastLoadedPlaylist(p);
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_RANDOM))) {
random_mode = StringIsEqual(p, "1");
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_CURRENT))) {
Expand Down
1 change: 1 addition & 0 deletions src/queue/Queue.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ Queue::Clear() noexcept
}

length = 0;
last_loaded_playlist.clear();
}

static void
Expand Down
3 changes: 3 additions & 0 deletions src/queue/Queue.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ struct Queue {
/** play back songs in random order? */
bool random = false;

/** Last loaded playlist */
std::string last_loaded_playlist;

/** random number generator for shuffle and random mode */
LazyRandomEngine rand;

Expand Down

0 comments on commit 17d0cd0

Please sign in to comment.