void SaveManager::removeOldBackups() { vector<string> backupFiles = getSaveFiles(".bak"); if(Settings::get().getMaxBackups() < backupFiles.size()) { SDLOG(1, "SaveManager: Removing %u old backups\n", backupFiles.size() - Settings::get().getMaxBackups()); for(size_t i=Settings::get().getMaxBackups(); i<backupFiles.size(); ++i) { DeleteFile(backupFiles[i].c_str()); } } }
time_t SaveManager::getLastBackupTime() { if(lastBackupTime == 0) { vector<string> backupFiles = getSaveFiles(".bak"); if(!backupFiles.empty()) { string fn = getFileNameFromPath(backupFiles.front()); sscanf_s(fn.c_str(), "%lu", &lastBackupTime); } } SDLOG(3, "SaveManager: last backup time %ld\n", lastBackupTime); return lastBackupTime; }
void MainLoop::getSaveOptions(const vector<pair<Model::GameType, string>>& games, vector<View::ListElem>& options, vector<SaveFileInfo>& allFiles) { for (auto elem : games) { vector<SaveFileInfo> files = getSaveFiles(userPath, getSaveSuffix(elem.first)); files = ::filter(files, [this] (const SaveFileInfo& info) { return isCompatible(getSaveVersion(info));}); append(allFiles, files); if (!files.empty()) { options.emplace_back(elem.second, View::TITLE); append(options, transform2<View::ListElem>(files, [this] (const SaveFileInfo& info) { return getGameName(info);})); } } }
void SaveManager::backup(const time_t curTime) { SDLOG(1, "SaveManager: Backing up save files\n"); char buffer[MAX_PATH]; vector<string> saveFiles = getSaveFiles(); for(size_t i=0; i<saveFiles.size(); ++i) { string fn = getFileNameFromPath(saveFiles[i]); sprintf_s(buffer, "%s\\%0" TIMESTAMP_LENGTH_STR "lu_", userSaveFolder.c_str(), curTime); string newPath = string(buffer) + fn + ".bak"; if(CopyFile(saveFiles[i].c_str(), newPath.c_str(), false) == 0) { SDLOG(0, "ERROR: SaveManager failed to back up file! (Copying %s to %s)\n", saveFiles[i].c_str(), buffer); } else { SDLOG(1, "SaveManager: Backed up %s\n", fn.c_str()); } } removeOldBackups(); }