void Updater::setUpdateAvailable(bool available) { if (m_updateAvailable == available) return; m_updateAvailable = available; emit updateAvailableChanged(); }
void FirmwareDownloader::checkForNewFirmware() { QString platformString; switch (m_pebble->hardwareRevision()) { case HardwareRevisionUNKNOWN: case HardwareRevisionTINTIN_EV1: case HardwareRevisionTINTIN_EV2: case HardwareRevisionTINTIN_EV2_3: case HardwareRevisionSNOWY_EVT2: case HardwareRevisionSPALDING_EVT: case HardwareRevisionTINTIN_BB: case HardwareRevisionTINTIN_BB2: case HardwareRevisionSNOWY_BB: case HardwareRevisionSNOWY_BB2: case HardwareRevisionSPALDING_BB2: qWarning() << "Hardware revision not supported for firmware upgrades" << m_pebble->hardwareRevision(); return; case HardwareRevisionTINTIN_EV2_4: platformString = "ev2_4"; break; case HardwareRevisionTINTIN_V1_5: platformString = "v1_5"; break; case HardwareRevisionBIANCA: platformString = "v2_0"; break; case HardwareRevisionSNOWY_DVT: platformString = "snowy_dvt"; break; case HardwareRevisionBOBBY_SMILES: platformString = "snowy_s3"; break; case HardwareRevisionSPALDING: platformString = "spalding"; break; } QString url("https://pebblefw.s3.amazonaws.com/pebble/%1/%2/latest.json"); url = url.arg(platformString).arg("release-v3.8"); qDebug() << "fetching firmware info:" << url; QNetworkRequest request(url); QNetworkReply *reply = m_nam->get(request); connect(reply, &QNetworkReply::finished, [this, reply]() { QJsonParseError error; QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error); qDebug() << "firmware info reply:" << jsonDoc.toJson(); if (error.error != QJsonParseError::NoError) { qWarning() << "Error parsing firmware fetch reply" << jsonDoc.toJson(QJsonDocument::Indented); return; } QVariantMap resultMap = jsonDoc.toVariant().toMap(); if (!resultMap.contains("normal")) { qWarning() << "Could not find normal firmware package" << jsonDoc.toJson(QJsonDocument::Indented); return; } qDebug() << "current:" << m_pebble->softwareVersion() << "candidate:" << resultMap.value("normal").toMap().value("friendlyVersion").toString(); FirmwareVersion baseline("v3.0.0"); FirmwareVersion current(m_pebble->softwareVersion()); FirmwareVersion candidate(resultMap.value("normal").toMap().value("friendlyVersion").toString()); QVariantMap targetFirmware; if (resultMap.contains("3.x-migration") && baseline > current) { targetFirmware = resultMap.value("3.x-migration").toMap(); } else if (current > baseline && candidate > current){ targetFirmware = resultMap.value("normal").toMap(); } if (targetFirmware.isEmpty()) { qDebug() << "Watch firmware is up to date"; m_updateAvailable = false; emit updateAvailableChanged(); return; } qDebug() << targetFirmware; m_candidateVersion = targetFirmware.value("friendlyVersion").toString(); m_releaseNotes = targetFirmware.value("notes").toString(); m_url = targetFirmware.value("url").toString(); m_hash = targetFirmware.value("sha-256").toByteArray(); m_updateAvailable = true; qDebug() << "candidate firmware upgrade" << m_candidateVersion << m_releaseNotes << m_url; emit updateAvailableChanged(); }); }