83 lines
1.6 KiB
C++
83 lines
1.6 KiB
C++
/*
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
*/
|
|
#ifndef OCARINA_PLAYQUEUE_H
|
|
#define OCARINA_PLAYQUEUE_H
|
|
|
|
#include <file.h>
|
|
#include <library.h>
|
|
#include <vector>
|
|
#include <list>
|
|
|
|
enum playqueue_flags {
|
|
PQ_ENABLED = (1 << 0),
|
|
PQ_RANDOM = (1 << 1),
|
|
PQ_REPEAT = (1 << 2),
|
|
PQ_NEVER_SORT = (1 << 3),
|
|
PQ_DISABLE_CHANGED_SIZE = (1 << 31),
|
|
};
|
|
|
|
enum sort_t {
|
|
SORT_ARTIST,
|
|
SORT_ALBUM,
|
|
SORT_COUNT,
|
|
SORT_GENRE,
|
|
SORT_LENGTH,
|
|
SORT_PLAYED,
|
|
SORT_TITLE,
|
|
SORT_TRACK,
|
|
SORT_YEAR,
|
|
};
|
|
|
|
struct sort_info {
|
|
sort_t field;
|
|
bool ascending;
|
|
};
|
|
|
|
class Playqueue {
|
|
private:
|
|
std :: vector <unsigned int> tracks;
|
|
std :: list <sort_info> sort_order;
|
|
unsigned int flags;
|
|
unsigned int cur;
|
|
unsigned int length;
|
|
|
|
unsigned int find_sorted_id(library :: Song &);
|
|
void _add_sort(sort_t, bool);
|
|
|
|
public:
|
|
Playqueue();
|
|
Playqueue(playqueue_flags);
|
|
~Playqueue();
|
|
void write(File &);
|
|
void read(File &);
|
|
|
|
void set_flag(playqueue_flags);
|
|
void unset_flag(playqueue_flags);
|
|
const unsigned int get_flags();
|
|
unsigned int get_length();
|
|
std::string get_length_str();
|
|
|
|
unsigned int add(unsigned int);
|
|
unsigned int add_front(unsigned int);
|
|
void del(unsigned int);
|
|
void del_track(unsigned int);
|
|
void track_updated(unsigned int);
|
|
unsigned int size();
|
|
|
|
void add_sort(sort_t, bool ascending = true);
|
|
void reset_sort(sort_t, bool ascending = true);
|
|
void force_clear_sort();
|
|
std::list <sort_info> &get_sort_order();
|
|
|
|
unsigned int operator[](unsigned int);
|
|
unsigned int next();
|
|
void set_cur(unsigned int);
|
|
void path_selected(unsigned int);
|
|
#ifdef CONFIG_TEST
|
|
void reset();
|
|
#endif /* CONFIG_TEST */
|
|
};
|
|
|
|
#endif /* OCARINA_PLAYQUEUE_H */
|