@@ -315,6 +315,7 @@ Result<> StatsManager::setGeneral(const GeneralData& stats, const std::string& l
315315
316316Result<> 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() {
783785Result<> 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){
794798Result<> 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
805811Result<> 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