|  |  |  | #include "selfdrive/ui/qt/request_repeater.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RequestRepeater::RequestRepeater(QObject *parent, const QString &requestURL, const QString &cacheKey,
 | 
					
						
							|  |  |  |                                  int period, bool while_onroad) : HttpRequest(parent) {
 | 
					
						
							|  |  |  |   timer = new QTimer(this);
 | 
					
						
							|  |  |  |   timer->setTimerType(Qt::VeryCoarseTimer);
 | 
					
						
							|  |  |  |   QObject::connect(timer, &QTimer::timeout, [=]() {
 | 
					
						
							|  |  |  |     if ((!uiState()->scene.started || while_onroad) && device()->isAwake() && !active()) {
 | 
					
						
							|  |  |  |       sendRequest(requestURL);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |   });
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   timer->start(period * 1000);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!cacheKey.isEmpty()) {
 | 
					
						
							|  |  |  |     prevResp = QString::fromStdString(params.get(cacheKey.toStdString()));
 | 
					
						
							|  |  |  |     if (!prevResp.isEmpty()) {
 | 
					
						
							|  |  |  |       QTimer::singleShot(500, [=]() { emit requestDone(prevResp, true, QNetworkReply::NoError); });
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     QObject::connect(this, &HttpRequest::requestDone, [=](const QString &resp, bool success) {
 | 
					
						
							|  |  |  |       if (success && resp != prevResp) {
 | 
					
						
							|  |  |  |         params.put(cacheKey.toStdString(), resp.toStdString());
 | 
					
						
							|  |  |  |         prevResp = resp;
 | 
					
						
							|  |  |  |       }
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  | }
 |