예제 #1
0
void Updater::setUpdateAvailable(bool available)
{
    if (m_updateAvailable == available)
        return;

    m_updateAvailable = available;
    emit updateAvailableChanged();
}
예제 #2
0
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();
    });
}