summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp47
1 files changed, 18 insertions, 29 deletions
diff --git a/src/main.cpp b/src/main.cpp
index ac903615..05dc54d7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -80,24 +80,6 @@ using namespace MOBase;
using namespace MOShared;
-void removeOldLogfiles()
-{
- QFileInfoList files = QDir(ToQString(GameInfo::instance().getLogDir())).entryInfoList(QStringList("ModOrganizer*.log"),
- QDir::Files, QDir::Name);
-
- if (files.count() > 5) {
- QStringList deleteFiles;
- for (int i = 0; i < files.count() - 5; ++i) {
- deleteFiles.append(files.at(i).absoluteFilePath());
- }
-
- if (!shellDelete(deleteFiles)) {
- qWarning("failed to remove log files: %s", qPrintable(windowsErrorString(::GetLastError())));
- }
- }
-}
-
-
// set up required folders (for a first install or after an update or to fix a broken installation)
bool bootstrap()
{
@@ -111,7 +93,7 @@ bool bootstrap()
}
// cycle logfile
- removeOldLogfiles();
+ removeOldFiles(ToQString(GameInfo::instance().getLogDir()), "ModOrganizer*.log", 5, QDir::Name);
// create organizer directories
QString dirNames[] = {
@@ -120,8 +102,7 @@ bool bootstrap()
QDir::fromNativeSeparators(ToQString(gameInfo.getDownloadDir())),
QDir::fromNativeSeparators(ToQString(gameInfo.getOverwriteDir())),
QDir::fromNativeSeparators(ToQString(gameInfo.getLogDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getTutorialDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getOrganizerDirectory()) + "/boss")
+ QDir::fromNativeSeparators(ToQString(gameInfo.getTutorialDir()))
};
static const int NUM_DIRECTORIES = sizeof(dirNames) / sizeof(QString);
@@ -158,6 +139,10 @@ bool bootstrap()
// verify the hook-dll exists
QString dllName = qApp->applicationDirPath() + "/" + ToQString(AppConfig::hookDLLName());
+ if (::GetModuleHandleW(ToWString(dllName).c_str()) != NULL) {
+ throw std::runtime_error("hook.dll already loaded! You can't start Mod Organizer from within itself (not even indirectly)");
+ }
+
HMODULE dllMod = ::LoadLibraryW(ToWString(dllName).c_str());
if (dllMod == NULL) {
throw windows_error("hook.dll is missing or invalid");
@@ -210,7 +195,6 @@ bool isNxmLink(const QString &link)
return link.left(6).toLower() == "nxm://";
}
-
LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs)
{
typedef BOOL (WINAPI *FuncMiniDumpWriteDump)(HANDLE process, DWORD pid, HANDLE file, MINIDUMP_TYPE dumpType,
@@ -272,14 +256,11 @@ LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs
return result;
}
-
void registerMetaTypes()
{
registerExecutable();
}
-
-
bool HaveWriteAccess(const std::wstring &path)
{
bool writable = false;
@@ -330,7 +311,6 @@ bool HaveWriteAccess(const std::wstring &path)
}
-
int main(int argc, char *argv[])
{
MOApplication application(argc, argv);
@@ -349,7 +329,7 @@ int main(int argc, char *argv[])
, ToWString(QDir::currentPath()).c_str(), SW_SHOWNORMAL);
return 1;
}
- LogBuffer::init(200, QtDebugMsg, application.applicationDirPath() + "/logs/mo_interface.log");
+ LogBuffer::init(100, QtDebugMsg, application.applicationDirPath() + "/logs/mo_interface.log");
qDebug("Working directory: %s", qPrintable(QDir::toNativeSeparators(QDir::currentPath())));
qDebug("MO at: %s", qPrintable(QDir::toNativeSeparators(application.applicationDirPath())));
@@ -545,7 +525,11 @@ int main(int argc, char *argv[])
arguments.removeAt(profileIndex);
arguments.removeAt(profileIndex);
}
- qDebug("configured profile: %s", qPrintable(selectedProfileName));
+ if (selectedProfileName.isEmpty()) {
+ qDebug("no configured profile");
+ } else {
+ qDebug("configured profile: %s", qPrintable(selectedProfileName));
+ }
// if we have a command line parameter, it is either a nxm link or
// a binary to start
@@ -555,7 +539,12 @@ int main(int argc, char *argv[])
arguments.removeFirst(); // remove application name (ModOrganizer.exe)
arguments.removeFirst(); // remove binary name
// pass the remaining parameters to the binary
- mainWindow.startApplication(exeName, arguments, QString(), selectedProfileName);
+ try {
+ mainWindow.startApplication(exeName, arguments, QString(), selectedProfileName);
+ } catch (const std::exception &e) {
+ reportError(QObject::tr("failed to start application: %1").arg(e.what()));
+ }
+
return 0;
}