Add ConsumeMode oneshot, closes #925
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "player/Control.hxx"
|
||||
#include "song/DetachedSong.hxx"
|
||||
#include "SingleMode.hxx"
|
||||
#include "ConsumeMode.hxx"
|
||||
#include "Log.hxx"
|
||||
|
||||
#include <cassert>
|
||||
@@ -101,9 +102,14 @@ playlist::QueuedSongStarted(PlayerControl &pc) noexcept
|
||||
current = queued;
|
||||
queued = -1;
|
||||
|
||||
if (queue.consume)
|
||||
if (queue.consume != ConsumeMode::OFF)
|
||||
DeleteOrder(pc, old_current);
|
||||
|
||||
if (queue.consume == ConsumeMode::ONE_SHOT) {
|
||||
queue.consume = ConsumeMode::OFF;
|
||||
listener.OnQueueOptionsChanged();
|
||||
}
|
||||
|
||||
listener.OnQueueSongStarted();
|
||||
|
||||
SongStarted();
|
||||
@@ -289,12 +295,13 @@ playlist::SetSingle(PlayerControl &pc, SingleMode status) noexcept
|
||||
}
|
||||
|
||||
void
|
||||
playlist::SetConsume(bool status) noexcept
|
||||
playlist::SetConsume(ConsumeMode status) noexcept
|
||||
{
|
||||
if (status == queue.consume)
|
||||
return;
|
||||
|
||||
queue.consume = status;
|
||||
|
||||
listener.OnQueueOptionsChanged();
|
||||
}
|
||||
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#define MPD_PLAYLIST_HXX
|
||||
|
||||
#include "SingleMode.hxx"
|
||||
#include "ConsumeMode.hxx"
|
||||
#include "queue/Queue.hxx"
|
||||
#include "config.h"
|
||||
|
||||
@@ -369,11 +370,11 @@ public:
|
||||
|
||||
void SetSingle(PlayerControl &pc, SingleMode new_value) noexcept;
|
||||
|
||||
bool GetConsume() const noexcept {
|
||||
ConsumeMode GetConsume() const noexcept {
|
||||
return queue.consume;
|
||||
}
|
||||
|
||||
void SetConsume(bool new_value) noexcept;
|
||||
void SetConsume(ConsumeMode new_value) noexcept;
|
||||
|
||||
private:
|
||||
/**
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "PlaylistError.hxx"
|
||||
#include "player/Control.hxx"
|
||||
#include "song/DetachedSong.hxx"
|
||||
#include "Listener.hxx"
|
||||
#include "Log.hxx"
|
||||
|
||||
void
|
||||
@@ -178,8 +179,14 @@ playlist::PlayNext(PlayerControl &pc)
|
||||
}
|
||||
|
||||
/* Consume mode removes each played songs. */
|
||||
if (queue.consume)
|
||||
if (queue.consume != ConsumeMode::OFF)
|
||||
DeleteOrder(pc, old_current);
|
||||
|
||||
/* Disable consume mode after consuming one song in oneshot mode. */
|
||||
if (queue.consume == ConsumeMode::ONE_SHOT) {
|
||||
queue.consume = ConsumeMode::OFF;
|
||||
listener.OnQueueOptionsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -162,7 +162,7 @@ playlist_state_restore(const StateFileConfig &config,
|
||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_SINGLE))) {
|
||||
playlist.SetSingle(pc, SingleFromString(p));
|
||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_CONSUME))) {
|
||||
playlist.SetConsume(StringIsEqual(p, "1"));
|
||||
playlist.SetConsume(ConsumeFromString(p));
|
||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_CROSSFADE))) {
|
||||
pc.SetCrossFade(FloatDuration(atoi(p)));
|
||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_STATE_FILE_MIXRAMPDB))) {
|
||||
@@ -243,6 +243,7 @@ playlist_state_get_hash(const playlist &playlist,
|
||||
((int)playlist.queue.single << 25) ^
|
||||
(playlist.queue.random << 27) ^
|
||||
(playlist.queue.repeat << 28) ^
|
||||
(playlist.queue.consume << 30) ^
|
||||
/* note that this takes 2 bits */
|
||||
((int)playlist.queue.consume << 29) ^
|
||||
(playlist.queue.random << 31);
|
||||
}
|
||||
|
@@ -54,11 +54,11 @@ Queue::GetNextOrder(unsigned _order) const noexcept
|
||||
{
|
||||
assert(_order < length);
|
||||
|
||||
if (single != SingleMode::OFF && repeat && !consume)
|
||||
if (single != SingleMode::OFF && repeat && consume == ConsumeMode::OFF )
|
||||
return _order;
|
||||
else if (_order + 1 < length)
|
||||
return _order + 1;
|
||||
else if (repeat && (_order > 0 || !consume))
|
||||
else if (repeat && (_order > 0 || consume == ConsumeMode::OFF))
|
||||
/* restart at first song */
|
||||
return 0;
|
||||
else
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "util/Compiler.h"
|
||||
#include "IdTable.hxx"
|
||||
#include "SingleMode.hxx"
|
||||
#include "ConsumeMode.hxx"
|
||||
#include "util/LazyRandomEngine.hxx"
|
||||
|
||||
#include <cassert>
|
||||
@@ -96,7 +97,7 @@ struct Queue {
|
||||
SingleMode single = SingleMode::OFF;
|
||||
|
||||
/** remove each played files. */
|
||||
bool consume = false;
|
||||
ConsumeMode consume = ConsumeMode::OFF;
|
||||
|
||||
/** play back songs in random order? */
|
||||
bool random = false;
|
||||
|
Reference in New Issue
Block a user