Add a stop button
[groove] / splayer.cpp
1 #include "splayer.h"
2 #include <QFile>
3 sPlayer::sPlayer(QObject *parent) :
4     QObject(parent)
5 {
6     manager = new QNetworkAccessManager();
7     buffer = new QBuffer();
8     audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory,this);
9     media = new Phonon::MediaObject(this);
10     Phonon::createPath(media, audioOutput);
11     playing = false;
12     //reply = new QNetworkReply();
13     internal = parent;
14     //buffer->open(QIODevice::ReadWrite);
15 }
16 sPlayer::~sPlayer()
17 {
18     manager->~QNetworkAccessManager();
19     //reply->~QIODevice();
20     buffer->~QBuffer();
21     media->~MediaNode();
22 }
23
24 void sPlayer::play(QString StreamKey,QUrl server)
25 {
26     if(playing)
27     {
28         //reply->abort();
29     }
30
31     QNetworkRequest req;
32     req.setUrl(server);
33     qDebug() << server;
34     req.setHeader(req.ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));
35     reply = manager->post(req,QString("streamKey=" + StreamKey.toAscii()).toAscii());
36     buffer->open(buffer->ReadWrite | buffer->Truncate);
37     connect(reply,SIGNAL(finished()),this,SLOT(start()));
38     connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64)));
39     media->stop();
40     playing = false;
41     startStreamT = QTime::currentTime();
42 }
43 void sPlayer::start()
44 {
45     QVariant url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
46     if(url.toUrl().isValid())
47     {
48         QNetworkRequest req;
49         req.setUrl(url.toUrl());
50         qDebug() << url;
51         reply = manager->get(req);
52         connect(reply,SIGNAL(finished()),this,SLOT(start()));
53         connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64)));
54     }
55     else
56     {
57         if(!playing)
58         {
59             playing = true;
60             media->setCurrentSource(Phonon::MediaSource(buffer));
61             media->play();
62             qDebug() << "Playing";
63         }
64     }
65     /*else
66     {
67         media->stop();
68         buffer->close();
69         buffer->open(QIODevice::ReadWrite | QIODevice::Truncate);
70         buffer->write(reply->readAll());
71         reply->close();
72         media->setCurrentSource(Phonon::MediaSource(buffer));
73         media->play();
74     }*/
75 }
76 void sPlayer::stop()
77 {
78     media->stop();
79 }
80
81 void sPlayer::putb(qint64 b, qint64 t)
82 {
83     //qDebug() << "Download: " << b << "Total: " << t;
84     if(b == 0 && t == 0)
85     {
86         QVariant url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
87         if(url.toUrl().isValid())
88         {
89             QNetworkRequest req;
90             req.setUrl(url.toUrl());
91             qDebug() << url;
92             reply = manager->get(req);
93             connect(reply,SIGNAL(finished()),this,SLOT(start()));
94             connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(putb(qint64,qint64)));
95         }
96         else
97         {
98             //buffer->close();
99             reply->close();
100         }
101     }
102     else
103     {
104
105         buffer->buffer().append(reply->readAll());
106         //qDebug() << buffer->bytesAvailable();
107         if(playing)
108         {
109             StreamIO* stream = (StreamIO*) media->currentSource().stream();
110             stream->setStreamSize(buffer->size());
111         }
112
113         /*
114         //buffer->seek(b);
115         qint64 last = buffer->pos();
116         buffer->seek(buffer->bytesAvailable()+buffer->pos());
117         qDebug() << buffer->write(reply->readAll());
118         qDebug() << buffer->pos();
119         //buffer->putChar()
120         buffer->seek(last);
121         //buffer->data().append(reply->readAll());*/
122         //qDebug() << "Download speed (KB/S): " << b/(startStreamT.msecsTo(QTime::currentTime()) + 1)*100/1024;
123         if ( b >= t*0.05 && !playing && b/(startStreamT.msecsTo(QTime::currentTime()) + 1)*100/1024 >= 35)
124         {
125             playing = true;
126             //Start playback at 25% download
127             media->setCurrentSource(Phonon::MediaSource(buffer));
128             media->play();
129             qDebug() << "Playing";
130         }
131     }
132 }