int main(int argc, char** argv) { gtk_init(&argc, &argv); const char* text = "An error has occured that is preventing Desura from running correctly. " "Restarting Desura should allow you to continue, otherwise you can clean " "your Desura install by forcing an update."; if (!ChangeToAppDir()) return 1; GtkWidget* dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_NONE, "%s", text); gtk_window_set_title(GTK_WINDOW(dialog), "Desura Error"); gtk_dialog_add_button(GTK_DIALOG(dialog), "Restart Desura", 1); gtk_dialog_add_button(GTK_DIALOG(dialog), "Force Update", 2); gtk_dialog_add_button(GTK_DIALOG(dialog), "Exit", 3); g_signal_connect(G_OBJECT(dialog), "delete-event", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_response), NULL); gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_widget_show_all(dialog); gtk_main(); return 0; }
int MainApp::run() { ERROR_OUTPUT("#########################################"); ERROR_OUTPUT("# DEBUG BUILD #"); ERROR_OUTPUT("#########################################"); if (!ChangeToAppDir()) return -1; bool usingGDB = false; #ifdef WITH_GTEST bool runGtest = false; #endif #ifdef DESURA_OFFICIAL_BUILD bool forceUpdate = false; bool skipUpdate = false; bool testDownload = false; bool testInstall = false; #endif for (int x=0; x<m_Argc; x++) { if (!m_Argv[x]) continue; if (strcasecmp(m_Argv[x], "-g") == 0 || strcasecmp(m_Argv[x], "--gdb") == 0) usingGDB = true; #ifdef WITH_GTEST if (strcasecmp(m_Argv[x], "-u") == 0 || strcasecmp(m_Argv[x], "--unittests") == 0) runGtest = true; #endif #ifdef DESURA_OFFICIAL_BUILD if (strcasecmp(m_Argv[x], "-td") == 0 || strcasecmp(m_Argv[x], "--testdownload") == 0) testDownload = true; if (strcasecmp(m_Argv[x], "-ti") == 0 || strcasecmp(m_Argv[x], "--testinstall") == 0) testInstall = true; if (strcasecmp(m_Argv[x], "-s") == 0 || strcasecmp(m_Argv[x], "--skipupdate") == 0 || strncasecmp(m_Argv[x], "desura://", 9) == 0) skipUpdate = true; if (strcasecmp(m_Argv[x], "-f") == 0 || strcasecmp(m_Argv[x], "--forceupdate") == 0) forceUpdate = true; #endif } #ifdef DESURA_OFFICIAL_BUILD #ifdef WIN32 if (testInstall) return InstallFilesForTest(); if (testDownload) return DownloadFilesForTest(); #endif #endif #ifndef DEBUG std::string lockPath = UTIL::LIN::expandPath("$XDG_RUNTIME_DIR/desura/lock"); if (!FileExists(lockPath.c_str())) // if desura isn't already running - simple check { #ifdef DESURA_OFFICIAL_BUILD if (CheckForUpdate(forceUpdate, skipUpdate)) return 0; #endif checkUnityWhitelist(); } #endif if (!loadUICore()) { ERROR_OUTPUT(dlerror()); return -1; } #ifdef WITH_GTEST if (runGtest) { return m_pUICore->runUnitTests(m_Argc, m_Argv); } #endif if (!m_pUICore->singleInstantCheck()) { sendArgs(); return 0; } #ifndef DEBUG if (!loadCrashHelper()) return -1; #endif m_pUICore->disableSingleInstanceLock(); if (usingGDB) { ERROR_OUTPUT("Running with GDB -- Not setting up dump handler"); } else { MiniDumpGenerator m_MDumpHandle; m_MDumpHandle.showMessageBox(true); m_MDumpHandle.setCrashCallback(&MainApp::onCrash); } return m_pUICore->initWxWidgets(m_Argc, m_Argv); }