1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/*
Copyright (C) 2015 Sebastian Herbord. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "gamebryolocalsavegames.h"
#include "registry.h"
#include <QtDebug>
#include <iprofile.h>
#include <stddef.h>
#include <string>
#include "gamegamebryo.h"
GamebryoLocalSavegames::GamebryoLocalSavegames(const GameGamebryo* game,
const QString& iniFileName)
: m_Game{game}, m_IniFileName(iniFileName)
{}
MappingType GamebryoLocalSavegames::mappings(const QDir& profileSaveDir) const
{
return {{profileSaveDir.absolutePath(), localSavesDirectory().absolutePath(), true,
true}};
}
QString GamebryoLocalSavegames::localSavesDummy() const
{
return "__MO_Saves\\";
}
QDir GamebryoLocalSavegames::localSavesDirectory() const
{
QString dummy = localSavesDummy();
dummy.replace("\\", "/");
return QDir(m_Game->myGamesPath()).absoluteFilePath(dummy);
}
QDir GamebryoLocalSavegames::localGameDirectory() const
{
return QDir(m_Game->myGamesPath()).absolutePath();
}
bool GamebryoLocalSavegames::prepareProfile(MOBase::IProfile* profile)
{
bool enable = profile->localSavesEnabled();
QString basePath = profile->localSettingsEnabled()
? profile->absolutePath()
: localGameDirectory().absolutePath();
QString iniFilePath = basePath + "/" + m_IniFileName;
QString saveIni = profile->absolutePath() + "/" + "savepath.ini";
// Get the current sLocalSavePath
QString currentPath =
GameGamebryo::readIniValue(iniFilePath, "General", "sLocalSavePath", "SKIP_ME");
bool alreadyEnabled = (currentPath == localSavesDummy());
// Get the current bUseMyGamesDirectory
QString currentMyGames = GameGamebryo::readIniValue(
iniFilePath, "General", "bUseMyGamesDirectory", "SKIP_ME");
// Create the __MO_Saves directory if local saves are enabled and it doesn't exist
if (enable) {
QDir saves = localSavesDirectory();
if (!saves.exists()) {
saves.mkdir(".");
}
}
// Set the path to __MO_Saves if it's not already
if (enable && !alreadyEnabled) {
// If the path is not blank, save it to savepath.ini
if (currentPath != "SKIP_ME") {
MOBase::WriteRegistryValue("General", "sLocalSavePath", currentPath, saveIni);
}
if (currentMyGames != "SKIP_ME") {
MOBase::WriteRegistryValue("General", "bUseMyGamesDirectory", currentMyGames,
saveIni);
}
MOBase::WriteRegistryValue("General", "sLocalSavePath", localSavesDummy(),
iniFilePath);
MOBase::WriteRegistryValue("General", "bUseMyGamesDirectory", "1", iniFilePath);
}
// Get rid of the local saves setting if it's still there
if (!enable && alreadyEnabled) {
// If savepath.ini exists, use it and delete it
if (QFile::exists(saveIni)) {
QString savedPath =
GameGamebryo::readIniValue(saveIni, "General", "sLocalSavePath", "DELETE_ME");
QString savedMyGames = GameGamebryo::readIniValue(
saveIni, "General", "bUseMyGamesDirectory", "DELETE_ME");
if (savedPath != "DELETE_ME") {
MOBase::WriteRegistryValue("General", "sLocalSavePath", savedPath, iniFilePath);
} else {
MOBase::RemoveRegistryValue("General", "sLocalSavePath", iniFilePath);
}
if (savedMyGames != "DELETE_ME") {
MOBase::WriteRegistryValue("General", "bUseMyGamesDirectory", savedMyGames,
iniFilePath);
} else {
MOBase::RemoveRegistryValue("General", "bUseMyGamesDirectory", iniFilePath);
}
QFile::remove(saveIni);
}
// Otherwise just delete the setting
else {
MOBase::RemoveRegistryValue("General", "sLocalSavePath", iniFilePath);
MOBase::RemoveRegistryValue("General", "bUseMyGamesDirectory", iniFilePath);
}
}
return enable != alreadyEnabled;
}
|