From c60ec37a5b99cd1c9f3bd543c0a78d571b69bf95 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 4 Jun 2022 13:14:20 +0200 Subject: Renamed DumpSource to Snapshot --- Snapshot.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Snapshot.cpp (limited to 'Snapshot.cpp') diff --git a/Snapshot.cpp b/Snapshot.cpp new file mode 100644 index 0000000..57f81db --- /dev/null +++ b/Snapshot.cpp @@ -0,0 +1,75 @@ +#include "DumpSource.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include "Killmail.h" + + +using json = nlohmann::json; +using tm = std::tm; + + +void from_json(const json& j, tm& d); +void from_json(const json& j, Killmail& km); + + +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(LongVector3, x, y, z) + + +DumpSource::DumpSource(const char* filename) : + m_killmails {} +{ + if (!FileExists(filename)) + throw "File does not exist"; + char* text = LoadFileText(filename); + auto dump = json::parse(text); + std::unordered_map group_lookup; + for (const auto& item : dump["types"]) { + const auto type_id = item["type_id"].get(); + item["group_id"].get_to(group_lookup[type_id]); + } + dump.at("killmails").get_to(m_killmails); + for (auto& km : m_killmails) + km.group = group_lookup[km.ship]; + UnloadFileText(text); +} + + +std::vector +DumpSource::killmails() const +{ + return m_killmails; +} + + +void +from_json(const json& j, tm& d) +{ + std::istringstream str(j.get()); + str >> std::get_time(&d, "%Y-%m-%dT%H:%M:%SZ"); +} + + +void +from_json(const json& j, Killmail& km) +{ + j.at("solar_system_id").get_to(km.location); + j.at("victim").at("ship_type_id").get_to(km.ship); + j.at("victim").at("position").get_to(km.position); + if (j.at("victim").contains("character_id")) + j.at("victim").at("character_id").get_to(km.owner.character); + j.at("victim").at("corporation_id").get_to(km.owner.corporation); + if (j.at("victim").contains("alliance_id")) + j.at("victim").at("alliance_id").get_to(km.owner.alliance); + if (j.at("victim").contains("faction_id")) + j.at("victim").at("faction_id").get_to(km.owner.faction); + auto calendar = j.at("killmail_time").get(); + km.time = std::mktime(&calendar); +} -- cgit v1.1