Exemple #1
0
SaveManager::SaveManager()
	: lastBackupTime(0)
{
	if (!Settings::get().getEnableBackups())
		return;

	PWSTR buffer;
	HRESULT hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &buffer);
	if (FAILED(hr) || !buffer)
		return;

	std::wstring documents(buffer);
	CoTaskMemFree(buffer);

	std::wstring search_userdir = StringFromFormat(L"%s%s", documents.c_str(), L"\\NBGI\\DarkSouls\\*");

	// find user save folder
	WIN32_FIND_DATAW userSaveFolderData;
	HANDLE searchHandle = FindFirstFileW(search_userdir.c_str(), &userSaveFolderData);
	if (searchHandle != INVALID_HANDLE_VALUE)
	{
		do
		{
			if (wcslen(userSaveFolderData.cFileName) > 2)
			{
				userSaveFolder = StringFromFormat(L"%s\\NBGI\\DarkSouls\\%s", documents.c_str(), userSaveFolderData.cFileName);
				userBackupFolder = StringFromFormat(L"%s\\backup", userSaveFolder.c_str());
				saveGameFile = StringFromFormat(L"%s\\DRAKS0005.sl2", userSaveFolder.c_str());

				CreateDirectoryW(userBackupFolder.c_str(), NULL);

				SDLOG(0, "SaveManager: user save folder is %ls", userSaveFolder.c_str());
				SDLOG(0, "SaveManager: user backup folder is %ls", userBackupFolder.c_str());
				break;
			}

		} while (FindNextFileW(searchHandle, &userSaveFolderData));
	}

	if (userBackupFolder.empty())
	{
		SDLOG(0, "SaveManager: could not determine user save folder");
		return;
	}

	std::wstring newPath = StringFromFormat(L"%s\\start.bak", userBackupFolder.c_str());
	CopyFileW(saveGameFile.c_str(), newPath.c_str(), FALSE);

	removeOldBackups();
}
Exemple #2
0
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();
}
Exemple #3
0
void SaveManager::autoBackup(const time_t curTime)
{
	SDLOG(1, "SaveManager: Backing up save files");

	std::wstring newPath = StringFromFormat(L"%s\\%012llu_auto.bak", userBackupFolder.c_str(), curTime);

	if (CopyFileW(saveGameFile.c_str(), newPath.c_str(), FALSE) == FALSE)
	{
		SDLOG(0, "ERROR: SaveManager failed to back up file! (Copying %ls to %ls)", saveGameFile.c_str(), newPath.c_str());
	}
	else
	{
		SDLOG(1, "SaveManager: Backed up %ls", saveGameFile.c_str());
		MessageBeep(MB_ICONASTERISK);
	}

	removeOldBackups();
}
Exemple #4
0
void SaveManager::init() {
	if(Settings::get().getEnableBackups()) {
		CHAR documents[MAX_PATH];
		HRESULT hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, documents);
		char buffer[MAX_PATH];
		sprintf_s(buffer, "%s%s", documents, "\\NBGI\\DarkSouls\\*");

		// find user save folder
		WIN32_FIND_DATA userSaveFolderData;
		HANDLE searchHandle = FindFirstFile(buffer, &userSaveFolderData);
		bool found = false;
		if(searchHandle != INVALID_HANDLE_VALUE) {
            do {
                std::string fn = userSaveFolderData.cFileName;
                bool dir = userSaveFolderData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
                bool saveFile = fn.substr(fn.find_last_of(".") + 1) == "sl2";
                // newer versions don't contain an additional folder under NBGI\\DarkSouls
                if (fn.size() > 2 && (dir || saveFile)) {
                    if (dir)
					    sprintf_s(buffer, "%s%s%s", documents, "\\NBGI\\DarkSouls\\", userSaveFolderData.cFileName);
                    else
                        sprintf_s(buffer, "%s%s", documents, "\\NBGI\\DarkSouls");
					userSaveFolder = string(buffer);
					SDLOG(0, "SaveManager: user save folder is %s\n", userSaveFolder.c_str());
					found = true;
					break;
				}
			} while(FindNextFile(searchHandle, &userSaveFolderData));
		}
		if(!found) {
			SDLOG(0, "SaveManager: could not determine user save folder\n");
			return;
		}

		removeOldBackups();
	}
}