Cache prime/points widget (#20497)
* cache prime status on homescreen * use stacked widget * add caching and clear on 404pull/20494/head^2
parent
32330bbf89
commit
d43d625610
|
@ -16,6 +16,8 @@ cdef enum TxType:
|
||||||
keys = {
|
keys = {
|
||||||
b"AccessToken": [TxType.CLEAR_ON_MANAGER_START],
|
b"AccessToken": [TxType.CLEAR_ON_MANAGER_START],
|
||||||
b"ApiCache_DriveStats": [TxType.PERSISTENT],
|
b"ApiCache_DriveStats": [TxType.PERSISTENT],
|
||||||
|
b"ApiCache_Device": [TxType.PERSISTENT],
|
||||||
|
b"ApiCache_Owner": [TxType.PERSISTENT],
|
||||||
b"AthenadPid": [TxType.PERSISTENT],
|
b"AthenadPid": [TxType.PERSISTENT],
|
||||||
b"CalibrationParams": [TxType.PERSISTENT],
|
b"CalibrationParams": [TxType.PERSISTENT],
|
||||||
b"CarBatteryCapacity": [TxType.PERSISTENT],
|
b"CarBatteryCapacity": [TxType.PERSISTENT],
|
||||||
|
|
|
@ -133,16 +133,18 @@ void RequestRepeater::requestFinished(){
|
||||||
QString response = reply->readAll();
|
QString response = reply->readAll();
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
if (reply->error() == QNetworkReply::NoError) {
|
||||||
// save to cache
|
// save to cache
|
||||||
if (!cache_key.isEmpty()) {
|
if (!cache_key.isEmpty()) {
|
||||||
Params().write_db_value(cache_key.toStdString(), response.toStdString());
|
Params().write_db_value(cache_key.toStdString(), response.toStdString());
|
||||||
}
|
}
|
||||||
emit receivedResponse(response);
|
emit receivedResponse(response);
|
||||||
} else {
|
} else {
|
||||||
qDebug() << reply->errorString();
|
if (!cache_key.isEmpty()) {
|
||||||
|
Params().delete_db_value(cache_key.toStdString());
|
||||||
|
}
|
||||||
emit failedResponse(reply->errorString());
|
emit failedResponse(reply->errorString());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit failedResponse("network timeout");
|
emit timeoutResponse("timeout");
|
||||||
}
|
}
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
reply = NULL;
|
reply = NULL;
|
||||||
|
|
|
@ -51,4 +51,5 @@ private slots:
|
||||||
signals:
|
signals:
|
||||||
void receivedResponse(QString response);
|
void receivedResponse(QString response);
|
||||||
void failedResponse(QString errorString);
|
void failedResponse(QString errorString);
|
||||||
|
void timeoutResponse(QString errorString);
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QStackedLayout>
|
#include <QStackedWidget>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ PrimeUserWidget::PrimeUserWidget(QWidget* parent) : QWidget(parent) {
|
||||||
|
|
||||||
// TODO: only send the request when widget is shown
|
// TODO: only send the request when widget is shown
|
||||||
QString url = "https://api.commadotai.com/v1/devices/" + dongleId + "/owner";
|
QString url = "https://api.commadotai.com/v1/devices/" + dongleId + "/owner";
|
||||||
RequestRepeater* repeater = new RequestRepeater(this, url, 6);
|
RequestRepeater* repeater = new RequestRepeater(this, url, 6, "ApiCache_Owner");
|
||||||
QObject::connect(repeater, SIGNAL(receivedResponse(QString)), this, SLOT(replyFinished(QString)));
|
QObject::connect(repeater, SIGNAL(receivedResponse(QString)), this, SLOT(replyFinished(QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ PrimeAdWidget::PrimeAdWidget(QWidget* parent) : QWidget(parent) {
|
||||||
|
|
||||||
|
|
||||||
SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
|
SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
|
||||||
mainLayout = new QStackedLayout;
|
mainLayout = new QStackedWidget;
|
||||||
|
|
||||||
// Unpaired, registration prompt layout
|
// Unpaired, registration prompt layout
|
||||||
|
|
||||||
|
@ -214,7 +214,12 @@ SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
|
||||||
primeUser = new PrimeUserWidget;
|
primeUser = new PrimeUserWidget;
|
||||||
mainLayout->addWidget(primeUser);
|
mainLayout->addWidget(primeUser);
|
||||||
|
|
||||||
setLayout(mainLayout);
|
mainLayout->setCurrentWidget(primeAd);
|
||||||
|
|
||||||
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
|
layout->addWidget(mainLayout);
|
||||||
|
setLayout(layout);
|
||||||
|
|
||||||
setStyleSheet(R"(
|
setStyleSheet(R"(
|
||||||
SetupWidget {
|
SetupWidget {
|
||||||
background-color: #292929;
|
background-color: #292929;
|
||||||
|
@ -226,16 +231,23 @@ SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
|
||||||
}
|
}
|
||||||
)");
|
)");
|
||||||
|
|
||||||
|
// Retain size while hidden
|
||||||
|
QSizePolicy sp_retain = sizePolicy();
|
||||||
|
sp_retain.setRetainSizeWhenHidden(true);
|
||||||
|
setSizePolicy(sp_retain);
|
||||||
|
|
||||||
// set up API requests
|
// set up API requests
|
||||||
QString dongleId = QString::fromStdString(Params().get("DongleId"));
|
QString dongleId = QString::fromStdString(Params().get("DongleId"));
|
||||||
QString url = "https://api.commadotai.com/v1.1/devices/" + dongleId + "/";
|
QString url = "https://api.commadotai.com/v1.1/devices/" + dongleId + "/";
|
||||||
RequestRepeater* repeater = new RequestRepeater(this, url, 5);
|
RequestRepeater* repeater = new RequestRepeater(this, url, 5, "ApiCache_Device");
|
||||||
|
|
||||||
QObject::connect(repeater, SIGNAL(receivedResponse(QString)), this, SLOT(replyFinished(QString)));
|
QObject::connect(repeater, SIGNAL(receivedResponse(QString)), this, SLOT(replyFinished(QString)));
|
||||||
QObject::connect(repeater, SIGNAL(failedResponse(QString)), this, SLOT(parseError(QString)));
|
QObject::connect(repeater, SIGNAL(failedResponse(QString)), this, SLOT(parseError(QString)));
|
||||||
|
hide(); // Only show when first request comes back
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupWidget::parseError(QString response) {
|
void SetupWidget::parseError(QString response) {
|
||||||
|
show();
|
||||||
showQr = false;
|
showQr = false;
|
||||||
mainLayout->setCurrentIndex(0);
|
mainLayout->setCurrentIndex(0);
|
||||||
}
|
}
|
||||||
|
@ -246,6 +258,7 @@ void SetupWidget::showQrCode(){
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupWidget::replyFinished(QString response) {
|
void SetupWidget::replyFinished(QString response) {
|
||||||
|
show();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||||
if (doc.isNull()) {
|
if (doc.isNull()) {
|
||||||
qDebug() << "JSON Parse failed on getting pairing and prime status";
|
qDebug() << "JSON Parse failed on getting pairing and prime status";
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QStackedLayout>
|
#include <QStackedWidget>
|
||||||
|
#include <QVBoxLayout>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include "api.hpp"
|
#include "api.hpp"
|
||||||
|
@ -48,7 +49,7 @@ public:
|
||||||
explicit SetupWidget(QWidget* parent = 0);
|
explicit SetupWidget(QWidget* parent = 0);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStackedLayout* mainLayout;
|
QStackedWidget* mainLayout;
|
||||||
CommaApi* api;
|
CommaApi* api;
|
||||||
PrimeAdWidget *primeAd;
|
PrimeAdWidget *primeAd;
|
||||||
PrimeUserWidget *primeUser;
|
PrimeUserWidget *primeUser;
|
||||||
|
|
Loading…
Reference in New Issue