]> git.tdb.fi Git - libs/al.git/blob - source/playlist.h
Externalize playlist management from Jukebox
[libs/al.git] / source / playlist.h
1 #ifndef MSP_AL_PLAYLIST_H_
2 #define MSP_AL_PLAYLIST_H_
3
4 #include <string>
5 #include <vector>
6 #include <msp/datafile/objectloader.h>
7
8 namespace Msp {
9 namespace AL {
10
11 class Playlist
12 {
13 public:
14         class Loader: public DataFile::CollectionObjectLoader<Playlist>
15         {
16         public:
17                 Loader(Playlist &);
18                 Loader(Playlist &, Collection &);
19         private:
20                 void init();
21
22                 void track(const std::string &);
23         };
24
25 private:
26         struct Track
27         {
28                 const DataFile::Collection *collection;
29                 std::string filename;
30
31                 Track();
32                 Track(const std::string &);
33         };
34
35         bool shuffle;
36         std::vector<Track> tracks;
37
38 public:
39         Playlist();
40
41         void add_track(const std::string &);
42         void remove_track(const std::string &);
43         void clear_tracks();
44         void set_shuffle(bool);
45         const std::string &get_track(unsigned) const;
46         unsigned size() const { return tracks.size(); }
47         bool empty() const { return tracks.empty(); }
48
49         unsigned advance(unsigned, int = 1) const;
50         IO::Seekable *open(unsigned) const;
51 };
52
53 } // namespace AL
54 } // namespace Msp
55
56 #endif