void CAudioScrobbler::Handshake() { std::string username=""; for(unsigned int i = 0; i < Config->getLUsername().length(); i++) { username.append(1, tolower(Config->getLUsername().c_str()[i])); } std::string authtoken(md5sum((char*)"%s%s", username.c_str(), Config->getLPassword().c_str())); std::ostringstream query, sig; query << "method=auth.getMobileSession&username="******"&authToken=" << authtoken << "&api_key=" << APIKEY; sig << "api_key" << APIKEY << "authToken" << authtoken << "methodauth.getMobileSessionusername" << Config->getLUsername() << SECRET; std::string sighash(md5sum((char*)"%s", sig.str().c_str())); query << "&api_sig=" << sighash; OpenURL(ROOTURL, query.str().c_str()); if(_response.find("<lfm status=\"ok\">") != std::string::npos) { size_t start, end; start = _response.find("<key>") + 5; end = _response.find("</key>"); _sessionid = _response.substr(start, end-start); iprintf("%s%s", "Last.fm handshake successful. SessionID: ", _sessionid.c_str()); _authed = true; } else if(_response.find("<lfm status=\"failed\">") != std::string::npos) { CheckFailure(_response); exit(EXIT_FAILURE); } CLEANUP(); }
bool CAudioScrobbler::Scrobble(centry_t* entry) { bool retval = false; if(!_authed) { eprintf("Handshake hasn't been done yet."); Handshake(); return retval; } iprintf("Scrobbling: %s - %s", entry->artist.c_str(), entry->title.c_str()); OpenURL(ROOTURL, CreateScrobbleMessage(0, entry).c_str()); if(_response.find("<lfm status=\"ok\">") != std::string::npos) { iprintf("%s", "Scrobbled successfully."); retval = true; } else if(_response.find("<lfm status=\"failed\">") != std::string::npos) { eprintf("%s%s", "Last.fm returned an error while scrobbling:\n", _response.c_str()); if(CheckFailure(_response)) Failure(); } CLEANUP(); return retval; }
/** * \fn UPNPScanner::replyFinished(void) * Validates network responses against known requests and parses expected * responses for the required data. */ void UPNPScanner::replyFinished(QNetworkReply *reply) { if (!reply) return; QUrl url = reply->url(); bool valid = reply->error() == QNetworkReply::NoError; if (!valid) { LOG(VB_UPNP, LOG_ERR, LOC + QString("Network request for '%1' returned error '%2'") .arg(url.toString()).arg(reply->errorString())); } bool description = false; bool browse = false; m_lock.lock(); if (m_descriptionRequests.contains(url, reply)) { m_descriptionRequests.remove(url, reply); description = true; } else if (m_browseRequests.contains(url, reply)) { m_browseRequests.remove(url, reply); browse = true; } m_lock.unlock(); if (browse && valid) { ParseBrowse(url, reply); // a complete scan is event driven, so trigger the next browse BrowseNextContainer(); } else if (description) { if (!valid || (valid && !ParseDescription(url, reply))) { // if there will be no more attempts, update the logs CheckFailure(url); // try again ScheduleUpdate(); } } else LOG(VB_UPNP, LOG_ERR, LOC + "Received unknown reply"); reply->deleteLater(); }
bool CAudioScrobbler::SendNowPlaying(mpd_Song* song) { bool retval = false; if(!song || !song->artist || !song->title) return retval; char* artist = curl_easy_escape(_handle, song->artist, 0); char* title = curl_easy_escape(_handle, song->title, 0); char* album = 0; if(song->album) album = curl_easy_escape(_handle, song->album, 0); std::ostringstream query, sig; query << "method=track.updateNowPlaying&track=" << title << "&artist=" << artist << "&duration=" << song->time << "&api_key=" << APIKEY << "&sk=" << _sessionid; if(album) { query << "&album=" << album; sig << "album" << song->album; } curl_free(artist); curl_free(title); curl_free(album); sig << "api_key" << APIKEY << "artist" << song->artist << "duration" << song->time << "methodtrack.updateNowPlaying" << "sk" << _sessionid << "track" << song->title << SECRET; std::string sighash(md5sum((char*)"%s", sig.str().c_str())); query << "&api_sig=" << sighash; OpenURL(ROOTURL, query.str().c_str()); if(_response.find("<lfm status=\"ok\">") != std::string::npos) { iprintf("%s", "Updated \"Now Playing\" status successfully."); retval = true; } else if(_response.find("<lfm status=\"failed\">") != std::string::npos) { eprintf("%s%s", "Last.fm returned an error while updating the currently playing track:\n", _response.c_str()); if(CheckFailure(_response)) Failure(); } CLEANUP(); return retval; }
void UtestShell::assertTrueText(bool condition, const char *checkString, const char *conditionString, const char* text, const char *fileName, int lineNumber, const TestTerminator& testTerminator) { getTestResult()->countCheck(); if (!condition) failWith(CheckFailure(this, fileName, lineNumber, checkString, conditionString, text), testTerminator); }
void Utest::assertTrue(bool condition, const char * checkString, const char* conditionString, const char* fileName, int lineNumber) { getTestResult()->countCheck(); if (!condition) failWith(CheckFailure(this, fileName, lineNumber, checkString, conditionString)); }