queue: Improve the constructor to take multiple flags at once
It really should have been like this from the beginning. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
d939dcab20
commit
6ee68397fd
|
@ -13,10 +13,12 @@ enum queue_flags {
|
||||||
Q_ENABLED = (1 << 0),
|
Q_ENABLED = (1 << 0),
|
||||||
Q_RANDOM = (1 << 1),
|
Q_RANDOM = (1 << 1),
|
||||||
Q_REPEAT = (1 << 2),
|
Q_REPEAT = (1 << 2),
|
||||||
Q_NEVER_SORT = (1 << 3),
|
Q_NO_SORT = (1 << 3),
|
||||||
Q_DISABLE_CHANGED_SIZE = (1 << 31),
|
Q_DISABLE_CHANGED_SIZE = (1 << 31),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const unsigned int Q_FLAG_MASK = Q_ENABLED | Q_RANDOM | Q_REPEAT | Q_NO_SORT | Q_DISABLE_CHANGED_SIZE;
|
||||||
|
|
||||||
struct sort_info {
|
struct sort_info {
|
||||||
sort_t field;
|
sort_t field;
|
||||||
bool ascending;
|
bool ascending;
|
||||||
|
@ -35,7 +37,7 @@ protected:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Queue();
|
Queue();
|
||||||
Queue(queue_flags);
|
Queue(unsigned int);
|
||||||
~Queue();
|
~Queue();
|
||||||
void write(File &);
|
void write(File &);
|
||||||
void read(File &);
|
void read(File &);
|
||||||
|
|
|
@ -19,7 +19,7 @@ static bool o_pause_enabled = false;
|
||||||
static unsigned int o_pause_count = 0;
|
static unsigned int o_pause_count = 0;
|
||||||
static bool o_should_pause = false;
|
static bool o_should_pause = false;
|
||||||
|
|
||||||
static Queue o_recently_played(Q_ENABLED);
|
static Queue o_recently_played(Q_ENABLED | Q_REPEAT | Q_NO_SORT | Q_DISABLE_CHANGED_SIZE);
|
||||||
static File f_cur_track("cur_track", FILE_TYPE_DATA);
|
static File f_cur_track("cur_track", FILE_TYPE_DATA);
|
||||||
|
|
||||||
static void parse_error(GstMessage *error)
|
static void parse_error(GstMessage *error)
|
||||||
|
@ -117,9 +117,6 @@ void audio :: init(int *argc, char ***argv)
|
||||||
{
|
{
|
||||||
GstBus *bus;
|
GstBus *bus;
|
||||||
|
|
||||||
o_recently_played.set_flag(Q_REPEAT);
|
|
||||||
o_recently_played.set_flag(Q_NEVER_SORT);
|
|
||||||
o_recently_played.set_flag(Q_DISABLE_CHANGED_SIZE);
|
|
||||||
gst_init(argc, argv);
|
gst_init(argc, argv);
|
||||||
|
|
||||||
ocarina_player = gst_element_factory_make("playbin", "ocarina_player");
|
ocarina_player = gst_element_factory_make("playbin", "ocarina_player");
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
static std::set<unsigned int> empty_set;
|
static std::set<unsigned int> empty_set;
|
||||||
static Index playlist_db("playlist.db", false);
|
static Index playlist_db("playlist.db", false);
|
||||||
static Queue playlist_pq(Q_ENABLED);
|
static Queue playlist_pq(Q_ENABLED | Q_REPEAT | Q_NO_SORT);
|
||||||
static std::string cur_pq;
|
static std::string cur_pq;
|
||||||
|
|
||||||
static void import_ban_track(unsigned int track_id)
|
static void import_ban_track(unsigned int track_id)
|
||||||
|
@ -24,8 +24,6 @@ void playlist :: init()
|
||||||
playlist_pq.add_sort(SORT_ARTIST);
|
playlist_pq.add_sort(SORT_ARTIST);
|
||||||
playlist_pq.add_sort(SORT_YEAR);
|
playlist_pq.add_sort(SORT_YEAR);
|
||||||
playlist_pq.add_sort(SORT_TRACK);
|
playlist_pq.add_sort(SORT_TRACK);
|
||||||
playlist_pq.set_flag(Q_REPEAT);
|
|
||||||
playlist_pq.set_flag(Q_NEVER_SORT);
|
|
||||||
|
|
||||||
get_callbacks()->on_library_import_ban = import_ban_track;
|
get_callbacks()->on_library_import_ban = import_ban_track;
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@ Queue :: Queue()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Queue :: Queue(queue_flags f)
|
Queue :: Queue(unsigned int f)
|
||||||
: _cur(-1), _flags(f), _length(0)
|
: _cur(-1), _flags(f & Q_FLAG_MASK), _length(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ void Queue :: _add_sort(sort_t field, bool ascending)
|
||||||
|
|
||||||
void Queue :: add_sort(sort_t field, bool ascending)
|
void Queue :: add_sort(sort_t field, bool ascending)
|
||||||
{
|
{
|
||||||
if (_flags & Q_NEVER_SORT)
|
if (_flags & Q_NO_SORT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_add_sort(field, ascending);
|
_add_sort(field, ascending);
|
||||||
|
@ -266,7 +266,7 @@ void Queue :: add_sort(sort_t field, bool ascending)
|
||||||
|
|
||||||
void Queue :: reset_sort(sort_t field, bool ascending)
|
void Queue :: reset_sort(sort_t field, bool ascending)
|
||||||
{
|
{
|
||||||
if (_flags & Q_NEVER_SORT)
|
if (_flags & Q_NO_SORT)
|
||||||
return;
|
return;
|
||||||
if (_sort_order.front().field != field)
|
if (_sort_order.front().field != field)
|
||||||
_sort_order.clear();
|
_sort_order.clear();
|
||||||
|
|
|
@ -4,15 +4,19 @@
|
||||||
#include <queue.h>
|
#include <queue.h>
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
|
|
||||||
class TestQueue : public Queue
|
class TestQueue : public Queue
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
TestQueue() : Queue() {}
|
||||||
|
TestQueue(unsigned int f) : Queue(f) {}
|
||||||
unsigned int get_cur() { return _cur; }
|
unsigned int get_cur() { return _cur; }
|
||||||
unsigned int get_flags() { return _flags; }
|
unsigned int get_flags() { return _flags; }
|
||||||
unsigned int get_length() { return _length; }
|
unsigned int get_length() { return _length; }
|
||||||
std::list <sort_info> get_sorder() { return _sort_order; };
|
std::list <sort_info> get_sorder() { return _sort_order; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void test_default()
|
void test_default()
|
||||||
{
|
{
|
||||||
TestQueue q;
|
TestQueue q;
|
||||||
|
@ -24,8 +28,20 @@ void test_default()
|
||||||
test :: equal(q.next(), (Track *)NULL);
|
test :: equal(q.next(), (Track *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_constructor(unsigned int flags)
|
||||||
|
{
|
||||||
|
TestQueue q(flags | (1 << 30));
|
||||||
|
|
||||||
|
test :: equal(q.get_cur(), (unsigned)-1);
|
||||||
|
test :: equal(q.get_flags(), flags);
|
||||||
|
test :: equal(q.get_length(), (unsigned)0);
|
||||||
|
test :: equal(q.get_sorder().size(), (size_t)0);
|
||||||
|
test :: equal(q.next(), (Track *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
test_default();
|
test_default();
|
||||||
|
test_constructor(Q_ENABLED | Q_RANDOM);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue