void InfoLastFM::albumInfo(QString artist, QString album, long reqId, int itype) { if(httpGetId) { QList<QVariant> item; item << artist; item << album; item << (long long int)reqId; item << itype; stack << item; return; } requestId = reqId; infoType = itype; if(proxy->hasVariable("proxyEnabled") && proxy->getVariable("proxyEnabled") == "true") { http.setProxy(proxy->getVariable("proxyHost"), proxy->getVariable("proxyPort").toInt(), proxy->getVariable("proxyUser"), proxy->getVariable("proxyPassword")); } QUrl url("http://ws.audioscrobbler.com/2.0/"); url.addQueryItem("method", "album.getinfo"); url.addQueryItem("artist", artist); url.addQueryItem("album", album); url.addQueryItem("api_key", apiKey); if(proxy->hasVariable("lang")) { url.addQueryItem("lang", proxy->getVariable("lang")); } needInfo = true; http.setHost(url.host(), QHttp::ConnectionModeHttp, 80); httpGetId = http.get(QString(url.toEncoded())); }
void LibreFM::submission(QString artist, QString title, int time, QString album, int sec, QString src, QString rating, int track, QString mb) { if(sec < 30 || (QDateTime::currentDateTime().toTime_t() - time) < (sec/2)) { proxy->log(QString("sec %1").arg(QString::number(sec))); proxy->log(QString("time %1").arg(QString::number(QDateTime::currentDateTime().toTime_t() - time))); return; } if(!connected || httpPostId) { handshake(librefmUser, librefmPassword); QList<QVariant> item; item << artist; item << title; item << time; item << album; item << sec; item << src; item << rating; item << track; item << mb; stack << item; return; } if(proxy->hasVariable("proxyEnabled") && proxy->getVariable("proxyEnabled") == "true") { http.setProxy(proxy->getVariable("proxyHost"), proxy->getVariable("proxyPort").toInt(), proxy->getVariable("proxyUser"), proxy->getVariable("proxyPassword")); } QUrl u(submissionUrl); QUrl url(""); url.addQueryItem("s", session); url.addQueryItem("a[0]", artist); url.addQueryItem("t[0]", title); url.addQueryItem("i[0]", QString::number(time)); url.addQueryItem("o[0]", src); url.addQueryItem("r[0]", rating); url.addQueryItem("l[0]", QString::number(sec)); url.addQueryItem("b[0]", album); url.addQueryItem("n[0]", QString::number(track)); url.addQueryItem("m[0]", mb); QHttp::ConnectionMode mode = u.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp; http.setHost(u.host(), mode, u.port(80)); QHttpRequestHeader header(QLatin1String("POST"), QString(u.toEncoded())); header.setValue(QLatin1String("Connection"), QLatin1String("Keep-Alive")); header.setValue(QLatin1String("Host"), u.host().toLatin1()); header.setContentLength(url.toString().toUtf8().remove(0,1).size()); header.setContentType(QLatin1String("application/x-www-form-urlencoded")); httpPostId = http.request(header, url.toString().toUtf8().remove(0,1)); }
void LibreFM::nowplaying(QString artist, QString title, QString album, int sec, int track, QString mb) { if(!connected || httpPostId) { handshake(librefmUser, librefmPassword); QList<QVariant> item; item << artist; item << title; item << album; item << sec; item << track; item << mb; stack << item; return; } if(proxy->hasVariable("proxyEnabled") && proxy->getVariable("proxyEnabled") == "true") { http.setProxy(proxy->getVariable("proxyHost"), proxy->getVariable("proxyPort").toInt(), proxy->getVariable("proxyUser"), proxy->getVariable("proxyPassword")); } QUrl u(nowPlayingUrl); QUrl url(""); url.addQueryItem("s", session); url.addQueryItem("a", artist); url.addQueryItem("t", title); url.addQueryItem("b", album); url.addQueryItem("l", QString::number(sec)); url.addQueryItem("n", QString::number(track)); url.addQueryItem("m", mb); QHttp::ConnectionMode mode = u.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp; http.setHost(u.host(), mode, u.port(80)); QHttpRequestHeader header(QLatin1String("POST"), QString(u.toEncoded())); header.setValue(QLatin1String("Connection"), QLatin1String("Keep-Alive")); header.setValue(QLatin1String("Host"), u.host().toLatin1()); header.setContentLength(url.toString().toUtf8().remove(0,1).size()); header.setContentType(QLatin1String("application/x-www-form-urlencoded")); httpPostId = http.request(header, url.toString().toUtf8().remove(0,1)); }
void LibreFM::handshake(QString user, QString password) { if(connected || delayed) return; if(httpPostId) { QList<QVariant> item; stack << item; return; } if(proxy->hasVariable("proxyEnabled") && proxy->getVariable("proxyEnabled") == "true") { http.setProxy(proxy->getVariable("proxyHost"), proxy->getVariable("proxyPort").toInt(), proxy->getVariable("proxyUser"), proxy->getVariable("proxyPassword")); } try_count ++; if(try_count > 3) { delayed = true; QTimer::singleShot(300000, this, SLOT(timerConnect())); // 5 minutes before continue return; } uint time = QDateTime::currentDateTime().toTime_t(); QCryptographicHash cr_p(QCryptographicHash::Md5); cr_p.addData(password.toLocal8Bit()); QCryptographicHash cr(QCryptographicHash::Md5); cr.addData((QString(cr_p.result().toHex())+QString::number(time)).toLocal8Bit()); QString token = QString(cr.result().toHex()); QUrl url("http://"+HOST+"/?"); url.addQueryItem("hs", "true"); url.addQueryItem("p", "1.2.1"); url.addQueryItem("c", "cub"); url.addQueryItem("v", CUBEROK_VERSION); url.addQueryItem("u", user); url.addQueryItem("t", QString::number(time)); url.addQueryItem("a", token); http.setHost(HOST, QHttp::ConnectionModeHttp, 80); httpGetId = http.get(QString(url.toEncoded())); }