Skip to content

Commit b2ede71

Browse files
committed
copy safty
1 parent 4db4b3e commit b2ede71

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

src/managers/StatsManager.cpp

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ Result<> StatsManager::setGeneral(const GeneralData& stats, const std::string& l
315315

316316
Result<> StatsManager::addBackup(const std::string& levelKey, bool saveLevelStats, std::optional<int> sessionsToSave){
317317
//log::info("adding backup for level {} | {} | {}", levelKey, saveLevelStats, sessionsToSave);
318+
std::error_code ec;
318319
auto metaRes = getMetadata(levelKey);
319320
if (metaRes.isErr()) return Err("No level to back up! {}", metaRes.unwrapErr());
320321
auto metadata = metaRes.unwrap();
@@ -341,8 +342,8 @@ Result<> StatsManager::addBackup(const std::string& levelKey, bool saveLevelStat
341342
return Err("backup failed! failed to read general stats");
342343
}
343344

344-
if (!std::filesystem::copy_file(getSavesFolderPath() / levelKey / StatsManager::FROM0_FILE_NAME, levelBackupsFilePath / StatsManager::FROM0_FILE_NAME, std::filesystem::copy_options::overwrite_existing))
345-
return Err("Failed to backup level stats!");
345+
std::filesystem::copy_file(getSavesFolderPath() / levelKey / StatsManager::FROM0_FILE_NAME, levelBackupsFilePath / StatsManager::FROM0_FILE_NAME, std::filesystem::copy_options::overwrite_existing, ec);
346+
if (ec) return Err("Failed to backup level stats: {}", ec.message());
346347
}
347348

348349
auto backupsAmount = Settings::getMaxBackupAmount();
@@ -390,12 +391,13 @@ Result<> StatsManager::addBackup(const std::string& levelKey, bool saveLevelStat
390391
continue;
391392
}
392393

393-
if (!std::filesystem::copy_file(
394+
std::filesystem::copy_file(
394395
getSavesFolderPath() / levelKey / StatsManager::SESSIONS_DIR_NAME / (std::to_string(sessionTime) + ".dt"),
395396
levelBackupsFilePath / (std::to_string(sessionTime) + ".dt"),
396-
std::filesystem::copy_options::overwrite_existing
397-
))
398-
return Err("Failed to backup session {}", sessionTime);
397+
std::filesystem::copy_options::overwrite_existing,
398+
ec
399+
);
400+
if (ec) return Err("Failed to backup session {}: {}", sessionTime, ec.message());
399401

400402
index++;
401403
}
@@ -783,8 +785,10 @@ bool StatsManager::hasPlayedLevel() {
783785
Result<> StatsManager::deleteLevelStats(const std::string& levelKey){
784786
auto levelSaveFilePath = getSavesFolderPath() / levelKey;
785787

786-
if (std::filesystem::is_directory(levelSaveFilePath)){
787-
if (std::filesystem::remove_all(levelSaveFilePath) == static_cast<std::uintmax_t>(-1)) return Err("Failed to delete stats folder!");
788+
std::error_code ec;
789+
if (std::filesystem::is_directory(levelSaveFilePath, ec)){
790+
std::filesystem::remove_all(levelSaveFilePath, ec);
791+
if (ec) return Err("Failed to delete stats folder: {}", ec.message());
788792
return Ok();
789793
}
790794

@@ -794,8 +798,10 @@ Result<> StatsManager::deleteLevelStats(const std::string& levelKey){
794798
Result<> StatsManager::deleteBackup(const std::string& levelKey, long long backupName){
795799
auto levelSaveFilePath = getSavesFolderPath() / levelKey / StatsManager::BACKUPS_DIR_NAME / std::to_string(backupName);
796800

797-
if (std::filesystem::is_directory(levelSaveFilePath)){
798-
if (std::filesystem::remove_all(levelSaveFilePath) == static_cast<std::uintmax_t>(-1)) return Err("Failed to delete backup {}!", backupName);
801+
std::error_code ec;
802+
if (std::filesystem::is_directory(levelSaveFilePath, ec)){
803+
std::filesystem::remove_all(levelSaveFilePath, ec);
804+
if (ec) return Err("Failed to delete backup {}: {}", backupName, ec.message());
799805
return Ok();
800806
}
801807

@@ -805,8 +811,10 @@ Result<> StatsManager::deleteBackup(const std::string& levelKey, long long backu
805811
Result<> StatsManager::deleteAllSessions(const std::string& levelKey){
806812
auto levelSaveFilePath = getSavesFolderPath() / levelKey / StatsManager::SESSIONS_DIR_NAME;
807813

808-
if (std::filesystem::is_directory(levelSaveFilePath)){
809-
if (std::filesystem::remove_all(levelSaveFilePath) == static_cast<std::uintmax_t>(-1)) return Err("Failed to delete sessions folder!");
814+
std::error_code ec;
815+
if (std::filesystem::is_directory(levelSaveFilePath, ec)){
816+
std::filesystem::remove_all(levelSaveFilePath, ec);
817+
if (ec) return Err("Failed to delete sessions folder: {}", ec.message());
810818
return Ok();
811819
}
812820

@@ -1092,13 +1100,16 @@ Result<> StatsManager::reveretBackupSessions(const std::string& levelKey, long l
10921100
auto bakupSessionDirPath = getSavesFolderPath() / levelKey / StatsManager::BACKUPS_DIR_NAME / std::to_string(backupName) / StatsManager::SESSIONS_DIR_NAME;
10931101
auto sessionDirPath = getSavesFolderPath() / levelKey / StatsManager::SESSIONS_DIR_NAME;
10941102

1095-
if (!std::filesystem::exists(bakupSessionDirPath)) return Err("No sessions backup found!");
1103+
std::error_code ec;
1104+
if (!std::filesystem::exists(bakupSessionDirPath, ec)) return Err("No sessions backup found!");
10961105

1097-
if (std::filesystem::exists(sessionDirPath)){
1098-
if (std::filesystem::remove_all(sessionDirPath) == static_cast<std::uintmax_t>(-1)) return Err("Failed to delete current sessions folder!");
1106+
if (std::filesystem::exists(sessionDirPath, ec)){
1107+
std::filesystem::remove_all(sessionDirPath, ec);
1108+
if (ec) return Err("Failed to delete current sessions folder: {}", ec.message());
10991109
}
11001110

1101-
std::filesystem::copy(bakupSessionDirPath, sessionDirPath, std::filesystem::copy_options::recursive | std::filesystem::copy_options::overwrite_existing);
1111+
std::filesystem::copy(bakupSessionDirPath, sessionDirPath, std::filesystem::copy_options::recursive | std::filesystem::copy_options::overwrite_existing, ec);
1112+
if (ec) return Err("Failed to revert sessions: {}", ec.message());
11021113

11031114
return Ok();
11041115
}
@@ -1166,11 +1177,15 @@ Result<> StatsManager::convertV2SaveToV3(const std::string& levelKey){
11661177
if (setSession(v3Session, levelKey, v3Session.sessionStartDate, false).isErr()) return Err("Failed to write V3 session! session sd: {}", v3Session.sessionStartDate);
11671178
}
11681179

1169-
if (!std::filesystem::remove(v2Path)) return Err("Failed to erase old data!");
1180+
std::error_code ec;
1181+
std::filesystem::remove(v2Path, ec);
1182+
if (ec) return Err("Failed to erase old data: {}", ec.message());
1183+
11701184
auto backupPath = getSavesFolderPath() / (levelKey + ".deathsBackup");
11711185

1172-
if (std::filesystem::exists(backupPath)){
1173-
if (!std::filesystem::remove(backupPath)) return Err("Failed to delete backup old data!");
1186+
if (std::filesystem::exists(backupPath, ec)){
1187+
std::filesystem::remove(backupPath, ec);
1188+
if (ec) return Err("Failed to delete backup old data: {}", ec.message());
11741189
}
11751190

11761191
return Ok();

0 commit comments

Comments
 (0)