Mercurial > trustbridge
view ui/main.cpp @ 632:9a18f096129d
Add registry entries for logging.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 23 Jun 2014 14:56:11 +0200 |
parents | edf269b6e499 |
children | 6c090638b2b4 |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #include "mainwindow.h" #include "processhelp.h" #include "binverify.h" #include "logging.h" #include "strhelp.h" #include <QApplication> #include <QSystemTrayIcon> #include <QtPlugin> #include <QMessageBox> #include <QSettings> #include <QDebug> #include <QTranslator> #ifndef VERSION #define VERSION "0.0.1" #endif #ifndef APPNAME #define APPNAME "TrustBridge" #endif #ifndef ORGANIZATION #define ORGANIZATION "BSI" #endif #ifdef Q_OS_WIN Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) #else Q_IMPORT_PLUGIN(QXcbIntegrationPlugin) #endif int main(int argc, char **argv) { /* First verify integrity even before calling QApplication*/ #ifdef Q_OS_WIN DWORD sizeNeeded = GetModuleFileNameW (NULL, NULL, 0); wchar_t wPath[sizeNeeded + 1]; char *utf8path = NULL; if (sizeNeeded == 0) { PRINTLASTERROR ("Failed to obtain module file name"); syslog_error_printf ("Integrity check failed."); return -1; } DWORD realSize = GetModuleFileNameW (NULL, wPath, sizeNeeded + 1); if (realSize != sizeNeeded) { ERRORPRINTF ("Module name changed"); syslog_error_printf ("Integrity check failed."); return -1; } utf8path = wchar_to_utf8 (wPath, sizeNeeded + 1); if (utf8path == NULL) { ERRORPRINTF ("Failed to convert module path to utf-8"); syslog_error_printf ("Integrity check failed."); return -1; } if (!verify_binary (utf8path, strlen(utf8path)) != VerifyValid) { syslog_error_printf ("Integrity check failed."); xfree(utf8path); #ifdef RELEASE_BUILD return -1; #endif } xfree(utf8path); #else if (!verify_binary ("/proc/self/exe", 14) != VerifyValid) { syslog_error_printf ("Integrity check failed."); #ifdef RELEASE_BUILD return -1; #endif } #endif QApplication app (argc, argv); QApplication::setQuitOnLastWindowClosed(false); QApplication::setOrganizationName(QString::fromLatin1(ORGANIZATION)); QApplication::setApplicationName(QString::fromLatin1(APPNAME)); QApplication::setApplicationVersion(QString::fromLatin1(VERSION)); QSettings::setDefaultFormat(QSettings::IniFormat); QStringList arguments = QApplication::arguments(); bool trayMode = arguments.contains("--tray"); QSettings settings; settings.beginGroup("settings"); bool autoStart = settings.value("autostart", true).toBool(); settings.endGroup(); if (trayMode && !autoStart) { return 0; } if (ProcessHelp::otherProcessesExist(APPNAME)) { qDebug() << "Another " << APPNAME << " process is already running. Exiting."; ProcessHelp::activateWindowForProcess(APPNAME); return 0; } QTranslator translator; if (QLocale::system().name() == "C") { /* Useful for testing / development as the primary target is german */ translator.load(":/l10n/trustbridge_de_DE"); } else { translator.load(":/l10n/trustbridge_" + QLocale::system().name()); qDebug() << "Loading translations for: " << "trustbridge_" + QLocale::system().name(); } app.installTranslator(&translator); if (!QSystemTrayIcon::isSystemTrayAvailable() || !QSystemTrayIcon::supportsMessages()) { QMessageBox::critical(0, QString::fromLatin1(APPNAME), QObject::tr("Couldn't detect any system tray " "on this system. This software can only " "be used in a desktop environment.")); return 1; } MainWindow mainWin(trayMode); return app.exec(); }