/** Callback for the firmware download result */ void DeviceWidget::downloadFinished() { disconnect(m_dfu, SIGNAL(downloadFinished()), this, SLOT(downloadFinished())); disconnect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); // Now save the result (use the utility function from OP_DFU) m_dfu->SaveByteArrayToFile(filename, downloadedFirmware); emit downloadEnded(true); status("Download successful", STATUSICON_OK); updateButtons(true); }
/** Retrieves the firmware from the device */ void DeviceWidget::downloadFirmware() { // clear progress bar now // this avoids displaying an error message and the progress at 100% at the same time setProgress(0); updateButtons(false); if (!m_dfu->devices[deviceID].Readable) { myDevice->statusLabel->setText(QString("Device not readable!")); status("Device not readable!", STATUSICON_FAIL); updateButtons(true); return; } filename = setSaveFileName(); if (filename.isEmpty()) { status("Empty filename", STATUSICON_FAIL); updateButtons(true); return; } status("Starting firmware download", STATUSICON_RUNNING); emit downloadStarted(); connect(m_dfu, SIGNAL(progressUpdated(int)), this, SLOT(setProgress(int))); connect(m_dfu, SIGNAL(downloadFinished()), this, SLOT(downloadFinished())); downloadedFirmware.clear(); // Empty the byte array bool ret = m_dfu->DownloadFirmware(&downloadedFirmware,deviceID); if (!ret) { emit downloadEnded(false); status("Could not start download!", STATUSICON_FAIL); updateButtons(true); return; } status("Downloading, please wait...", STATUSICON_RUNNING); return; }
bool WithingsDownload::getBodyMeasures(QString &error, QDateTime from, QDateTime to, QList<BodyMeasure> &data) { response = ""; QString strNokiaToken = ""; QString strNokiaRefreshToken = ""; QString access_token = ""; strNokiaToken = appsettings->cvalue(context->athlete->cyclist, GC_NOKIA_TOKEN).toString(); strNokiaRefreshToken = appsettings->cvalue(context->athlete->cyclist, GC_NOKIA_REFRESH_TOKEN).toString(); if(strNokiaRefreshToken.isEmpty() || strNokiaRefreshToken == "" || strNokiaRefreshToken == "0" ) { #ifdef Q_OS_MACX #define GC_PREF tr("Golden Cheetah->Preferences") #else #define GC_PREF tr("Tools->Options") #endif QString advise = QString(tr("Error fetching OAuth credentials. Please make sure to complete the Withings authorization procedure found under %1.")).arg(GC_PREF); QMessageBox oautherr(QMessageBox::Critical, tr("OAuth Error"), advise); oautherr.exec(); return false; } if(!strNokiaRefreshToken.isEmpty()) { printd("OAuth 2.0 API\n"); #if QT_VERSION > 0x050000 QUrlQuery postData; #else QUrl postData; #endif QString refresh_token = appsettings->cvalue(context->athlete->cyclist, GC_NOKIA_REFRESH_TOKEN).toString(); postData.addQueryItem("grant_type", "refresh_token"); postData.addQueryItem("client_id", GC_NOKIA_CLIENT_ID ); postData.addQueryItem("client_secret", GC_NOKIA_CLIENT_SECRET ); postData.addQueryItem("refresh_token", refresh_token ); QUrl url = QUrl( "https://account.withings.com/oauth2/token" ); emit downloadStarted(100); QNetworkRequest request(url); request.setRawHeader("Content-Type", "application/x-www-form-urlencoded"); nam->post(request, postData.toString(QUrl::FullyEncoded).toUtf8()); printd("url %s %s\n", url.toString().toStdString().c_str(), postData.toString().toStdString().c_str()); // blocking request loop.exec(); // we go on after receiving the data in SLOT(onRequestReady(QByteArray)) printd("response: %s\n", response.toStdString().c_str()); if (response.contains("\"access_token\"", Qt::CaseInsensitive)) { QJsonParseError parseResult; QJsonDocument migrateJson = QJsonDocument::fromJson(response.toUtf8(), &parseResult); access_token = migrateJson.object()["access_token"].toString(); QString refresh_token = migrateJson.object()["refresh_token"].toString(); QString userid = QString("%1").arg(migrateJson.object()["userid"].toInt()); if (access_token != "") appsettings->setCValue(context->athlete->cyclist, GC_NOKIA_TOKEN, access_token); if (refresh_token != "") appsettings->setCValue(context->athlete->cyclist, GC_NOKIA_REFRESH_TOKEN, refresh_token); if (userid != "") appsettings->setCValue(context->athlete->cyclist, GC_WIUSER, userid); #if QT_VERSION > 0x050000 QUrlQuery params; #else QUrl params; #endif emit downloadStarted(100); params.addQueryItem("action", "getmeas"); //params.addQueryItem("userid", userid); params.addQueryItem("access_token", access_token); params.addQueryItem("startdate", QString::number(from.toMSecsSinceEpoch()/1000)); params.addQueryItem("enddate", QString::number(to.toMSecsSinceEpoch()/1000)); QUrl url = QUrl( "https://wbsapi.withings.net/measure?" + params.toString() ); printd("URL: %s\n", url.url().toStdString().c_str()); QNetworkRequest request(url); //request.setRawHeader("Authorization", QString("Bearer %1").arg(access_token).toLatin1()); nam->get(request); emit downloadProgress(50); // blocking request loop.exec(); // we go on after receiving the data in SLOT(onRequestReady(QByteArray)) emit downloadEnded(100); } } printd("response: %s\n", response.toStdString().c_str()); QJsonParseError parseResult; if (response.contains("\"status\":0", Qt::CaseInsensitive)) { parseResult = parse(response, data); } else { QMessageBox oautherr(QMessageBox::Critical, tr("Error"), tr("There was an error during fetching. Please check the error description.")); oautherr.setDetailedText(response); // probably blank oautherr.exec(); return false; } if (QJsonParseError::NoError != parseResult.error) { QMessageBox oautherr(QMessageBox::Critical, tr("Error"), tr("Error parsing Withings API response. Please check the error description.")); QString errorStr = parseResult.errorString() + " at offset " + QString::number(parseResult.offset); error = errorStr.simplified(); oautherr.setDetailedText(error); oautherr.exec(); return false; }; return true; }