From 69021eacdf981f04ab2d67d8b3abfc74f2bcebad Mon Sep 17 00:00:00 2001 From: William JCM Date: Sat, 28 Aug 2021 20:20:09 +0200 Subject: [PATCH] Mass: change how the name is obtained, and move the state enum. --- src/Mass/Mass.cpp | 72 ++++++++++++++++++++++++--------- src/Mass/Mass.h | 15 ++++--- src/MassManager/MassManager.cpp | 12 +++--- 3 files changed, 69 insertions(+), 30 deletions(-) diff --git a/src/Mass/Mass.cpp b/src/Mass/Mass.cpp index 7c689af..87726ff 100644 --- a/src/Mass/Mass.cpp +++ b/src/Mass/Mass.cpp @@ -33,23 +33,7 @@ Mass::Mass(const std::string& path) { _folder = Utility::Directory::path(path); _filename = Utility::Directory::filename(path); - if(!Utility::Directory::exists(path)) { - _lastError = path + " couldn't be found."; - return; - } - - auto mmap = Utility::Directory::mapRead(path); - - auto iter = std::search(mmap.begin(), mmap.end(), &mass_name_locator[0], &mass_name_locator[56]); - - if(iter != mmap.end()) { - _name = std::string{iter + 70}; - _state = MassState::Valid; - } - else { - _lastError = "The name couldn't be found in " + _filename; - _state = MassState::Invalid; - } + refreshValues(); } auto Mass::lastError() -> std::string const& { @@ -78,6 +62,10 @@ auto Mass::getNameFromFile(const std::string& path) -> std::string { return name; } +void Mass::refreshValues() { + getName(); +} + auto Mass::filename() -> std::string const&{ return _filename; } @@ -86,7 +74,7 @@ auto Mass::name() -> std::string const&{ return _name; } -auto Mass::state() -> MassState { +auto Mass::state() -> State { return _state; } @@ -95,7 +83,7 @@ auto Mass::updateSteamId(const std::string& steam_id) -> bool { if(!Utility::Directory::exists(path)) { _lastError = path + " couldn't be found."; - _state = MassState::Empty; + _state = State::Empty; return false; } @@ -129,3 +117,49 @@ auto Mass::updateSteamId(const std::string& steam_id) -> bool { return true; } + +void Mass::getName() { + std::string path = Utility::Directory::join(_folder, _filename); + + if(!Utility::Directory::exists(path)) { + _lastError = path + " couldn't be found."; + _state = State::Empty; + return; + } + + auto mmap = Utility::Directory::mapRead(path); + + auto iter = std::search(mmap.begin(), mmap.end(), &mass_name_locator[0], &mass_name_locator[56]); + + if(iter != mmap.end()) { + _name = std::string{iter + 70}; + _state = State::Valid; + } + else { + _lastError = "The name couldn't be found in " + _filename; + _state = State::Invalid; + } +} + +void Mass::getFrameStyles() { + std::string path = Utility::Directory::join(_folder, _filename); + + if(!Utility::Directory::exists(path)) { + _lastError = path + " couldn't be found."; + _state = State::Empty; + return; + } + + auto mmap = Utility::Directory::mapRead(path); + + auto iter = std::search(mmap.begin(), mmap.end(), &frame_styles_locator[0], &frame_styles_locator[90]); + + if(iter != mmap.end()) { + iter += 0x5A; + std::copy(reinterpret_cast(iter), reinterpret_cast(iter) + 4, _frameStyles.data()); + } + else { + _lastError = "Frame styles couldn't be found in " + path; + _state = State::Invalid; + } +} diff --git a/src/Mass/Mass.h b/src/Mass/Mass.h index 124c319..c008fa1 100644 --- a/src/Mass/Mass.h +++ b/src/Mass/Mass.h @@ -22,12 +22,13 @@ using namespace Magnum; -enum class MassState : UnsignedByte { - Empty, Invalid, Valid -}; class Mass { public: + enum class State : UnsignedByte { + Empty, Invalid, Valid + }; + explicit Mass(const std::string& path); Mass(const Mass&) = delete; @@ -40,19 +41,23 @@ class Mass { static auto getNameFromFile(const std::string& path) -> std::string; + void refreshValues(); + auto filename() -> std::string const&; auto name() -> std::string const&; - auto state() -> MassState; + auto state() -> State; auto updateSteamId(const std::string& steam_id) -> bool; private: + void getName(); + static std::string _lastError; std::string _folder; std::string _filename; std::string _name; - MassState _state = MassState::Empty; + State _state = State::Empty; }; diff --git a/src/MassManager/MassManager.cpp b/src/MassManager/MassManager.cpp index be83937..033d279 100644 --- a/src/MassManager/MassManager.cpp +++ b/src/MassManager/MassManager.cpp @@ -104,7 +104,7 @@ auto MassManager::exportMass(int hangar) -> bool { return false; } - if(_hangars[hangar].state() != MassState::Valid) { + if(_hangars[hangar].state() != Mass::State::Valid) { _lastError = Utility::formatString("There is no valid data to export in hangar {:.2d}", hangar + 1); return false; } @@ -134,22 +134,22 @@ auto MassManager::moveMass(int source, int destination) -> bool { std::string source_file = _hangars[source].filename(); std::string dest_file = _hangars[destination].filename(); - MassState dest_state = _hangars[destination].state(); + Mass::State dest_state = _hangars[destination].state(); switch(dest_state) { - case MassState::Empty: + case Mass::State::Empty: break; - case MassState::Invalid: + case Mass::State::Invalid: Utility::Directory::rm(dest_file); break; - case MassState::Valid: + case Mass::State::Valid: Utility::Directory::move(dest_file, dest_file + ".tmp"); break; } Utility::Directory::move(source_file, dest_file); - if(dest_state == MassState::Valid) { + if(dest_state == Mass::State::Valid) { Utility::Directory::move(dest_file + ".tmp", source_file); }