@ -5,7 +5,6 @@
# include <QDebug>
# include <QVBoxLayout>
# include <QLabel>
# include <QLineEdit>
# include <QJsonDocument>
# include <QJsonObject>
# include <QNetworkAccessManager>
@ -19,7 +18,9 @@
# include "drive_stats.hpp"
# include "common/params.h"
# include "common/utilpp.h"
double MILE_TO_KM = 1.60934 ;
constexpr double MILE_TO_KM = 1.60934 ;
# if defined(QCOM) || defined(QCOM2)
@ -28,7 +29,8 @@ const std::string private_key_path = "/persist/comma/id_rsa";
const std : : string private_key_path = util : : getenv_default ( " HOME " , " /.comma/persist/comma/id_rsa " , " /persist/comma/id_rsa " ) ;
# endif
QByteArray rsa_sign ( QByteArray data ) {
QByteArray rsa_sign ( QByteArray data ) {
auto file = QFile ( private_key_path . c_str ( ) ) ;
bool r = file . open ( QIODevice : : ReadOnly ) ;
assert ( r ) ;
@ -56,7 +58,7 @@ QByteArray rsa_sign(QByteArray data){
return sig ;
}
QString create_jwt ( QString dongle_id , int expiry = 3600 ) {
QString create_jwt ( QString dongle_id , int expiry = 3600 ) {
QJsonObject header ;
header . insert ( " alg " , " RS256 " ) ;
header . insert ( " typ " , " JWT " ) ;
@ -81,24 +83,27 @@ QString create_jwt(QString dongle_id, int expiry=3600){
return jwt ;
}
QString bold ( QString s ) {
return " <b> " + s + " </b> " ;
}
QLayout * build_stat ( QString name , int stat ) {
QVBoxLayout * layout = new QVBoxLayout ;
QWidget * widget ( QLayout * l ) {
QWidget * q = new QWidget ( ) ;
q - > setLayout ( l ) ;
return q ;
}
QLabel * metric = new QLabel ( QString ( " %1 " ) . arg ( stat ) ) ;
metric - > setStyleSheet ( R " (
font - size : 72 px ;
font - weight : 700 ;
) " );
layout - > addWidget ( metric , 0 , Qt : : AlignLeft ) ;
QWidget * build_stat ( QString name , int stat ) {
QVBoxLayout * layout = new QVBoxLayout ;
layout - > addWidget ( new QLabel ( bold ( QString ( " %1 " ) . arg ( stat ) ) ) , 1 , Qt : : AlignCenter ) ;
layout - > addWidget ( new QLabel ( name ) , 1 , Qt : : AlignCenter ) ;
return widget ( layout ) ;
QLabel * label = new QLabel ( name ) ;
label - > setStyleSheet ( R " (
font - size : 32 px ;
font - weight : 600 ;
) " );
layout - > addWidget ( label , 0 , Qt : : AlignLeft ) ;
return layout ;
}
void DriveStats : : replyFinished ( QNetworkReply * l ) {
void DriveStats : : replyFinished ( QNetworkReply * l ) {
QString answer = l - > readAll ( ) ;
answer . chop ( 1 ) ;
@ -116,47 +121,27 @@ void DriveStats::replyFinished(QNetworkReply *l){
QGridLayout * gl = new QGridLayout ( ) ;
int all_distance = all [ " distance " ] . toDouble ( ) * ( metric ? MILE_TO_KM : 1 ) ;
gl - > addWidget ( new QLabel ( bold ( " ALL TIME " ) ) , 0 , 0 , 1 , 3 ) ;
gl - > addWidget ( build_stat ( " DRIVES " , all [ " routes " ] . toDouble ( ) ) , 1 , 0 , 3 , 1 ) ;
gl - > addWidget ( build_stat ( metric ? " KM " : " MILES " , all_distance ) , 1 , 1 , 3 , 1 ) ;
gl - > addWidget ( build_stat ( " HOURS " , all [ " minutes " ] . toDouble ( ) / 60 ) , 1 , 2 , 3 , 1 ) ;
QFrame * lineA = new QFrame ;
lineA - > setFrameShape ( QFrame : : HLine ) ;
lineA - > setFrameShadow ( QFrame : : Sunken ) ;
lineA - > setProperty ( " class " , " line " ) ;
gl - > addWidget ( lineA , 5 , 0 , 1 , 3 ) ;
gl - > addWidget ( new QLabel ( " ALL TIME " ) , 0 , 0 , 1 , 3 ) ;
gl - > addLayout ( build_stat ( " DRIVES " , all [ " routes " ] . toDouble ( ) ) , 1 , 0 , 3 , 1 ) ;
gl - > addLayout ( build_stat ( metric ? " KM " : " MILES " , all_distance ) , 1 , 1 , 3 , 1 ) ;
gl - > addLayout ( build_stat ( " HOURS " , all [ " minutes " ] . toDouble ( ) / 60 ) , 1 , 2 , 3 , 1 ) ;
int week_distance = week [ " distance " ] . toDouble ( ) * ( metric ? MILE_TO_KM : 1 ) ;
gl - > addWidget ( new QLabel ( bold ( " PAST WEEK " ) ) , 6 , 0 , 1 , 3 ) ;
gl - > addWidget ( build_stat ( " DRIVES " , week [ " routes " ] . toDouble ( ) ) , 7 , 0 , 3 , 1 ) ;
gl - > addWidget ( build_stat ( metric ? " KM " : " MILES " , week_distance ) , 7 , 1 , 3 , 1 ) ;
gl - > addWidget ( build_stat ( " HOURS " , week [ " minutes " ] . toDouble ( ) / 60 ) , 7 , 2 , 3 , 1 ) ;
f - > setLayout ( gl ) ;
f - > setStyleSheet ( R " (
[ class = " line " ] {
border : 2 px solid white ;
}
[ class = " outside " ] {
border - radius : 20 px ;
border : 2 px solid white ;
padding : 10 px ;
}
gl - > addWidget ( new QLabel ( " PAST WEEK " ) , 6 , 0 , 1 , 3 ) ;
gl - > addLayout ( build_stat ( " DRIVES " , week [ " routes " ] . toDouble ( ) ) , 7 , 0 , 3 , 1 ) ;
gl - > addLayout ( build_stat ( metric ? " KM " : " MILES " , week_distance ) , 7 , 1 , 3 , 1 ) ;
gl - > addLayout ( build_stat ( " HOURS " , week [ " minutes " ] . toDouble ( ) / 60 ) , 7 , 2 , 3 , 1 ) ;
setLayout ( gl ) ;
setStyleSheet ( R " (
QLabel {
font - size : 70 px ;
font - weight : 2 00;
font - size : 48 px ;
font - weight : 600 ;
}
) " );
}
DriveStats : : DriveStats ( QWidget * parent ) : QWidget ( parent ) {
f = new QFrame ;
f - > setProperty ( " class " , " outside " ) ;
QVBoxLayout * v = new QVBoxLayout ;
v - > addWidget ( f ) ;
setLayout ( v ) ;
DriveStats : : DriveStats ( QWidget * parent ) : QWidget ( parent ) {
QString dongle_id = QString : : fromStdString ( Params ( ) . get ( " DongleId " ) ) ;
QString token = create_jwt ( dongle_id ) ;