diff --git a/tools/replay/route.cc b/tools/replay/route.cc index 0a57ee7d4a..db7a959595 100644 --- a/tools/replay/route.cc +++ b/tools/replay/route.cc @@ -59,18 +59,27 @@ bool Route::load() { return !segments_.empty(); } -bool Route::loadFromServer() { - QEventLoop loop; - HttpRequest http(nullptr, !Hardware::PC()); - QObject::connect(&http, &HttpRequest::requestDone, [&](const QString &json, bool success, QNetworkReply::NetworkError error) { - if (error == QNetworkReply::ContentAccessDenied || error == QNetworkReply::AuthenticationRequiredError) { - qWarning() << ">> Unauthorized. Authenticate with tools/lib/auth.py <<"; +bool Route::loadFromServer(int retries) { + for (int i = 1; i <= retries; ++i) { + QString result; + QEventLoop loop; + HttpRequest http(nullptr, !Hardware::PC()); + QObject::connect(&http, &HttpRequest::requestDone, [&loop, &result](const QString &json, bool success, QNetworkReply::NetworkError err) { + result = json; + loop.exit((int)err); + }); + http.sendRequest(CommaApi::BASE_URL + "/v1/route/" + route_.str + "/files"); + auto err = (QNetworkReply::NetworkError)loop.exec(); + if (err == QNetworkReply::NoError) { + return loadFromJson(result); + } else if (err == QNetworkReply::ContentAccessDenied || err == QNetworkReply::AuthenticationRequiredError) { + rWarning(">> Unauthorized. Authenticate with tools/lib/auth.py <<"); + return false; } - - loop.exit(success ? loadFromJson(json) : 0); - }); - http.sendRequest(CommaApi::BASE_URL + "/v1/route/" + route_.str + "/files"); - return loop.exec(); + rWarning("Retrying %d/%d", i, retries); + util::sleep_for(500); + } + return false; } bool Route::loadFromJson(const QString &json) { diff --git a/tools/replay/route.h b/tools/replay/route.h index 33e5bcb1ba..654c084ff2 100644 --- a/tools/replay/route.h +++ b/tools/replay/route.h @@ -42,7 +42,7 @@ public: protected: bool loadFromLocal(); - bool loadFromServer(); + bool loadFromServer(int retries = 3); bool loadFromJson(const QString &json); void addFileToSegment(int seg_num, const QString &file); RouteIdentifier route_ = {};