#include "logbook/logbook.h" namespace germanairlinesva { namespace file { namespace logbook { Logbook::Logbook() { if (germanairlinesva_util::fileExists(XPLANE_PLUGIN_DIRECTORY LOGBOOK)) { this->fromFile(XPLANE_PLUGIN_DIRECTORY LOGBOOK); } } void Logbook::fromFile(const std::string &file) { std::ifstream in(file, std::ifstream::binary); // File Header char ident[5]; in.read(ident, 5); if (strcmp(ident, "VGAL") != 0) { throw std::invalid_argument("Wrong file"); } std::uint8_t version; in.read(reinterpret_cast(&version), 1); if (version == 1) { while (in.peek() != EOF) { this->readVersion1(in); } } } void Logbook::readVersion1(std::ifstream &in) { std::string date = readString(in, 10); std::string flightNumber = readString(in, 4); std::string aircraftType = readString(in, 4); std::string aircraftRegistration = readString(in, 6); std::string departureAirport = readString(in); std::string departureGate = readString(in); std::string departureRunway = readString(in); std::string arrivalAirport = readString(in); std::string arrivalGate = readString(in); std::string arrivalRunway = readString(in); std::string offBlockTime = readString(in, 5); std::string outTime = readString(in, 5); std::string inTime = readString(in, 5); std::string onBlockTime = readString(in, 5); float totalFlightTime = read(in); float taxiOutFuel = read(in); float inFlightFuel = read(in); float taxiInFuel = read(in); float totalFuel = read(in); float taxiOutDistance = read(in); float inFlightDistance = read(in); float taxiInDistance = read(in); float totalDistance = read(in); float maxLandingRate = read(in); std::uint8_t touchdowns = read(in); float maxLandingGees = read(in); std::string recordingFilename = readString(in); float points = read(in); std::uint8_t flags = read(in); this->addEntry(date, flightNumber, aircraftType, aircraftRegistration, departureAirport, departureGate, departureRunway, arrivalAirport, arrivalGate, arrivalRunway, offBlockTime, outTime, inTime, onBlockTime, totalFlightTime, taxiOutFuel, inFlightFuel, taxiInFuel, totalFuel, taxiOutDistance, inFlightDistance, taxiInDistance, totalDistance, maxLandingRate, touchdowns, maxLandingGees, recordingFilename, points, flags); } void Logbook::toFile() const { std::ofstream out(XPLANE_PLUGIN_DIRECTORY LOGBOOK, std::fstream::binary); char header[] = {'V', 'G', 'A', 'L', '\0', 1}; out.write(header, 6); for (const LogbookEntry &entry : this->entries) { entry.toFile(out); } out.close(); } } // namespace logbook } // namespace file } // namespace germanairlinesva