diff options
| author | Tannin <devnull@localhost> | 2015-01-03 16:18:38 +0100 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-01-03 16:18:38 +0100 |
| commit | f5c56efeb3f362378459fdc1ddbf1fc71a2351f8 (patch) | |
| tree | 547ec4c2d3a401c5a93827adae689905de13e603 /src | |
| parent | a16e25380f088dc310fbed24d2dcef603357e99a (diff) | |
re-integrated changes missing from the merge
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 2 | ||||
| -rw-r--r-- | src/organizercore.cpp | 66 | ||||
| -rw-r--r-- | src/organizercore.h | 2 |
3 files changed, 46 insertions, 24 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index eaa58db1..5d9b12a9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2243,7 +2243,7 @@ void MainWindow::reinstallMod_clicked() fullInstallationFile = m_OrganizerCore.downloadManager()->getOutputDirectory() + "/" + installationFile;
}
if (QFile::exists(fullInstallationFile)) {
- installMod(fullInstallationFile, modInfo->name());
+ m_OrganizerCore.installMod(fullInstallationFile, modInfo->name());
} else {
QMessageBox::information(this, tr("Failed"), tr("Installation file no longer exists"));
}
diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 68989c8c..1e787670 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -76,15 +76,25 @@ static std::wstring getProcessName(DWORD processId) }
}
-static bool testForSteam()
+bool MainWindow::testForSteam()
{
- DWORD processIDs[1024];
+ size_t currentSize = 1024;
+ std::unique_ptr<DWORD[]> processIDs;
DWORD bytesReturned;
- if (!::EnumProcesses(processIDs, sizeof(processIDs), &bytesReturned)) {
- qWarning("failed to determine if steam is running");
- return true;
+ bool success = false;
+ while (!success) {
+ processIDs.reset(new DWORD[currentSize]);
+ if (!::EnumProcesses(processIDs.get(), currentSize * sizeof(DWORD), &bytesReturned)) {
+ qWarning("failed to determine if steam is running");
+ return true;
+ }
+ if (bytesReturned == (currentSize * sizeof(DWORD))) {
+ // maximum size used, list probably truncated
+ currentSize *= 2;
+ } else {
+ success = true;
+ }
}
-
TCHAR processName[MAX_PATH];
for (unsigned int i = 0; i < bytesReturned / sizeof(DWORD); ++i) {
memset(processName, '\0', sizeof(TCHAR) * MAX_PATH);
@@ -96,13 +106,15 @@ static bool testForSteam() DWORD ignore;
// first module in a process is always the binary
- if (::EnumProcessModules(process, &module, sizeof(HMODULE) * 1, &ignore)) {
+ if (EnumProcessModules(process, &module, sizeof(HMODULE) * 1, &ignore)) {
::GetModuleBaseName(process, module, processName, MAX_PATH);
if ((_tcsicmp(processName, TEXT("steam.exe")) == 0) ||
(_tcsicmp(processName, TEXT("steamservice.exe")) == 0)) {
return true;
}
}
+ } else {
+ qDebug("can't open process %lu: %lu", processIDs[i], ::GetLastError());
}
}
}
@@ -224,16 +236,16 @@ void OrganizerCore::storeSettings() int count = 0;
for (; current != end; ++current) {
const Executable &item = *current;
- if (item.m_Custom || item.m_Toolbar) {
- settings.setArrayIndex(count++);
+ settings.setArrayIndex(count++);
+ settings.setValue("title", item.m_Title);
+ settings.setValue("custom", item.m_Custom);
+ settings.setValue("toolbar", item.m_Toolbar);
+ if (item.m_Custom) {
settings.setValue("binary", item.m_BinaryInfo.absoluteFilePath());
- settings.setValue("title", item.m_Title);
settings.setValue("arguments", item.m_Arguments);
settings.setValue("workingDirectory", item.m_WorkingDirectory);
- settings.setValue("closeOnStart", item.m_CloseMO == ExecutableInfo::CloseMOStyle::DEFAULT_CLOSE);
+ settings.setValue("closeOnStart", item.m_CloseMO == DEFAULT_CLOSE);
settings.setValue("steamAppID", item.m_SteamAppID);
- settings.setValue("custom", item.m_Custom);
- settings.setValue("toolbar", item.m_Toolbar);
}
}
settings.endArray();
@@ -484,21 +496,28 @@ MOBase::IModInterface *OrganizerCore::getMod(const QString &name) MOBase::IModInterface *OrganizerCore::createMod(GuessedValue<QString> &name)
{
- if (!m_InstallationManager.testOverwrite(name)) {
- return NULL;
+ bool merge = false;
+ if (!m_InstallationManager.testOverwrite(name, &merge)) {
+ return nullptr;
}
m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
QString targetDirectory = QDir::fromNativeSeparators(m_Settings.getModDirectory()).append("/").append(name);
- QSettings settingsFile(targetDirectory.mid(0).append("/meta.ini"), QSettings::IniFormat);
+ QSettings settingsFile(targetDirectory + "/meta.ini", QSettings::IniFormat);
+
+ if (!merge) {
+ settingsFile.setValue("modid", 0);
+ settingsFile.setValue("version", "");
+ settingsFile.setValue("newestVersion", "");
+ settingsFile.setValue("category", 0);
+ settingsFile.setValue("installationFile", "");
+
+ settingsFile.beginWriteArray("installedFiles", 0);
+ settingsFile.endArray();
+ }
- settingsFile.setValue("modid", 0);
- settingsFile.setValue("version", "");
- settingsFile.setValue("newestVersion", "");
- settingsFile.setValue("category", 0);
- settingsFile.setValue("installationFile", "");
return ModInfo::createFrom(QDir(targetDirectory), &m_DirectoryStructure).data();
}
@@ -543,7 +562,7 @@ QString OrganizerCore::pluginDataPath() const return pluginPath + "/data";
}
-MOBase::IModInterface *OrganizerCore::installMod(const QString &fileName)
+MOBase::IModInterface *OrganizerCore::installMod(const QString &fileName, const QString &initModName)
{
if (m_CurrentProfile == nullptr) {
return nullptr;
@@ -551,6 +570,9 @@ MOBase::IModInterface *OrganizerCore::installMod(const QString &fileName) bool hasIniTweaks = false;
GuessedValue<QString> modName;
+ if (!initModName.isEmpty()) {
+ modName.update(initModName, GUESS_USER);
+ }
m_CurrentProfile->writeModlistNow();
m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
if (m_InstallationManager.install(fileName, modName, hasIniTweaks)) {
diff --git a/src/organizercore.h b/src/organizercore.h index b362a002..ad63dc51 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -134,7 +134,7 @@ public: virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def) const;
virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
virtual QString pluginDataPath() const;
- virtual MOBase::IModInterface *installMod(const QString &fileName);
+ virtual MOBase::IModInterface *installMod(const QString &fileName, const QString &initModName);
virtual QString resolvePath(const QString &fileName) const;
virtual QStringList listDirectories(const QString &directoryName) const;
virtual QStringList findFiles(const QString &path, const std::function<bool (const QString &)> &filter) const;
|
