e381838f935ba35749128c9006d8954ffb6c320d
[someplayer] / src / player / player.h
1 #ifndef PLAYER_H
2 #define PLAYER_H
3
4 #include <QObject>
5 #include "../someplayer.h"
6 #include "../track.h"
7 #include "../trackmetainformation.h"
8 #include "../playlist.h"
9 #include <phonon/MediaObject>
10 #include <phonon/AudioOutput>
11 #include <QStack>
12 #include <QQueue>
13
14 // represents player
15
16 using SomePlayer::DataObjects::Track;
17 using SomePlayer::DataObjects::TrackMetadata;
18 using SomePlayer::DataObjects::Playlist;
19
20 namespace SomePlayer {
21         namespace Playback {
22
23                 enum PlayerState { PLAYER_STOPPED, PLAYER_PLAYING, PLAYER_PAUSED, PLAYER_LOADING, PLAYER_DONE, PLAYER_ERROR };
24
25                 class Player : public QObject
26                 {
27                         Q_OBJECT
28                 public:
29                         explicit Player(QObject *parent = 0);
30
31                         bool random() {return _random;}
32                         bool repeat() {return _repeat;}
33                         Phonon::MediaObject* mediaObject() {return _player;}
34
35                 signals:
36                         void stateChanged (PlayerState);
37                         void trackChanged (Track);
38                         void tick (int, int); // played | all (seconds)
39                         void trackDone(Track);
40
41                 public slots:
42                         void setTrackId(int id);
43                         void enqueue(int id);
44                         void toggle();
45                         void play();
46                         void stop();
47                         void next();
48                         void prev();
49                         void setPlaylist(Playlist);
50                         void toggleRandom() {_random = !_random;}
51                         void toggleRepeat() {_repeat = !_repeat;}
52                         void seek(int);
53                 private slots:
54                         void _stateChanged(Phonon::State, Phonon::State);
55                         void _tick(qint64);
56                 private:
57                         int _current;
58                         Track _track; // current track (workaround)
59                         bool _random;
60                         bool _repeat;
61                         QStack<int> _history;
62                         QQueue<int> _queue;
63                         Playlist _playlist;
64                         Phonon::MediaObject *_player;
65                         Phonon::AudioOutput *_output;
66                         PlayerState _state;
67
68                         void _set_source();
69
70                 };
71         };
72 };
73
74 #endif // PLAYER_H