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("clientRevision","20100831.13");
52 header.insert("privacy",0);
53 header.insert("token",token->toAscii());
54 jlist.insert("method","getSearchResults");
55 jlist.insertMulti("header",header);
57 param.insert("type","Songs");
58 param.insert("query",song);
59 jlist.insertMulti("parameters",param);
60 QJson::Serializer *serializer = new QJson::Serializer();
61 //qDebug() << serializer->serialize(jlist);
62 manager->post(request,serializer->serialize(jlist));
63 currentaction = getSearchResults;
68 QStandardItemModel* gscom::getArtistModel(QString song)
70 model = new QStandardItemModel();
71 model->setHorizontalHeaderLabels(
72 QStringList() << "Searching..");
73 addDebugMsg("Fetching Song List...");
75 if(currentaction != none)
77 addDebugMsg("Error: communication is busy Try again later");
82 QString *token = getToken(getSearchResults);
83 qDebug() << token->toAscii();
84 QNetworkRequest request;
85 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
86 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
89 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
90 header.insert("session",phpSession->toUtf8());
91 header.insert("client","gslite");
92 header.insert("clientRevision","20100831.13");
93 header.insert("token",token->toAscii());
94 jlist.insert("method","getSearchResults");
95 jlist.insertMulti("header",header);
97 param.insert("type","Artists");
98 param.insert("query",song.toAscii());
99 jlist.insertMulti("parameters",param);
100 QJson::Serializer *serializer = new QJson::Serializer();
101 //qDebug() << serializer->serialize(jlist);
102 manager->post(request,serializer->serialize(jlist));
103 currentaction = getSearchResults;
108 QStandardItemModel* gscom::getAlbumModel(QString song)
110 model = new QStandardItemModel();
111 model->setHorizontalHeaderLabels(
112 QStringList() << "Searching..");
113 addDebugMsg("Fetching Song List...");
115 if(currentaction != none)
117 addDebugMsg("Error: communication is busy Try again later");
122 QString *token = getToken(getSearchResults);
123 qDebug() << token->toAscii();
124 QNetworkRequest request;
125 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getSearchResults"));
126 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
129 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
130 header.insert("session",phpSession->toUtf8());
131 header.insert("client","gslite");
132 header.insert("clientRevision","20100831.13");
133 header.insert("token",token->toAscii());
134 jlist.insert("method","getSearchResults");
135 jlist.insertMulti("header",header);
137 param.insert("type","Albums");
138 param.insert("query",song.toAscii());
139 jlist.insertMulti("parameters",param);
140 QJson::Serializer *serializer = new QJson::Serializer();
141 //qDebug() << serializer->serialize(jlist);
142 manager->post(request,serializer->serialize(jlist));
143 currentaction = getSearchResults;
148 void gscom::replyFinished(QNetworkReply *reply)
150 switch (currentaction)
152 case getStreamKeyFromSongIDEx:
154 qDebug() << "tester";
155 QJson::Parser parser;
157 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
159 qFatal("An error occurred during parsing");
162 QVariantMap results = result["result"].toMap();
163 this->streamID = results["streamKey"].toString();
164 this->sku = QUrl(QString("http://") + results["ip"].toString() + "/stream.php");
166 currentaction = none;
173 QList<QNetworkCookie> cookieList = cookies->cookiesForUrl(QUrl(QString("http://") + GS_LISTEN));
174 foreach(QNetworkCookie cookie, cookieList)
176 if(cookie.name() == "PHPSESSID")
178 phpSession = new QString(cookie.value());
179 qDebug() << QDateTime::currentDateTime();
180 qDebug() << cookie.expirationDate();
185 qDebug() << phpSession->toAscii();
187 currentaction = getCommunicationToken;
192 case getCommunicationToken:
195 QJson::Parser parser;
196 QVariantMap result = parser.parse(reply->readAll(),&ok).toMap();
198 qDebug("Error parsing request");
201 sessionKey = new QString(result["result"].toString());
202 qDebug() << sessionKey->toAscii();
205 currentaction = none;
207 emit finishedSearch();
210 case(getSearchResults):
212 QJson::Parser parser;
214 QVariantMap result = parser.parse (reply->readAll(), &ok).toMap();
216 qFatal("An error occurred during parsing");
219 if(result.contains("fault"))
221 currentaction = getPHP;
222 manager->get(QNetworkRequest(QUrl(QString("http://") + GS_LISTEN)));
223 qDebug() << reply->readAll();
229 model->setHorizontalHeaderLabels(
230 QStringList() << "Song"
235 foreach (QVariant plugin, result["result"].toList()) {
236 QList<QStandardItem *> items;
237 QVariantMap nestedMap = plugin.toMap();
238 items.append(new QStandardItem(nestedMap["Name"].toString()));
239 items.append(new QStandardItem(nestedMap["ArtistName"].toString()));
240 items.append(new QStandardItem(nestedMap["SongID"].toString()));
241 model->appendRow(items);
243 currentaction = none;
245 emit finishedSearch();
249 qDebug() << reply->readAll();
255 QStandardItemModel* gscom::getModel()
259 void gscom::addDebugMsg(QString debug)
261 QList<QStringList> rows = QList<QStringList>()
262 << (QStringList() << debug);
263 foreach (QStringList row, rows) {
264 QList<QStandardItem *> items;
265 foreach (QString text, row)
266 items.append(new QStandardItem(text));
267 model->appendRow(items);
271 void gscom::addProgressbar(QString debug)
273 QList<QStringList> rows = QList<QStringList>()
274 << (QStringList() << debug);
275 foreach (QStringList row, rows) {
276 QList<QStandardItem *> items;
277 foreach (QString text, row)
279 QLinearGradient gradient(0,0,250,0);
280 gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
281 gradient.setColorAt(0.9, QColor::fromRgbF(0, 1, 0, 1));
282 gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
283 QBrush brush(Qt::red);
284 QStandardItem *pBar = new QStandardItem(text);
285 pBar->setBackground(brush);
286 pBar->setSelectable(false);
289 model->appendRow(items);
293 QString* gscom::getToken(gMETHOD meth)
295 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Sha1);
296 //generate six random numbers
297 QString rnum = QString(qrand() %9 + 48)
298 + QString(qrand() %9 + 48)
299 + QString(qrand() %9 + 48)
300 + QString(qrand() %9 + 48)
301 + QString(qrand() %9 + 48)
302 + QString(qrand() %9 + 48);
303 QString *data = new QString();
304 QString *string = new QString();
307 case(getSearchResults):
308 data->append("getSearchResults");
310 case(getStreamKeyFromSongIDEx):
311 data->append("getStreamKeyFromSongIDEx");
314 data->append("getSearchResults");
316 string->append(data);
318 string->append(sessionKey->toAscii());
319 string->append(":quitStealinMahShit:");
320 string->append(rnum);
321 hasher->addData(string->toAscii());
322 QString *rs = new QString();
324 rs->append(hasher->result().toHex());
327 void gscom::getSong(QString songid)
329 if(currentaction != none)
335 QString *token = getToken(getStreamKeyFromSongIDEx);
336 qDebug() << token->toAscii();
337 QNetworkRequest request;
338 request.setUrl(QUrl("http://cowbell.grooveshark.com/more.php?getStreamKeyFromSongIdEx"));
339 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
342 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
343 header.insert("session",phpSession->toUtf8());
344 header.insert("client","gslite");
345 header.insert("clientRevision","20100831.13");
346 header.insert("token",token->toAscii());
347 jlist.insert("method","getStreamKeyFromSongIDEx");
348 jlist.insertMulti("header",header);
351 country.insert("CC1","0");
352 country.insert("CC3","0");
353 country.insert("ID","223");
354 country.insert("CC2","0");
355 country.insert("CC4","1073741824");
356 param.insertMulti("country",country);
357 param.insert("mobile",false);
358 param.insert("songID",songid.toAscii());
359 param.insert("prefetch",false);
360 jlist.insertMulti("parameters",param);
361 QJson::Serializer *serializer = new QJson::Serializer();
362 //qDebug() << serializer->serialize(jlist);
363 manager->post(request,serializer->serialize(jlist));
364 currentaction = getStreamKeyFromSongIDEx;
369 void gscom::getSessionKey()
371 QNetworkRequest request; // = new QNetworkRequest(QUrl("https://cowbell.grooveshark.com/service.php"));
372 request.setUrl(QUrl("https://cowbell.grooveshark.com/service.php"));
373 request.setHeader(request.ContentTypeHeader,QVariant("application/json"));
376 //header.insert("uuid","DEA8E133-2080-F666-4B38-9465187B20A9");
377 //header.insert("session",phpSession->toUtf8());
378 header.insert("client","gslite");
379 header.insert("clientRevision","20100831.13");
380 jlist.insert("method","getCommunicationToken");
381 jlist.insertMulti("header",header);
383 QCryptographicHash *hasher = new QCryptographicHash(QCryptographicHash::Md5);
384 hasher->addData(phpSession->toUtf8());
385 param.insert("secretKey",hasher->result().toHex());
386 jlist.insertMulti("parameters",param);
387 QJson::Serializer *serializer = new QJson::Serializer();
388 manager->post(request,serializer->serialize(jlist));