Fixed bug with order of queued tracks and prev-historied tracks
[someplayer] / src / player / player.h
index 78e5ff4..a2fdbf7 100644 (file)
@@ -2,19 +2,25 @@
 #define PLAYER_H
 
 #include <QObject>
 #define PLAYER_H
 
 #include <QObject>
-#include "someplayer.h"
-#include "track.h"
+#include "../someplayer.h"
+#include "../track.h"
+#include "../trackmetainformation.h"
+#include "../playlist.h"
 #include <phonon/MediaObject>
 #include <phonon/AudioOutput>
 #include <phonon/MediaObject>
 #include <phonon/AudioOutput>
+#include <QStack>
+#include <QQueue>
 
 // represents player
 
 using SomePlayer::DataObjects::Track;
 
 // represents player
 
 using SomePlayer::DataObjects::Track;
+using SomePlayer::DataObjects::TrackMetadata;
+using SomePlayer::DataObjects::Playlist;
 
 namespace SomePlayer {
        namespace Playback {
 
 
 namespace SomePlayer {
        namespace Playback {
 
-               enum PlayerState { PLAYER_STOPPED, PLAYER_PLAYING, PLAYER_PAUSED, PLAYER_LOADING, PLAYER_DONE };
+               enum PlayerState { PLAYER_STOPPED, PLAYER_PLAYING, PLAYER_PAUSED, PLAYER_LOADING, PLAYER_DONE, PLAYER_ERROR };
 
                class Player : public QObject
                {
 
                class Player : public QObject
                {
@@ -22,22 +28,46 @@ namespace SomePlayer {
                public:
                        explicit Player(QObject *parent = 0);
 
                public:
                        explicit Player(QObject *parent = 0);
 
+                       bool random() {return _random;}
+                       bool repeat() {return _repeat;}
+                       Phonon::MediaObject* mediaObject() {return _player;}
+
                signals:
                        void stateChanged (PlayerState);
                signals:
                        void stateChanged (PlayerState);
+                       void trackChanged (Track);
                        void tick (int, int); // played | all (seconds)
                        void tick (int, int); // played | all (seconds)
+                       void trackDone(Track);
 
                public slots:
 
                public slots:
-                       void setTrack(Track&);
+                       void setTrackId(int id);
+                       void enqueue(int id);
+                       void toggle();
                        void play();
                        void play();
-                       void pause();
                        void stop();
                        void stop();
+                       void next();
+                       void prev();
+                       void setPlaylist(Playlist);
+                       void toggleRandom() {_random = !_random;}
+                       void toggleRepeat() {_repeat = !_repeat;}
+                       void seek(int);
                private slots:
                        void _stateChanged(Phonon::State, Phonon::State);
                        void _tick(qint64);
                private:
                private slots:
                        void _stateChanged(Phonon::State, Phonon::State);
                        void _tick(qint64);
                private:
-                       Track _current_track;
+                       int _current;
+                       Track _track; // current track (workaround)
+                       bool _random;
+                       bool _repeat;
+                       QStack<int> _history;
+                       QQueue<int> _queue;
+                       QStack<int> _prev_history;
+                       Playlist _playlist;
                        Phonon::MediaObject *_player;
                        Phonon::MediaObject *_player;
-                       void _create_player();
+                       Phonon::AudioOutput *_output;
+                       PlayerState _state;
+
+                       void _set_source();
+
                };
        };
 };
                };
        };
 };