#include "logbook.h" namespace germanairlinesva_logbook { Logbook::Logbook() { if (germanairlinesva_util::fileExists( XPLANE_PLUGIN_DIRECTORY LOGBOOK)) { this->fromFile(XPLANE_PLUGIN_DIRECTORY LOGBOOK); } else { char header[] = {'V', 'G', 'A', 'L', '\0', 1}; this->file.resize(6); std::memcpy(file.data(), &header, 6); } } 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) { return this->readVersion1(in); } } void Logbook::readVersion1(std::ifstream &in) { in.seekg(0, std::fstream::end); std::streampos fileSize = in.tellg(); in.seekg(0, std::ios::beg); this->file.resize(fileSize); in.read(reinterpret_cast(this->file.data()), fileSize); in.close(); } void Logbook::addEntry(LogbookEntry entry) { std::size_t size = file.size(); file.resize(file.size() + entry.getBinaryLength()); std::uint8_t *bufPtr = file.data() + size; std::memcpy(bufPtr, entry.getBinaryData(), entry.getBinaryLength()); } void Logbook::toFile() { std::ofstream out(XPLANE_PLUGIN_DIRECTORY LOGBOOK, std::fstream::binary); out.write(reinterpret_cast(this->file.data()), this->file.size()); out.close(); } } // namespace germanairlinesva_logbook