3 #include <serializer.h>
4 #include <QCryptographicHash>
5 //#include <QApplication>
6 #define CVERSION "20100831"
7 #define CLIENT "htmlshark"
11 manager = new QNetworkAccessManager(this);
12 connect(manager, SIGNAL(finished(QNetworkReply*)),
13 this, SLOT(replyFinished(QNetworkReply*)));
14 cookies = manager->cookieJar();
15 currentaction = getPHP;
16 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
17 phpSession = new QString("none");
18 sessionKey = new QString("none");
20 model = new QStandardItemModel();
21 model->setHorizontalHeaderLabels(
22 QStringList() << "Online");
23 addDebugMsg("You may now search for a song");
24 //addProgressbar("test");
28 QStandardItemModel* gscom::getSongModel(QString song)
30 model = new QStandardItemModel();
31 model->setHorizontalHeaderLabels(
32 QStringList() << "Searching..");
33 addDebugMsg("Fetching Song List...");
35 if(currentaction != none)
37 addDebugMsg("Error: communication is busy Try again later");
42 QString *token = getToken(getSearchResults);
43 qDebug() << token->toAscii();
44 QNetworkRequest request;
45 request.setUrl(QUrl("http://listen.grooveshark.com/more.php?getSearchResults"));
46 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
49 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
50 header.insert("session",phpSession->toUtf8());
51 header.insert("client",CLIENT);
52 //header.insert("clientRevision","20100412.09");
53 header.insert("clientRevision",CVERSION);
54 header.insert("privacy",0);
55 header.insert("token",token->toAscii());
56 jlist.insert("method","getSearchResults");
57 jlist.insertMulti("header",header);
59 param.insert("type","Songs");
60 param.insert("query",song);
61 jlist.insertMulti("parameters",param);
62 QJson::Serializer *serializer = new QJson::Serializer();
63 //qDebug() << serializer->serialize(jlist);
64 manager->post(request,serializer->serialize(jlist));
65 currentaction = getSearchResults;
70 QStandardItemModel* gscom::getArtistModel(QString song)
72 model = new QStandardItemModel();
73 model->setHorizontalHeaderLabels(
74 QStringList() << "Searching..");
75 addDebugMsg("Fetching Song List...");
77 if(currentaction != none)
79 addDebugMsg("Error: communication is busy Try again later");
84 QString *token = getToken(getSearchResults);
85 qDebug() << token->toAscii();
86 QNetworkRequest request;
87 request.setUrl(QUrl("http://listen.grooveshark.com/more.php?getSearchResults"));
88 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
91 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
92 header.insert("session",phpSession->toUtf8());
93 header.insert("client",CLIENT);
94 header.insert("clientRevision",CVERSION);
95 header.insert("token",token->toAscii());
96 jlist.insert("method","getSearchResults");
97 jlist.insertMulti("header",header);
99 param.insert("type","Artists");
100 param.insert("query",song.toAscii());
101 jlist.insertMulti("parameters",param);
102 QJson::Serializer *serializer = new QJson::Serializer();
103 //qDebug() << serializer->serialize(jlist);
104 manager->post(request,serializer->serialize(jlist));
105 currentaction = getSearchResults;
110 QStandardItemModel* gscom::getAlbumModel(QString song)
112 model = new QStandardItemModel();
113 model->setHorizontalHeaderLabels(
114 QStringList() << "Searching..");
115 addDebugMsg("Fetching Song List...");
117 if(currentaction != none)
119 addDebugMsg("Error: communication is busy Try again later");
124 QString *token = getToken(getSearchResults);
125 qDebug() << token->toAscii();
126 QNetworkRequest request;
127 request.setUrl(QUrl("http://listen.grooveshark.com/more.php?getSearchResults"));
128 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
131 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
132 header.insert("session",phpSession->toUtf8());
133 header.insert("client",CLIENT);
134 header.insert("clientRevision",CVERSION);
135 header.insert("token",token->toAscii());
136 jlist.insert("method","getSearchResults");
137 jlist.insertMulti("header",header);
139 param.insert("type","Albums");
140 param.insert("query",song.toAscii());
141 jlist.insertMulti("parameters",param);
142 QJson::Serializer *serializer = new QJson::Serializer();
143 //qDebug() << serializer->serialize(jlist);
144 manager->post(request,serializer->serialize(jlist));
145 currentaction = getSearchResults;
150 void gscom::replyFinished(QNetworkReply *reply)
152 switch (currentaction)
154 case getTokenForForSong:
156 qDebug() << "Recieved a Token Packet!";
157 QJson::Parser parser;
159 QByteArray array = reply->readAll();
161 QVariantMap result = parser.parse (array, &ok).toMap();
163 qFatal("An error occurred during parsing");
166 QVariantMap results = result["result"].toMap();
167 this->songToken = results["Token"].toString();
168 qDebug() << this->songToken;
169 currentaction = none;
173 case getStreamKeyFromSongIDEx:
175 qDebug() << "Recieved a Stream Packet";
176 QJson::Parser parser;
178 QByteArray array = reply->readAll();
180 QVariantMap result = parser.parse (array, &ok).toMap();
182 qFatal("An error occurred during parsing");
185 QVariantMap results = result["result"].toMap();
186 this->streamID = results["streamKey"].toString();
187 this->sku = QUrl(QString("http://") + results["ip"].toString() + "/stream.php");
188 //qDebug() << results;
190 currentaction = none;
197 QList<QNetworkCookie> cookieList = cookies->cookiesForUrl(QUrl(QString("http://") + GS_LISTEN));
198 foreach(QNetworkCookie cookie, cookieList)
200 if(cookie.name() == "PHPSESSID")
202 phpSession = new QString(cookie.value());
203 qDebug() << QDateTime::currentDateTime();
204 qDebug() << cookie.expirationDate();
209 qDebug() << phpSession->toAscii();
211 currentaction = getCommunicationToken;
216 case getCommunicationToken:
219 QJson::Parser parser;
220 QByteArray array = reply->readAll();
222 QVariantMap result = parser.parse(array,&ok).toMap();
224 qDebug("Error parsing request");
227 sessionKey = new QString(result["result"].toString());
228 qDebug() << sessionKey->toAscii();
231 currentaction = none;
233 emit finishedSearch();
236 case(getSearchResults):
238 QJson::Parser parser;
240 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
242 qFatal("An error occurred during parsing");
245 if(result.contains("fault"))
247 currentaction = getPHP;
248 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
249 qDebug() << reply->readAll();
255 model->setHorizontalHeaderLabels(
256 QStringList() << "Song"
261 foreach (QVariant plugin, result["result"].toList()) {
262 QList<QStandardItem *> items;
263 QVariantMap nestedMap = plugin.toMap();
264 items.append(new QStandardItem(nestedMap["Name"].toString()));
265 items.append(new QStandardItem(nestedMap["ArtistName"].toString()));
266 items.append(new QStandardItem(nestedMap["SongID"].toString()));
267 model->appendRow(items);
269 currentaction = none;
271 emit finishedSearch();
275 qDebug() << reply->readAll();
281 QStandardItemModel* gscom::getModel()
285 void gscom::addDebugMsg(QString debug)
287 QList<QStringList> rows = QList<QStringList>()
288 << (QStringList() << debug);
289 foreach (QStringList row, rows) {
290 QList<QStandardItem *> items;
291 foreach (QString text, row)
292 items.append(new QStandardItem(text));
293 model->appendRow(items);
297 void gscom::addProgressbar(QString debug)
299 QList<QStringList> rows = QList<QStringList>()
300 << (QStringList() << debug);
301 foreach (QStringList row, rows) {
302 QList<QStandardItem *> items;
303 foreach (QString text, row)
305 QLinearGradient gradient(0,0,250,0);
306 gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
307 gradient.setColorAt(0.9, QColor::fromRgbF(0, 1, 0, 1));
308 gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
309 QBrush brush(Qt::red);
310 QStandardItem *pBar = new QStandardItem(text);
311 pBar->setBackground(brush);
312 pBar->setSelectable(false);
315 model->appendRow(items);
319 QString* gscom::getToken(gMETHOD meth)
321 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Sha1);
322 //generate six random numbers
323 QString rnum = QString(qrand() %9 + 48)
324 + QString(qrand() %9 + 48)
325 + QString(qrand() %9 + 48)
326 + QString(qrand() %9 + 48)
327 + QString(qrand() %9 + 48)
328 + QString(qrand() %9 + 48);
329 QString *data = new QString();
330 QString *string = new QString();
333 case(getSearchResults):
334 data->append("getSearchResults");
336 case(getTokenForForSong):
337 data->append("getTokenForForSong");
339 case(getStreamKeyFromSongIDEx):
340 data->append("getStreamKeyFromSongIDEx");
343 data->append("getSearchResults");
345 string->append(data);
347 string->append(sessionKey->toAscii());
348 string->append(":quitStealinMahShit:");
349 string->append(rnum);
350 hasher->addData(string->toAscii());
351 QString *rs = new QString();
353 rs->append(hasher->result().toHex());
356 void gscom::getSong(QString songid)
358 if(currentaction != none)
364 QString *token = getToken(getStreamKeyFromSongIDEx);
365 qDebug() << token->toAscii();
366 QNetworkRequest request;
367 request.setUrl(QUrl("http://listen.grooveshark.com/more.php?getStreamKeyFromSongIDEx"));
368 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
372 country.insert("CC1","0");
373 country.insert("CC3","0");
374 country.insert("ID","223");
375 country.insert("CC2","0");
376 country.insert("CC4","1073741824");
377 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
378 header.insert("session",phpSession->toUtf8());
379 header.insert("client","jsqueue");
380 header.insert("clientRevision","20101012.37");
381 header.insert("token",token->toAscii());
382 header.insertMulti("country",country);
383 jlist.insert("method","getStreamKeyFromSongIDEx");
384 jlist.insertMulti("header",header);
386 param.insertMulti("country",country);
387 param.insert("mobile",false);
388 param.insert("songID",songid.toAscii());
389 param.insert("prefetch",false);
390 jlist.insertMulti("parameters",param);
391 QJson::Serializer *serializer = new QJson::Serializer();
392 //qDebug() << serializer->serialize(jlist);
393 manager->post(request,serializer->serialize(jlist));
394 currentaction = getStreamKeyFromSongIDEx;
399 void gscom::getSessionKey()
401 QNetworkRequest request; // = new QNetworkRequest(QUrl("https://listen.grooveshark.com/service.php"));
402 request.setUrl(QUrl("https://listen.grooveshark.com/more.php"));
403 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
406 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
407 //header.insert("session",phpSession->toUtf8());
408 header.insert("client",CLIENT);
409 header.insert("clientRevision",CVERSION);
410 jlist.insert("method","getCommunicationToken");
411 jlist.insertMulti("header",header);
413 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Md5);
414 hasher->addData(phpSession->toUtf8());
415 param.insert("secretKey",hasher->result().toHex());
416 jlist.insertMulti("parameters",param);
417 QJson::Serializer *serializer = new QJson::Serializer();
418 manager->post(request,serializer->serialize(jlist));