Cache prime/points widget (#20497)

* cache prime status on homescreen

* use stacked widget

* add caching and clear on 404
pull/20494/head^2
Willem Melching 2021-03-26 14:53:12 +01:00 committed by GitHub
parent 32330bbf89
commit d43d625610
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 11 deletions

View File

@ -16,6 +16,8 @@ cdef enum TxType:
keys = {
b"AccessToken": [TxType.CLEAR_ON_MANAGER_START],
b"ApiCache_DriveStats": [TxType.PERSISTENT],
b"ApiCache_Device": [TxType.PERSISTENT],
b"ApiCache_Owner": [TxType.PERSISTENT],
b"AthenadPid": [TxType.PERSISTENT],
b"CalibrationParams": [TxType.PERSISTENT],
b"CarBatteryCapacity": [TxType.PERSISTENT],

View File

@ -133,16 +133,18 @@ void RequestRepeater::requestFinished(){
QString response = reply->readAll();
if (reply->error() == QNetworkReply::NoError) {
// save to cache
if (!cache_key.isEmpty()) {
Params().write_db_value(cache_key.toStdString(), response.toStdString());
if (!cache_key.isEmpty()) {
Params().write_db_value(cache_key.toStdString(), response.toStdString());
}
emit receivedResponse(response);
} else {
qDebug() << reply->errorString();
if (!cache_key.isEmpty()) {
Params().delete_db_value(cache_key.toStdString());
}
emit failedResponse(reply->errorString());
}
} else {
emit failedResponse("network timeout");
emit timeoutResponse("timeout");
}
reply->deleteLater();
reply = NULL;

View File

@ -51,4 +51,5 @@ private slots:
signals:
void receivedResponse(QString response);
void failedResponse(QString errorString);
void timeoutResponse(QString errorString);
};

View File

@ -3,7 +3,7 @@
#include <QJsonObject>
#include <QLabel>
#include <QPushButton>
#include <QStackedLayout>
#include <QStackedWidget>
#include <QTimer>
#include <QVBoxLayout>
@ -107,7 +107,7 @@ PrimeUserWidget::PrimeUserWidget(QWidget* parent) : QWidget(parent) {
// TODO: only send the request when widget is shown
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)));
}
@ -156,7 +156,7 @@ PrimeAdWidget::PrimeAdWidget(QWidget* parent) : QWidget(parent) {
SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
mainLayout = new QStackedLayout;
mainLayout = new QStackedWidget;
// Unpaired, registration prompt layout
@ -214,7 +214,12 @@ SetupWidget::SetupWidget(QWidget* parent) : QFrame(parent) {
primeUser = new PrimeUserWidget;
mainLayout->addWidget(primeUser);
setLayout(mainLayout);
mainLayout->setCurrentWidget(primeAd);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(mainLayout);
setLayout(layout);
setStyleSheet(R"(
SetupWidget {
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
QString dongleId = QString::fromStdString(Params().get("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(failedResponse(QString)), this, SLOT(parseError(QString)));
hide(); // Only show when first request comes back
}
void SetupWidget::parseError(QString response) {
show();
showQr = false;
mainLayout->setCurrentIndex(0);
}
@ -246,6 +258,7 @@ void SetupWidget::showQrCode(){
}
void SetupWidget::replyFinished(QString response) {
show();
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
if (doc.isNull()) {
qDebug() << "JSON Parse failed on getting pairing and prime status";

View File

@ -1,7 +1,8 @@
#pragma once
#include <QLabel>
#include <QStackedLayout>
#include <QStackedWidget>
#include <QVBoxLayout>
#include <QWidget>
#include "api.hpp"
@ -48,7 +49,7 @@ public:
explicit SetupWidget(QWidget* parent = 0);
private:
QStackedLayout* mainLayout;
QStackedWidget* mainLayout;
CommaApi* api;
PrimeAdWidget *primeAd;
PrimeUserWidget *primeUser;