# include "replay.hpp"
Replay : : Replay ( QString route_ , int seek ) : route ( route_ ) {
unlogger = new Unlogger ( & events , & events_lock , & frs , seek ) ;
current_segment = 0 ;
bool create_jwt = true ;
# if !defined(QCOM) && !defined(QCOM2)
create_jwt = false ;
# endif
http = new HttpRequest ( this , " https://api.commadotai.com/v1/route/ " + route + " /files " , " " , create_jwt ) ;
QObject : : connect ( http , SIGNAL ( receivedResponse ( QString ) ) , this , SLOT ( parseResponse ( QString ) ) ) ;
}
void Replay : : parseResponse ( QString response ) {
response = response . trimmed ( ) ;
QJsonDocument doc = QJsonDocument : : fromJson ( response . toUtf8 ( ) ) ;
if ( doc . isNull ( ) ) {
qDebug ( ) < < " JSON Parse failed " ;
return ;
}
camera_paths = doc [ " cameras " ] . toArray ( ) ;
log_paths = doc [ " logs " ] . toArray ( ) ;
// add first segment
addSegment ( 0 ) ;
}
void Replay : : addSegment ( int i ) {
if ( lrs . find ( i ) ! = lrs . end ( ) ) {
return ;
}
QThread * thread = new QThread ;
QString log_fn = this - > log_paths . at ( i ) . toString ( ) ;
lrs . insert ( i , new LogReader ( log_fn , & events , & events_lock , & unlogger - > eidx ) ) ;
lrs [ i ] - > moveToThread ( thread ) ;
QObject : : connect ( thread , SIGNAL ( started ( ) ) , lrs [ i ] , SLOT ( process ( ) ) ) ;
thread - > start ( ) ;
QString camera_fn = this - > camera_paths . at ( i ) . toString ( ) ;
frs . insert ( i , new FrameReader ( qPrintable ( camera_fn ) ) ) ;
}
void Replay : : stream ( SubMaster * sm ) {
QThread * thread = new QThread ;
unlogger - > moveToThread ( thread ) ;
QObject : : connect ( thread , & QThread : : started , [ = ] ( ) {
unlogger - > process ( sm ) ;
} ) ;
thread - > start ( ) ;
QObject : : connect ( unlogger , & Unlogger : : loadSegment , [ = ] ( ) {
addSegment ( + + current_segment ) ;
} ) ;
}