X-Git-Url: http://git.maemo.org/git/?p=groove;a=blobdiff_plain;f=splayer.cpp;h=f6352c853c9aeb838ce168d051a83c65dcf1183a;hp=0509b3e387d2ef9894496b80a736b39432c3dc2c;hb=21d90a736479e9eb1615db46297dca25115d5ea0;hpb=b7de84bdd106700e348771f0b897240161cb55ec diff --git a/splayer.cpp b/splayer.cpp index 0509b3e..f6352c8 100644 --- a/splayer.cpp +++ b/splayer.cpp @@ -1,4 +1,4 @@ -#include "splayer.h" +#include "mpgplayer.h" #include sPlayer::sPlayer(QObject *parent) : QObject(parent) @@ -12,121 +12,124 @@ sPlayer::sPlayer(QObject *parent) : //reply = new QNetworkReply(); internal = parent; //buffer->open(QIODevice::ReadWrite); + connect(media,SIGNAL(finished()),this,SLOT(markComplete())); + media->setTickInterval(200); + connect(media,SIGNAL(tick(qint64)),this,SLOT(updatePlayPosition(qint64))); } -sPlayer::~sPlayer() +void sPlayer::setPlaylist(playlist *playList) { - manager->~QNetworkAccessManager(); - //reply->~QIODevice(); - buffer->~QBuffer(); - media->~MediaNode(); + this->pl = playList; + connect(pl,SIGNAL(bufferReady(int)),this,SLOT(start(int))); + connect(pl,SIGNAL(downloadProgress(int,qint64,qint64)),this,SLOT(putb(int,qint64,qint64))); + //connect(pl,SIGNAL(downloadComplete(int)),this,SLOT(start(int))); + +} +void sPlayer::markComplete() +{ + pl->markPlayed(pl->currentplaying()); + if(pl->existAt(pl->currentplaying()+1)) + { + pl->setCurrentPlaying(pl->currentplaying()+1); + if(pl->bReady(pl->currentplaying())) + this->start(pl->currentplaying()); + } + else + pl->setCurrentPlaying(-1); +} +void sPlayer::updatePlayPosition(qint64 time) +{ + //qDebug() << time << ":" << media->totalTime(); } -void sPlayer::play(QString StreamKey,QUrl server) +void sPlayer::pause() +{ + if(media->state() == Phonon::PausedState) + media->play(); + if(media->state() == Phonon::PlayingState) + media->pause(); +} +void sPlayer::playNext() { - if(playing) + if(pl->existAt(pl->currentplaying()+1)) { - //reply->abort(); + media->stop(); + this->markComplete(); } +} - QNetworkRequest req; - req.setUrl(server); - qDebug() << server; - req.setHeader(req.ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); - reply = manager->post(req,QString("streamKey=" + StreamKey.toAscii()).toAscii()); - buffer->open(buffer->ReadWrite | buffer->Truncate); - connect(reply,SIGNAL(finished()),this,SLOT(start())); - connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64))); - media->stop(); - playing = false; - startStreamT = QTime::currentTime(); +sPlayer::~sPlayer() +{ + manager->~QNetworkAccessManager(); + //reply->~QIODevice(); + media->~MediaNode(); } -void sPlayer::start() +void sPlayer::back() { - QVariant url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if(url.toUrl().isValid()) + media->stop(); + if(pl->existAt(pl->currentplaying()-1)) { - QNetworkRequest req; - req.setUrl(url.toUrl()); - qDebug() << url; - reply = manager->get(req); - connect(reply,SIGNAL(finished()),this,SLOT(start())); - connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64))); + pl->setCurrentPlaying(pl->currentplaying()-1); + if(pl->bReady(pl->currentplaying())) + this->start(pl->currentplaying()); } else - { - if(!playing) + pl->setCurrentPlaying(-1); +} + +void sPlayer::abortDownload() +{ + //pd->hide(); + //reply->abort(); +} + +void sPlayer::start(int p) +{ + qDebug() << "got start play"; + if(p == pl->currentplaying()) { playing = true; - media->setCurrentSource(Phonon::MediaSource(buffer)); + media->setCurrentSource(Phonon::MediaSource(pl->getBuffer(p))); media->play(); qDebug() << "Playing"; } - } - /*else + +} +void sPlayer::play() +{ + if(pl->currentplaying() != -1) { - media->stop(); - buffer->close(); - buffer->open(QIODevice::ReadWrite | QIODevice::Truncate); - buffer->write(reply->readAll()); - reply->close(); - media->setCurrentSource(Phonon::MediaSource(buffer)); - media->play(); - }*/ + //pl->setCurrentPlaying(pl->findFirstNotPlayed()); + } + else + return; +} +void sPlayer::play(int p) +{ + if(pl->currentplaying() != -1) + pl->freeMemory(pl->currentplaying()); + pl->setCurrentPlaying(p); + //pl->beginDownload(p); } + void sPlayer::stop() { + media->stop(); + if(pl->currentplaying() != -1) + pl->markPlayed(pl->currentplaying()); + pl->setCurrentPlaying(-1); + playing = false; } -void sPlayer::putb(qint64 b, qint64 t) +void sPlayer::putb(int p, qint64 b, qint64 t) { //qDebug() << "Download: " << b << "Total: " << t; - if(b == 0 && t == 0) + if(p == pl->currentplaying()) { - QVariant url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if(url.toUrl().isValid()) - { - QNetworkRequest req; - req.setUrl(url.toUrl()); - qDebug() << url; - reply = manager->get(req); - connect(reply,SIGNAL(finished()),this,SLOT(start())); - connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64))); - } - else - { - //buffer->close(); - reply->close(); - } - } - else - { - - buffer->buffer().append(reply->readAll()); - //qDebug() << buffer->bytesAvailable(); - if(playing) + if(pl->bReady(p)) { StreamIO* stream = (StreamIO*) media->currentSource().stream(); - stream->setStreamSize(buffer->size()); - } - - /* - //buffer->seek(b); - qint64 last = buffer->pos(); - buffer->seek(buffer->bytesAvailable()+buffer->pos()); - qDebug() << buffer->write(reply->readAll()); - qDebug() << buffer->pos(); - //buffer->putChar() - buffer->seek(last); - //buffer->data().append(reply->readAll());*/ - //qDebug() << "Download speed (KB/S): " << b/(startStreamT.msecsTo(QTime::currentTime()) + 1)*100/1024; - if ( b >= t*0.05 && !playing && b/(startStreamT.msecsTo(QTime::currentTime()) + 1)*100/1024 >= 35) - { - playing = true; - //Start playback at 25% download - media->setCurrentSource(Phonon::MediaSource(buffer)); - media->play(); - qDebug() << "Playing"; + stream->setStreamSize(pl->getBuffer(p)->size()); } } }