Profile(Manager),SaveTool: prepare for legacy/normal distinction.

This commit is contained in:
Guillaume Jacquemin 2022-01-20 19:42:27 +01:00
parent a4045e8e9b
commit 0ac1e759ca
4 changed files with 31 additions and 14 deletions

View File

@ -36,7 +36,6 @@ using namespace Corrade;
Profile::Profile(const std::string& path):
_profile(path)
{
_profileDirectory = Utility::Directory::path(path);
_filename = Utility::Directory::filename(path);
if(Utility::String::beginsWith(_filename, "Demo")) {
@ -46,7 +45,14 @@ Profile::Profile(const std::string& path):
_type = ProfileType::FullGame;
}
_steamId = Utility::String::ltrim(Utility::String::rtrim(_filename, ".sav"), (_type == ProfileType::Demo ? "Demo" : "") + std::string{"Profile"});
_account = Utility::String::ltrim(Utility::String::rtrim(_filename, ".sav"), (_type == ProfileType::Demo ? "Demo" : "") + std::string{"Profile"});
if(Utility::String::beginsWith(_account, "PMCSlot")) {
_version = ProfileVersion::Normal;
}
else {
_version = ProfileVersion::Legacy;
}
refreshValues();
@ -69,8 +75,12 @@ auto Profile::type() const -> ProfileType {
return _type;
}
auto Profile::steamId() const -> std::string const& {
return _steamId;
auto Profile::version() const -> ProfileVersion {
return _version;
}
auto Profile::account() const -> std::string const& {
return _account;
}
void Profile::refreshValues() {

View File

@ -29,6 +29,11 @@ enum class ProfileType : UnsignedByte {
FullGame
};
enum class ProfileVersion : UnsignedByte {
Legacy, // pre-0.8
Normal // 0.8 and later
};
class Profile {
public:
explicit Profile(const std::string& path);
@ -41,7 +46,9 @@ class Profile {
auto type() const -> ProfileType;
auto steamId() const -> std::string const&;
auto version() const -> ProfileVersion;
auto account() const -> std::string const&;
void refreshValues();
@ -122,10 +129,10 @@ class Profile {
auto getResource(const char* container, Int id) -> Int;
auto setResource(const char* container, Int id, Int amount) -> bool;
std::string _profileDirectory;
std::string _filename;
ProfileType _type;
ProfileVersion _version;
UESaveFile _profile;
@ -159,7 +166,7 @@ class Profile {
Int _mineralExoskeletology = 0;
Int _carbonisedSkin = 0;
std::string _steamId;
std::string _account;
bool _valid = false;
std::string _lastError;

View File

@ -100,7 +100,7 @@ auto ProfileManager::deleteProfile(std::size_t index, bool delete_builds) -> boo
for(UnsignedByte i = 0; i < 32; ++i) {
std::string filename = Utility::formatString("{}Unit{:.2d}{}.sav",
_profiles[index].type() == ProfileType::Demo ? "Demo": "",
i, _profiles[index].steamId());
i, _profiles[index].account());
Utility::Directory::rm(Utility::Directory::join(_saveDirectory, filename));
}
}
@ -158,7 +158,7 @@ auto ProfileManager::backupProfile(std::size_t index, bool backup_builds) -> boo
for(UnsignedByte i = 0; i < 32; ++i) {
std::string build_filename = Utility::formatString("{}Unit{:.2d}{}.sav",
_profiles[index].type() == ProfileType::Demo ? "Demo": "",
i, _profiles[index].steamId());
i, _profiles[index].account());
if(!Utility::Directory::exists(Utility::Directory::join(_saveDirectory, build_filename))) {
continue;

View File

@ -227,7 +227,7 @@ void SaveTool::handleFileAction(efsw::WatchID watch_id,
switch(action) {
case efsw::Actions::Add:
if(Utility::String::endsWith(filename, _currentProfile->steamId() + ".sav")) {
if(Utility::String::endsWith(filename, _currentProfile->account() + ".sav")) {
if(Utility::String::beginsWith(filename, Utility::formatString("{}Unit", _currentProfile->type() == ProfileType::Demo ? "Demo" : ""))) {
int index = ((filename[_currentProfile->type() == ProfileType::Demo ? 8 : 4] - 0x30) * 10) +
(filename[_currentProfile->type() == ProfileType::Demo ? 9 : 5] - 0x30);
@ -241,7 +241,7 @@ void SaveTool::handleFileAction(efsw::WatchID watch_id,
}
break;
case efsw::Actions::Delete:
if(Utility::String::endsWith(filename, _currentProfile->steamId() + ".sav")) {
if(Utility::String::endsWith(filename, _currentProfile->account() + ".sav")) {
if(Utility::String::beginsWith(filename, Utility::formatString("{}Unit", _currentProfile->type() == ProfileType::Demo ? "Demo" : ""))) {
int index = ((filename[_currentProfile->type() == ProfileType::Demo ? 8 : 4] - 0x30) * 10) +
(filename[_currentProfile->type() == ProfileType::Demo ? 9 : 5] - 0x30);
@ -255,7 +255,7 @@ void SaveTool::handleFileAction(efsw::WatchID watch_id,
if(filename == _currentProfile->filename()) {
_currentProfile->refreshValues();
}
else if(Utility::String::endsWith(filename, _currentProfile->steamId() + ".sav")) {
else if(Utility::String::endsWith(filename, _currentProfile->account() + ".sav")) {
if(Utility::String::beginsWith(filename, Utility::formatString("{}Unit", _currentProfile->type() == ProfileType::Demo ? "Demo" : ""))) {
int index = ((filename[_currentProfile->type() == ProfileType::Demo ? 8 : 4] - 0x30) * 10) +
(filename[_currentProfile->type() == ProfileType::Demo ? 9 : 5] - 0x30);
@ -273,7 +273,7 @@ void SaveTool::handleFileAction(efsw::WatchID watch_id,
}
break;
case efsw::Actions::Moved:
if(Utility::String::endsWith(filename, _currentProfile->steamId() + ".sav")) {
if(Utility::String::endsWith(filename, _currentProfile->account() + ".sav")) {
if(Utility::String::endsWith(old_filename, ".tmp")) {
is_moved_after_save = true;
return;
@ -582,7 +582,7 @@ auto SaveTool::findGameDataDirectory() -> bool {
void SaveTool::initialiseMassManager() {
_massManager.emplace(_saveDir,
_currentProfile->steamId(),
_currentProfile->account(),
_currentProfile->type() == ProfileType::Demo,
_stagingDir);