X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=splayer.cpp;h=a59899db8516909d25f4cc58cd2c0cedb1df0085;hb=3d2215fbcef83e5dab6fe003c67846dd72ca3989;hp=0509b3e387d2ef9894496b80a736b39432c3dc2c;hpb=b7de84bdd106700e348771f0b897240161cb55ec;p=groove diff --git a/splayer.cpp b/splayer.cpp index 0509b3e..a59899d 100644 --- a/splayer.cpp +++ b/splayer.cpp @@ -12,121 +12,104 @@ sPlayer::sPlayer(QObject *parent) : //reply = new QNetworkReply(); internal = parent; //buffer->open(QIODevice::ReadWrite); + connect(media,SIGNAL(finished()),this,SLOT(markComplete())); } -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::play(QString StreamKey,QUrl server) +} +void sPlayer::markComplete() { - if(playing) + pl->markPlayed(pl->currentplaying()); + if(pl->existAt(pl->currentplaying()+1)) { - //reply->abort(); + pl->setCurrentPlaying(pl->currentplaying()+1); + if(pl->bReady(pl->currentplaying())) + this->start(pl->currentplaying()); } - - 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(); + else + pl->setCurrentPlaying(-1); } -void sPlayer::start() +void sPlayer::pause() { - QVariant url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if(url.toUrl().isValid()) + if(media->state() == Phonon::PausedState) + media->play(); + if(media->state() == Phonon::PlayingState) + media->pause(); +} +void sPlayer::playNext() +{ + 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))); + media->stop(); + this->markComplete(); } - else - { - if(!playing) +} + +sPlayer::~sPlayer() +{ + manager->~QNetworkAccessManager(); + //reply->~QIODevice(); + media->~MediaNode(); +} +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()); } } }