This commit is contained in:
2026-07-27 15:43:29 +08:00
parent c99b16d000
commit 5aee257257
3 changed files with 63 additions and 18 deletions
+57 -15
View File
@@ -50,6 +50,42 @@ Psc::JSON track_orientation_json_from_points(const SSR::Position_Info &first,
ret.append({"roll", 0.0});
return ret;
}
Psc::JSON empty_aircraft_track_json(std::string_view data_source_key,
std::string_view icao,
std::size_t last_size) {
auto ret = Psc::JSON::object();
ret.append({"icao", icao});
ret.append({"ds", data_source_key});
ret.append({"sta_seq", last_size});
ret.append({"end_seq", last_size});
ret.append({"size", 0});
ret.append({"list", Psc::JSON::array()});
return ret;
}
Psc::JSON aircraft_track_json(DataBase *db,
std::string_view data_source_key,
std::string_view icao,
std::size_t last_size,
bool include_empty) {
auto aircraft = db->get_aircraft(icao);
if (aircraft == nullptr) {
return include_empty ? empty_aircraft_track_json(data_source_key, icao,
last_size) :
Psc::JSON();
}
auto ret = aircraft->air_pos_track_list.get_last_array_json(last_size);
auto last_two = aircraft->air_pos_track_list.last_two();
if (last_two.has_value()) {
ret.children.insert(
ret.children.begin(),
Psc::JSON("track_orientation",
track_orientation_json_from_points(last_two->first,
last_two->second)));
}
ret.children.insert(ret.children.begin(), Psc::JSON("ds", data_source_key));
ret.children.insert(ret.children.begin(), Psc::JSON("icao", icao));
return ret;
}
}
Aircraft::Aircraft(std::string_view icao) : Aircraft_Info(icao) {
auto size = Global::instance()->mode_acs.max_track_point_size.load();
@@ -291,22 +327,28 @@ void database_server(Global *g) {
CHECK_JSON_PARAM
_init_db HTTP_REQUIRE_VALUE(icao, params.try_get_string("icao"))
HTTP_REQUIRE_VALUE(last_size, params.try_get_number<std::size_t>(
"last_size")) auto aircraft =
db->get_aircraft(icao);
JSON ret;
if (aircraft != nullptr) {
ret = aircraft->air_pos_track_list.get_last_array_json(last_size);
auto last_two = aircraft->air_pos_track_list.last_two();
if (last_two.has_value()) {
ret.children.insert(
ret.children.begin(),
JSON("track_orientation",
track_orientation_json_from_points(last_two->first,
last_two->second)));
}
ret.children.insert(ret.children.begin(), JSON("ds", data_source_key));
ret.children.insert(ret.children.begin(), JSON("icao", icao));
"last_size")) auto ret =
aircraft_track_json(db.get(), data_source_key, icao, last_size,
false);
res->setBody(ret.to_json_string());
});
svr.Post(api + "get_aircraft_track_list_batch", [](HTTP_Param) {
CHECK_JSON_PARAM
_init_db HTTP_REQUIRE_PTR(items, params.get("items"))
HTTP_REQUIRE_TRUE(items->valueType == Psc::Array, "items")
auto ret = JSON::object();
auto list = JSON::array();
for (const auto &item : items->children) {
HTTP_REQUIRE_TRUE(item.valueType == Psc::Object, "items")
HTTP_REQUIRE_VALUE(icao, item.try_get_string("icao"))
HTTP_REQUIRE_VALUE(last_size,
item.try_get_number<std::size_t>("last_size"))
list.children.push_back(
aircraft_track_json(db.get(), data_source_key, icao, last_size,
true));
}
ret.append({"ds", data_source_key});
ret.append({"list", list});
res->setBody(ret.to_json_string());
});
svr.Post(api + "get_aircraft_list_after", [](HTTP_Param) {