Player factory
[someplayer] / src / player / player.cpp
index 52f0ad2..81c2525 100644 (file)
@@ -41,7 +41,7 @@ inline QList<Track> __sub(QList<Track> one, QList<Track> two, Track three) {
 }
 
 Player::Player(QObject *parent) :
-    QObject(parent)
+    AbstractPlayer(parent)
 {
        _awaiting_seek = false;
        _player = new Phonon::MediaObject(this);
@@ -71,9 +71,12 @@ Player::Player(QObject *parent) :
        qsrand(seed);
        _random = _config.getValue("playback/random").toBool();
        _repeat = (RepeatRule) _config.getValue("playback/repeat").toInt();
+       _state = PLAYER_DONE;
 }
 
 void Player::setTrackId(int id) {
+       id = id < 0 ? 0 : id;
+       id = id >= _playlist.tracks().size() ? _playlist.tracks().size()-1 : id;
        _to_history(_track);
        _track = _playlist.tracks().at(id);
        _set_source();
@@ -132,6 +135,7 @@ void Player::next() {
                if (pos >= _playlist.tracks().count()) {
                        if (_repeat == REPEAT_NO) {
                                stop();
+                               return;
                        }
                        pos %= _playlist.tracks().count();
                }
@@ -164,8 +168,6 @@ void Player::_set_source() {
 
 void Player::prev() {
        if (_history.isEmpty()) {
-               _set_source();
-               play();
                return;
        }
        _queue.push_front(_track);
@@ -340,3 +342,31 @@ void Player::_truncate_history() {
 Player::~Player() {
        stop();
 }
+
+QString Player::stateText() {
+       QString return_val;
+       switch (_state) {
+       case PLAYER_PLAYING:
+               return_val = "playing";
+               break;
+       case PLAYER_STOPPED:
+               return_val = "stopped";
+               break;
+       case PLAYER_PAUSED:
+               return_val = "paused";
+               break;
+       case PLAYER_DONE:
+               return_val = "idle";
+               break;
+       case PLAYER_LOADING:
+               return_val = "idle";
+               break;
+       case PLAYER_ERROR:
+               return_val = "error";
+               break;
+       default:
+               return_val = "unhandled";
+               break;
+       }
+       return return_val;
+}