68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#pragma once
|
|
#include "external/mtr/arrival.h"
|
|
#include "cJSON.h"
|
|
#include "external/mtr/mtr.h"
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
// Forward declaration
|
|
class MTRNextTrainHandler;
|
|
|
|
struct ArrivalInfo {
|
|
public:
|
|
// Caller transfers ownership of arrival_time to ArrivalInfo
|
|
ArrivalInfo(
|
|
const std::string& arrival_time,
|
|
const std::string& destination_name
|
|
) : _arrival_time(arrival_time)
|
|
, _destination_name(destination_name) { }
|
|
|
|
const char* arrival_time() const {
|
|
return _arrival_time.c_str();
|
|
}
|
|
|
|
const char* destination() const {
|
|
return _destination_name.c_str();
|
|
}
|
|
|
|
private:
|
|
const std::string _arrival_time;
|
|
const std::string _destination_name; // not the code of the station
|
|
};
|
|
|
|
|
|
enum StatusEnum {
|
|
SUCCESSFUL_WITHOUT_DELAY = 0,
|
|
SUCCESSFUL_WITH_DELAY = 1,
|
|
FAILED_WITH_MESSAGE = 2,
|
|
UNKNOWN_STATUS = 3
|
|
};
|
|
|
|
struct StationArrivalInfo {
|
|
public:
|
|
friend class MTRNextTrainHandler;
|
|
|
|
// Public accessors
|
|
StatusEnum status() const { return _status; }
|
|
const char* message() const { return _message.c_str(); }
|
|
const char* train_line() const { return _train_line.c_str(); }
|
|
const char* train_station() const { return _train_station.c_str(); }
|
|
const std::vector<ArrivalInfo>* up_arrivals() const { return &_up_arrivals; }
|
|
const std::vector<ArrivalInfo>* down_arrivals() const { return &_down_arrivals; }
|
|
|
|
private:
|
|
StationArrivalInfo(
|
|
cJSON* mtr_line_station_json,
|
|
cJSON* arrival_json,
|
|
const std::string& train_line_code,
|
|
const std::string& train_station_code
|
|
);
|
|
|
|
StatusEnum _status;
|
|
std::string _message; // only valid if status == FAILED_WITH_MESSAGE
|
|
std::string _train_line;
|
|
std::string _train_station;
|
|
std::vector<ArrivalInfo> _up_arrivals;
|
|
std::vector<ArrivalInfo> _down_arrivals;
|
|
};
|