3 #include <serializer.h>
4 #include <QCryptographicHash>
5 //#include <QApplication>
9 manager = new QNetworkAccessManager(this);
10 connect(manager, SIGNAL(finished(QNetworkReply*)),
11 this, SLOT(replyFinished(QNetworkReply*)));
12 cookies = manager->cookieJar();
13 currentaction = getPHP;
14 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
15 phpSession = new QString("none");
16 sessionKey = new QString("none");
18 model = new QStandardItemModel();
19 model->setHorizontalHeaderLabels(
20 QStringList() << "Online");
21 addDebugMsg("You may now search for a song");
22 //addProgressbar("test");
26 QStandardItemModel* gscom::getSongModel(QString song)
28 model = new QStandardItemModel();
29 model->setHorizontalHeaderLabels(
30 QStringList() << "Searching..");
31 addDebugMsg("Fetching Song List...");
33 if(currentaction != none)
35 addDebugMsg("Error: communication is busy Try again later");
40 QString *token = getToken(getSearchResults);
41 qDebug() << token->toAscii();
42 QNetworkRequest request;
43 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
44 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
47 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
48 header.insert("session",phpSession->toUtf8());
49 header.insert("client","gslite");
50 header.insert("clientRevision","20100412.09");
51 header.insert("token",token->toAscii());
52 jlist.insert("method","getSearchResults");
53 jlist.insertMulti("header",header);
55 param.insert("type","Songs");
56 param.insert("query",song.toAscii());
57 jlist.insertMulti("parameters",param);
58 QJson::Serializer *serializer = new QJson::Serializer();
59 //qDebug() << serializer->serialize(jlist);
60 manager->post(request,serializer->serialize(jlist));
61 currentaction = getSearchResults;
66 QStandardItemModel* gscom::getArtistModel(QString song)
68 model = new QStandardItemModel();
69 model->setHorizontalHeaderLabels(
70 QStringList() << "Searching..");
71 addDebugMsg("Fetching Song List...");
73 if(currentaction != none)
75 addDebugMsg("Error: communication is busy Try again later");
80 QString *token = getToken(getSearchResults);
81 qDebug() << token->toAscii();
82 QNetworkRequest request;
83 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
84 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
87 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
88 header.insert("session",phpSession->toUtf8());
89 header.insert("client","gslite");
90 header.insert("clientRevision","20100412.09");
91 header.insert("token",token->toAscii());
92 jlist.insert("method","getSearchResults");
93 jlist.insertMulti("header",header);
95 param.insert("type","Artists");
96 param.insert("query",song.toAscii());
97 jlist.insertMulti("parameters",param);
98 QJson::Serializer *serializer = new QJson::Serializer();
99 //qDebug() << serializer->serialize(jlist);
100 manager->post(request,serializer->serialize(jlist));
101 currentaction = getSearchResults;
106 QStandardItemModel* gscom::getAlbumModel(QString song)
108 model = new QStandardItemModel();
109 model->setHorizontalHeaderLabels(
110 QStringList() << "Searching..");
111 addDebugMsg("Fetching Song List...");
113 if(currentaction != none)
115 addDebugMsg("Error: communication is busy Try again later");
120 QString *token = getToken(getSearchResults);
121 qDebug() << token->toAscii();
122 QNetworkRequest request;
123 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
124 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
127 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
128 header.insert("session",phpSession->toUtf8());
129 header.insert("client","gslite");
130 header.insert("clientRevision","20100412.09");
131 header.insert("token",token->toAscii());
132 jlist.insert("method","getSearchResults");
133 jlist.insertMulti("header",header);
135 param.insert("type","Albums");
136 param.insert("query",song.toAscii());
137 jlist.insertMulti("parameters",param);
138 QJson::Serializer *serializer = new QJson::Serializer();
139 //qDebug() << serializer->serialize(jlist);
140 manager->post(request,serializer->serialize(jlist));
141 currentaction = getSearchResults;
146 void gscom::replyFinished(QNetworkReply *reply)
148 switch (currentaction)
150 case getStreamKeyFromSongIDEx:
152 qDebug() << "tester";
153 QJson::Parser parser;
155 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
157 qFatal("An error occurred during parsing");
160 QVariantMap results = result["result"].toMap();
161 this->streamID = results["streamKey"].toString();
162 this->sku = QUrl(QString("http://") + results["ip"].toString() + "/stream.php");
164 currentaction = none;
171 QList<QNetworkCookie> cookieList = cookies->cookiesForUrl(QUrl(QString("http://") + GS_LISTEN));
172 foreach(QNetworkCookie cookie, cookieList)
174 if(cookie.name() == "PHPSESSID")
176 phpSession = new QString(cookie.value());
181 qDebug() << phpSession->toAscii();
183 currentaction = getCommunicationToken;
188 case getCommunicationToken:
191 QJson::Parser parser;
192 QVariantMap result = parser.parse(reply->readAll(),&ok).toMap();
194 qDebug("Error parsing request");
197 sessionKey = new QString(result["result"].toString());
198 qDebug() << sessionKey->toAscii();
200 currentaction = none;
202 emit finishedSearch();
205 case(getSearchResults):
207 QJson::Parser parser;
209 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
211 qFatal("An error occurred during parsing");
214 if(result.contains("fault"))
216 currentaction = getPHP;
217 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
218 qDebug() << reply->readAll();
223 model->setHorizontalHeaderLabels(
224 QStringList() << "Song"
229 foreach (QVariant plugin, result["result"].toList()) {
230 QList<QStandardItem *> items;
231 QVariantMap nestedMap = plugin.toMap();
232 items.append(new QStandardItem(nestedMap["Name"].toString()));
233 items.append(new QStandardItem(nestedMap["ArtistName"].toString()));
234 items.append(new QStandardItem(nestedMap["SongID"].toString()));
235 model->appendRow(items);
237 currentaction = none;
239 emit finishedSearch();
243 qDebug() << reply->readAll();
249 QStandardItemModel* gscom::getModel()
253 void gscom::addDebugMsg(QString debug)
255 QList<QStringList> rows = QList<QStringList>()
256 << (QStringList() << debug);
257 foreach (QStringList row, rows) {
258 QList<QStandardItem *> items;
259 foreach (QString text, row)
260 items.append(new QStandardItem(text));
261 model->appendRow(items);
265 void gscom::addProgressbar(QString debug)
267 QList<QStringList> rows = QList<QStringList>()
268 << (QStringList() << debug);
269 foreach (QStringList row, rows) {
270 QList<QStandardItem *> items;
271 foreach (QString text, row)
273 QLinearGradient gradient(0,0,250,0);
274 gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
275 gradient.setColorAt(0.9, QColor::fromRgbF(0, 1, 0, 1));
276 gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
277 QBrush brush(Qt::red);
278 QStandardItem *pBar = new QStandardItem(text);
279 pBar->setBackground(brush);
280 pBar->setSelectable(false);
283 model->appendRow(items);
287 QString* gscom::getToken(gMETHOD meth)
289 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Sha1);
290 //generate six random numbers
291 QString rnum = QString(qrand() %9 + 48)
292 + QString(qrand() %9 + 48)
293 + QString(qrand() %9 + 48)
294 + QString(qrand() %9 + 48)
295 + QString(qrand() %9 + 48)
296 + QString(qrand() %9 + 48);
297 QString *data = new QString();
298 QString *string = new QString();
301 case(getSearchResults):
302 data->append("getSearchResults");
304 case(getStreamKeyFromSongIDEx):
305 data->append("getStreamKeyFromSongIDEx");
308 data->append("getSearchResults");
310 string->append(data);
312 string->append(sessionKey->toAscii());
313 string->append(":quitStealinMahShit:");
314 string->append(rnum);
315 hasher->addData(string->toAscii());
316 QString *rs = new QString();
318 rs->append(hasher->result().toHex());
321 void gscom::getSong(QString songid)
323 if(currentaction != none)
329 QString *token = getToken(getStreamKeyFromSongIDEx);
330 qDebug() << token->toAscii();
331 QNetworkRequest request;
332 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getStreamKeyFromSongIdEx"));
333 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
336 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
337 header.insert("session",phpSession->toUtf8());
338 header.insert("client","gslite");
339 header.insert("clientRevision","20100412.09");
340 header.insert("token",token->toAscii());
341 jlist.insert("method","getStreamKeyFromSongIDEx");
342 jlist.insertMulti("header",header);
345 country.insert("CC1","0");
346 country.insert("CC3","0");
347 country.insert("ID","223");
348 country.insert("CC2","0");
349 country.insert("CC4","1073741824");
350 param.insertMulti("country",country);
351 param.insert("mobile",false);
352 param.insert("songID",songid.toAscii());
353 param.insert("prefetch",false);
354 jlist.insertMulti("parameters",param);
355 QJson::Serializer *serializer = new QJson::Serializer();
356 //qDebug() << serializer->serialize(jlist);
357 manager->post(request,serializer->serialize(jlist));
358 currentaction = getStreamKeyFromSongIDEx;
363 void gscom::getSessionKey()
365 QNetworkRequest request; // = new QNetworkRequest(QUrl("https://cowbell.grooveshark.com/service.php"));
366 request.setUrl(QUrl("https://cowbell.grooveshark.com/service.php"));
367 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
370 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
371 //header.insert("session",phpSession->toUtf8());
372 header.insert("client","gslite");
373 header.insert("clientRevision","20100412.09");
374 jlist.insert("method","getCommunicationToken");
375 jlist.insertMulti("header",header);
377 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Md5);
378 hasher->addData(phpSession->toUtf8());
379 param.insert("secretKey",hasher->result().toHex());
380 jlist.insertMulti("parameters",param);
381 QJson::Serializer *serializer = new QJson::Serializer();
382 manager->post(request,serializer->serialize(jlist));