X-Git-Url: http://git.maemo.org/git/?p=someplayer;a=blobdiff_plain;f=src%2Fplayer%2Fplayer.cpp;h=05d37cd65d86cb542974eb9d43938082cc4440f2;hp=577a4dc002cd1ea94595657fac1ac2870a7bf1d3;hb=68e7e55646f7caf47dd678a5f2f51644ddacd751;hpb=b0e8612b3fe8ff513f9c63637c4a546a4a0cea58 diff --git a/src/player/player.cpp b/src/player/player.cpp index 577a4dc..05d37cd 100644 --- a/src/player/player.cpp +++ b/src/player/player.cpp @@ -1,8 +1,28 @@ +/* + * SomePlayer - An alternate music player for Maemo 5 + * Copyright (C) 2010 Nikolay (somebody) Tischenko + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + #include "player.h" #include using namespace SomePlayer::Playback; using namespace SomePlayer::DataObjects; +using namespace SomePlayer::Storage; Player::Player(QObject *parent) : QObject(parent) @@ -15,8 +35,8 @@ Player::Player(QObject *parent) : Phonon::createPath(_player, _output); int seed = reinterpret_cast (_player); qsrand(seed); - _random = false; - _repeat = false; + _random = _config.getValue("playback/random").toBool(); + _repeat = _config.getValue("playback/repeat").toBool(); _current = -1; } @@ -56,6 +76,8 @@ void Player::next() { _history.push(_current % count); if (!_queue.isEmpty()) { _current = _queue.dequeue(); + } else if (!_prev_history.isEmpty()) { + _current = _prev_history.pop(); } else { if (_random) { _current = (count + (qrand() + qrand() + qrand()) % count) % count; @@ -82,7 +104,7 @@ void Player::_set_source() { void Player::prev() { if (_history.count() > 0) { - _queue.push_front(_current); + _prev_history.push(_current); _current = _history.pop(); _track = _playlist.tracks().at(_current); } @@ -90,7 +112,7 @@ void Player::prev() { play(); } -void Player::_stateChanged(Phonon::State newState, Phonon::State oldState) { +void Player::_stateChanged(Phonon::State newState, Phonon::State /*oldState*/) { switch (newState) { case Phonon::PlayingState: if (_state == PLAYER_LOADING) { @@ -131,6 +153,8 @@ void Player::_tick(qint64 ticks) { void Player::setPlaylist(Playlist playlist) { _playlist = playlist; _history.clear(); + _prev_history.clear(); + _queue.clear(); } void Player::seek(int s) { @@ -138,6 +162,8 @@ void Player::seek(int s) { } void Player::play() { + if (_playlist.tracks().isEmpty()) + return; _state = PLAYER_PLAYING; emit stateChanged(_state); if (_current == -1) { @@ -151,3 +177,17 @@ void Player::play() { void Player::enqueue(int id) { _queue.enqueue(id); } + +void Player::toggleRandom() { + _random = !_random; + _config.setValue("playback/random", _random); +} + +void Player::toggleRepeat() { + _repeat = !_repeat; + _config.setValue("playback/repeat", _repeat); +} + +void Player::setVolume(int v) { + _output->setVolume(v*0.01); +}