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 = { 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],

View File

@ -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;

View File

@ -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);
}; };

View File

@ -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";

View File

@ -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;