#pragma once #include #include #include #include #include "selfdrive/common/util.h" #include "selfdrive/ui/replay/framereader.h" #include "selfdrive/ui/replay/logreader.h" const QDir CACHE_DIR(util::getenv("COMMA_CACHE", "/tmp/comma_download_cache/").c_str()); const int connections_per_file = 3; struct SegmentFile { QString rlog; QString qlog; QString road_cam; QString driver_cam; QString wide_road_cam; QString qcamera; }; class Route { public: Route(const QString &route, const QString &data_dir = {}); bool load(); inline const QString &name() const { return route_; }; inline int size() const { return segments_.size(); } inline SegmentFile &at(int n) { return segments_[n]; } protected: bool loadFromLocal(); bool loadFromJson(const QString &json); QString route_; QString data_dir_; std::vector segments_; }; class Segment : public QObject { Q_OBJECT public: Segment(int n, const SegmentFile &segment_files, bool load_dcam, bool load_ecam); ~Segment(); inline bool isLoaded() const { return loaded_; } std::unique_ptr log; std::unique_ptr frames[MAX_CAMERAS] = {}; signals: void loadFinished(); protected: void load(); void downloadFile(const QString &url); QString localPath(const QUrl &url); std::atomic loaded_ = false; std::atomic aborting_ = false; std::atomic downloading_ = 0; int seg_num_ = 0; SegmentFile files_; QString road_cam_path_; QString log_path_; std::vector download_threads_; };