Merge branch 'queue_loaded_playlist' of https://github.com/jcorporation/MPD
This commit is contained in:
commit
17d0cd0abd
|
@ -544,6 +544,7 @@ Querying :program:`MPD`'s status
|
||||||
:ref:`audio_output_format` for a detailed explanation.
|
:ref:`audio_output_format` for a detailed explanation.
|
||||||
- ``updating_db``: ``job id``
|
- ``updating_db``: ``job id``
|
||||||
- ``error``: if there is an error, returns message here
|
- ``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` may omit lines which have no (known) value. Older
|
||||||
:program:`MPD` versions used to have a "magic" value for
|
:program:`MPD` versions used to have a "magic" value for
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#define COMMAND_STATUS_MIXRAMPDELAY "mixrampdelay"
|
#define COMMAND_STATUS_MIXRAMPDELAY "mixrampdelay"
|
||||||
#define COMMAND_STATUS_AUDIO "audio"
|
#define COMMAND_STATUS_AUDIO "audio"
|
||||||
#define COMMAND_STATUS_UPDATING_DB "updating_db"
|
#define COMMAND_STATUS_UPDATING_DB "updating_db"
|
||||||
|
#define COMMAND_STATUS_LOADED_PLAYLIST "lastloadedplaylist"
|
||||||
|
|
||||||
CommandResult
|
CommandResult
|
||||||
handle_play(Client &client, Request args, [[maybe_unused]] Response &r)
|
handle_play(Client &client, Request args, [[maybe_unused]] Response &r)
|
||||||
|
@ -128,7 +129,8 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
|
||||||
COMMAND_STATUS_PLAYLIST ": {}\n"
|
COMMAND_STATUS_PLAYLIST ": {}\n"
|
||||||
COMMAND_STATUS_PLAYLIST_LENGTH ": {}\n"
|
COMMAND_STATUS_PLAYLIST_LENGTH ": {}\n"
|
||||||
COMMAND_STATUS_MIXRAMPDB ": {}\n"
|
COMMAND_STATUS_MIXRAMPDB ": {}\n"
|
||||||
COMMAND_STATUS_STATE ": {}\n"),
|
COMMAND_STATUS_STATE ": {}\n"
|
||||||
|
COMMAND_STATUS_LOADED_PLAYLIST ": {}\n"),
|
||||||
(unsigned)playlist.GetRepeat(),
|
(unsigned)playlist.GetRepeat(),
|
||||||
(unsigned)playlist.GetRandom(),
|
(unsigned)playlist.GetRandom(),
|
||||||
SingleToString(playlist.GetSingle()),
|
SingleToString(playlist.GetSingle()),
|
||||||
|
@ -137,7 +139,8 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
|
||||||
playlist.GetVersion(),
|
playlist.GetVersion(),
|
||||||
playlist.GetLength(),
|
playlist.GetLength(),
|
||||||
pc.GetMixRampDb(),
|
pc.GetMixRampDb(),
|
||||||
state);
|
state,
|
||||||
|
playlist.GetLastLoadedPlaylist());
|
||||||
|
|
||||||
if (pc.GetCrossFade() > FloatDuration::zero())
|
if (pc.GetCrossFade() > FloatDuration::zero())
|
||||||
r.Fmt(FMT_STRING(COMMAND_STATUS_CROSSFADE ": {}\n"),
|
r.Fmt(FMT_STRING(COMMAND_STATUS_CROSSFADE ": {}\n"),
|
||||||
|
|
|
@ -55,6 +55,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
|
||||||
|
|
||||||
dest.AppendSong(pc, std::move(*song));
|
dest.AppendSong(pc, std::move(*song));
|
||||||
}
|
}
|
||||||
|
dest.SetLastLoadedPlaylist(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -102,6 +102,14 @@ struct playlist {
|
||||||
[[gnu::pure]]
|
[[gnu::pure]]
|
||||||
int GetNextPosition() const noexcept;
|
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
|
* Returns the song object which is currently queued. Returns
|
||||||
* none if there is none (yet?) or if MPD isn't playing.
|
* none if there is none (yet?) or if MPD isn't playing.
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#define PLAYLIST_STATE_FILE_CROSSFADE "crossfade: "
|
#define PLAYLIST_STATE_FILE_CROSSFADE "crossfade: "
|
||||||
#define PLAYLIST_STATE_FILE_MIXRAMPDB "mixrampdb: "
|
#define PLAYLIST_STATE_FILE_MIXRAMPDB "mixrampdb: "
|
||||||
#define PLAYLIST_STATE_FILE_MIXRAMPDELAY "mixrampdelay: "
|
#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_BEGIN "playlist_begin"
|
||||||
#define PLAYLIST_STATE_FILE_PLAYLIST_END "playlist_end"
|
#define PLAYLIST_STATE_FILE_PLAYLIST_END "playlist_end"
|
||||||
|
|
||||||
|
@ -85,6 +86,8 @@ playlist_state_save(BufferedOutputStream &os, const struct playlist &playlist,
|
||||||
pc.GetMixRampDb());
|
pc.GetMixRampDb());
|
||||||
os.Fmt(FMT_STRING(PLAYLIST_STATE_FILE_MIXRAMPDELAY "{}\n"),
|
os.Fmt(FMT_STRING(PLAYLIST_STATE_FILE_MIXRAMPDELAY "{}\n"),
|
||||||
pc.GetMixRampDelay().count());
|
pc.GetMixRampDelay().count());
|
||||||
|
os.Fmt(FMT_STRING(PLAYLIST_STATE_FILE_LOADED_PLAYLIST "{}\n"),
|
||||||
|
playlist.GetLastLoadedPlaylist());
|
||||||
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
|
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
|
||||||
queue_save(os, playlist.queue);
|
queue_save(os, playlist.queue);
|
||||||
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_END "\n");
|
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_END "\n");
|
||||||
|
@ -156,6 +159,8 @@ playlist_state_restore(const StateFileConfig &config,
|
||||||
prior to MPD 0.18 */
|
prior to MPD 0.18 */
|
||||||
if (IsDigitASCII(*p))
|
if (IsDigitASCII(*p))
|
||||||
pc.SetMixRampDelay(FloatDuration(ParseFloat(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))) {
|
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_RANDOM))) {
|
||||||
random_mode = StringIsEqual(p, "1");
|
random_mode = StringIsEqual(p, "1");
|
||||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_CURRENT))) {
|
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_CURRENT))) {
|
||||||
|
|
|
@ -270,6 +270,7 @@ Queue::Clear() noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
length = 0;
|
length = 0;
|
||||||
|
last_loaded_playlist.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -85,6 +85,9 @@ struct Queue {
|
||||||
/** play back songs in random order? */
|
/** play back songs in random order? */
|
||||||
bool random = false;
|
bool random = false;
|
||||||
|
|
||||||
|
/** Last loaded playlist */
|
||||||
|
std::string last_loaded_playlist;
|
||||||
|
|
||||||
/** random number generator for shuffle and random mode */
|
/** random number generator for shuffle and random mode */
|
||||||
LazyRandomEngine rand;
|
LazyRandomEngine rand;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue