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");
25 QStandardItemModel* gscom::getSongModel(QString song)
27 model = new QStandardItemModel();
28 model->setHorizontalHeaderLabels(
29 QStringList() << "Searching..");
30 addDebugMsg("Fetching Song List...");
32 if(currentaction != none)
34 addDebugMsg("Error: communication is busy Try again later");
39 QString *token = getToken(getSearchResults);
40 qDebug() << token->toAscii();
41 QNetworkRequest request;
42 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
43 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
46 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
47 header.insert("session",phpSession->toUtf8());
48 header.insert("client","gslite");
49 header.insert("clientRevision","20100412.09");
50 header.insert("token",token->toAscii());
51 jlist.insert("method","getSearchResults");
52 jlist.insertMulti("header",header);
54 param.insert("type","Songs");
55 param.insert("query",song.toAscii());
56 jlist.insertMulti("parameters",param);
57 QJson::Serializer *serializer = new QJson::Serializer();
58 //qDebug() << serializer->serialize(jlist);
59 manager->post(request,serializer->serialize(jlist));
60 currentaction = getSearchResults;
65 QStandardItemModel* gscom::getArtistModel(QString song)
67 model = new QStandardItemModel();
68 model->setHorizontalHeaderLabels(
69 QStringList() << "Searching..");
70 addDebugMsg("Fetching Song List...");
72 if(currentaction != none)
74 addDebugMsg("Error: communication is busy Try again later");
79 QString *token = getToken(getSearchResults);
80 qDebug() << token->toAscii();
81 QNetworkRequest request;
82 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
83 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
86 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
87 header.insert("session",phpSession->toUtf8());
88 header.insert("client","gslite");
89 header.insert("clientRevision","20100412.09");
90 header.insert("token",token->toAscii());
91 jlist.insert("method","getSearchResults");
92 jlist.insertMulti("header",header);
94 param.insert("type","Artists");
95 param.insert("query",song.toAscii());
96 jlist.insertMulti("parameters",param);
97 QJson::Serializer *serializer = new QJson::Serializer();
98 //qDebug() << serializer->serialize(jlist);
99 manager->post(request,serializer->serialize(jlist));
100 currentaction = getSearchResults;
105 QStandardItemModel* gscom::getAlbumModel(QString song)
107 model = new QStandardItemModel();
108 model->setHorizontalHeaderLabels(
109 QStringList() << "Searching..");
110 addDebugMsg("Fetching Song List...");
112 if(currentaction != none)
114 addDebugMsg("Error: communication is busy Try again later");
119 QString *token = getToken(getSearchResults);
120 qDebug() << token->toAscii();
121 QNetworkRequest request;
122 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
123 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
126 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
127 header.insert("session",phpSession->toUtf8());
128 header.insert("client","gslite");
129 header.insert("clientRevision","20100412.09");
130 header.insert("token",token->toAscii());
131 jlist.insert("method","getSearchResults");
132 jlist.insertMulti("header",header);
134 param.insert("type","Albums");
135 param.insert("query",song.toAscii());
136 jlist.insertMulti("parameters",param);
137 QJson::Serializer *serializer = new QJson::Serializer();
138 //qDebug() << serializer->serialize(jlist);
139 manager->post(request,serializer->serialize(jlist));
140 currentaction = getSearchResults;
145 void gscom::replyFinished(QNetworkReply *reply)
147 switch (currentaction)
149 case getStreamKeyFromSongIDEx:
151 qDebug() << "tester";
152 QJson::Parser parser;
154 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
156 qFatal("An error occurred during parsing");
159 QVariantMap results = result["result"].toMap();
160 this->streamID = results["streamKey"].toString();
161 this->sku = QUrl(QString("http://") + results["ip"].toString() + "/stream.php");
163 currentaction = none;
170 QList<QNetworkCookie> cookieList = cookies->cookiesForUrl(QUrl(QString("http://") + GS_LISTEN));
171 foreach(QNetworkCookie cookie, cookieList)
173 if(cookie.name() == "PHPSESSID")
175 phpSession = new QString(cookie.value());
180 qDebug() << phpSession->toAscii();
182 currentaction = getCommunicationToken;
187 case getCommunicationToken:
190 QJson::Parser parser;
191 QVariantMap result = parser.parse(reply->readAll(),&ok).toMap();
193 qDebug("Error parsing request");
196 sessionKey = new QString(result["result"].toString());
197 qDebug() << sessionKey->toAscii();
199 currentaction = none;
201 emit finishedSearch();
204 case(getSearchResults):
206 QJson::Parser parser;
208 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
210 qFatal("An error occurred during parsing");
213 if(result.contains("fault"))
215 currentaction = getPHP;
216 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
217 qDebug() << reply->readAll();
222 model->setHorizontalHeaderLabels(
223 QStringList() << "Song"
228 foreach (QVariant plugin, result["result"].toList()) {
229 QList<QStandardItem *> items;
230 QVariantMap nestedMap = plugin.toMap();
231 items.append(new QStandardItem(nestedMap["Name"].toString()));
232 items.append(new QStandardItem(nestedMap["ArtistName"].toString()));
233 items.append(new QStandardItem(nestedMap["SongID"].toString()));
234 model->appendRow(items);
236 currentaction = none;
238 emit finishedSearch();
242 qDebug() << reply->readAll();
248 QStandardItemModel* gscom::getModel()
252 void gscom::addDebugMsg(QString debug)
254 QList<QStringList> rows = QList<QStringList>()
255 << (QStringList() << debug);
256 foreach (QStringList row, rows) {
257 QList<QStandardItem *> items;
258 foreach (QString text, row)
259 items.append(new QStandardItem(text));
260 model->appendRow(items);
264 QString* gscom::getToken(gMETHOD meth)
266 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Sha1);
267 //generate six random numbers
268 QString rnum = QString(qrand() %9 + 48)
269 + QString(qrand() %9 + 48)
270 + QString(qrand() %9 + 48)
271 + QString(qrand() %9 + 48)
272 + QString(qrand() %9 + 48)
273 + QString(qrand() %9 + 48);
274 QString *data = new QString();
275 QString *string = new QString();
278 case(getSearchResults):
279 data->append("getSearchResults");
281 case(getStreamKeyFromSongIDEx):
282 data->append("getStreamKeyFromSongIDEx");
285 data->append("getSearchResults");
287 string->append(data);
289 string->append(sessionKey->toAscii());
290 string->append(":quitStealinMahShit:");
291 string->append(rnum);
292 hasher->addData(string->toAscii());
293 QString *rs = new QString();
295 rs->append(hasher->result().toHex());
298 void gscom::getSong(QString songid)
300 if(currentaction != none)
306 QString *token = getToken(getStreamKeyFromSongIDEx);
307 qDebug() << token->toAscii();
308 QNetworkRequest request;
309 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getStreamKeyFromSongIdEx"));
310 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
313 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
314 header.insert("session",phpSession->toUtf8());
315 header.insert("client","gslite");
316 header.insert("clientRevision","20100412.09");
317 header.insert("token",token->toAscii());
318 jlist.insert("method","getStreamKeyFromSongIDEx");
319 jlist.insertMulti("header",header);
322 country.insert("CC1","0");
323 country.insert("CC3","0");
324 country.insert("ID","223");
325 country.insert("CC2","0");
326 country.insert("CC4","1073741824");
327 param.insertMulti("country",country);
328 param.insert("mobile",false);
329 param.insert("songID",songid.toAscii());
330 param.insert("prefetch",false);
331 jlist.insertMulti("parameters",param);
332 QJson::Serializer *serializer = new QJson::Serializer();
333 //qDebug() << serializer->serialize(jlist);
334 manager->post(request,serializer->serialize(jlist));
335 currentaction = getStreamKeyFromSongIDEx;
340 void gscom::getSessionKey()
342 QNetworkRequest request; // = new QNetworkRequest(QUrl("https://cowbell.grooveshark.com/service.php"));
343 request.setUrl(QUrl("https://cowbell.grooveshark.com/service.php"));
344 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
347 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
348 //header.insert("session",phpSession->toUtf8());
349 header.insert("client","gslite");
350 header.insert("clientRevision","20100412.09");
351 jlist.insert("method","getCommunicationToken");
352 jlist.insertMulti("header",header);
354 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Md5);
355 hasher->addData(phpSession->toUtf8());
356 param.insert("secretKey",hasher->result().toHex());
357 jlist.insertMulti("parameters",param);
358 QJson::Serializer *serializer = new QJson::Serializer();
359 manager->post(request,serializer->serialize(jlist));