12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #pragma once
- #include <map>
- #include <memory>
- #include <string>
- #include <vector>
- #include <QDateTime>
- #include <QFutureSynchronizer>
- #include "tools/replay/framereader.h"
- #include "tools/replay/logreader.h"
- #include "tools/replay/util.h"
- enum class RouteLoadError {
- None,
- AccessDenied,
- NetworkError,
- FileNotFound,
- UnknownError
- };
- struct RouteIdentifier {
- QString dongle_id;
- QString timestamp;
- int begin_segment = 0;
- int end_segment = -1;
- QString str;
- };
- 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();
- RouteLoadError lastError() const { return err_; }
- inline const QString &name() const { return route_.str; }
- inline const QDateTime datetime() const { return date_time_; }
- inline const QString &dir() const { return data_dir_; }
- inline const RouteIdentifier &identifier() const { return route_; }
- inline const std::map<int, SegmentFile> &segments() const { return segments_; }
- inline const SegmentFile &at(int n) { return segments_.at(n); }
- static RouteIdentifier parseRoute(const QString &str);
- protected:
- bool loadFromLocal();
- bool loadFromServer(int retries = 3);
- bool loadFromJson(const QString &json);
- void addFileToSegment(int seg_num, const QString &file);
- RouteIdentifier route_ = {};
- QString data_dir_;
- std::map<int, SegmentFile> segments_;
- QDateTime date_time_;
- RouteLoadError err_ = RouteLoadError::None;
- };
- class Segment : public QObject {
- Q_OBJECT
- public:
- Segment(int n, const SegmentFile &files, uint32_t flags, const std::vector<bool> &filters = {});
- ~Segment();
- inline bool isLoaded() const { return !loading_ && !abort_; }
- const int seg_num = 0;
- std::unique_ptr<LogReader> log;
- std::unique_ptr<FrameReader> frames[MAX_CAMERAS] = {};
- signals:
- void loadFinished(bool success);
- protected:
- void loadFile(int id, const std::string file);
- std::atomic<bool> abort_ = false;
- std::atomic<int> loading_ = 0;
- QFutureSynchronizer<void> synchronizer_;
- uint32_t flags;
- std::vector<bool> filters_;
- };
|