view ui/main.cpp @ 856:797aa8d9c785

(issue48) Fallback to HKEY_USERS on hive load failure If the hive can not be loaded it might mean that the user is currently logged on. In that case we can access his registry via HKEY_USERS.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 31 Jul 2014 12:56:26 +0200
parents c9a31544aaab
children 4efd6378c001
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 "logging.h"
#include "selftest.h"
#ifdef WIN32
#include "taskscheduler.h"
#endif

#include <QApplication>
#include <QFile>
#include <QSystemTrayIcon>
#include <QtPlugin>
#include <QMessageBox>
#include <QSettings>
#include <QDebug>
#include <QTranslator>

#include <QStyleFactory>

#ifndef VERSION
#define VERSION "0.0.1"
#endif

#ifndef APPNAME
#define APPNAME "TrustBridge"
#endif

#ifndef STARTUP_FILE_NAME
#define STARTUP_FILE_NAME "trustbridge-tray-starter.cfg"
#endif

#ifndef ORGANIZATION
#define ORGANIZATION "BSI"
#endif

#define COPYRIGHT "Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik \n" \
                  "Software engineering by Intevation GmbH \n\n" \
                  "This file is Free Software under the GNU GPL (v>=2)\n" \
                  "and comes with ABSOLUTELY NO WARRANTY!\n"

#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*/
    if (!selftest()) {
        syslog_error_printf ("Integrity check failed.");
#ifdef RELEASE_BUILD
        return -1;
#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);

    qDebug() << "Application style is: " << app.style()->metaObject()->className();
    qDebug() << "Available styles: " << QStyleFactory::keys().join(", ");

    QStringList arguments = QApplication::arguments();
    bool trayMode = arguments.contains("--tray");

    if (arguments.contains("--version")) {
        printf (APPNAME " Version: %s \n",
                QApplication::applicationVersion().toLocal8Bit().constData());
        printf (COPYRIGHT);
        return 0;
    }

    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()) && trayMode) {
        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;
    }

#ifdef Q_OS_WIN
    {
        TaskScheduler taskSched;
        qDebug() << " task sched done: " << taskSched.createDailyTask(QCoreApplication::applicationFilePath(),
                QString::fromLatin1("--tray"), QTime::currentTime());
    }
#else
    /* Save the display on start so that it might later be used by the cron startup script. */
    QFile startup_file (settings.fileName().replace(APPNAME ".ini", STARTUP_FILE_NAME));
    startup_file.open(QIODevice::WriteOnly);
    startup_file.write(QString::fromLatin1("DISPLAY=%1\n").arg(qgetenv("DISPLAY").constData()).toUtf8());
    startup_file.close();
#endif
    MainWindow mainWin(trayMode);

    return app.exec();
}

http://wald.intevation.org/projects/trustbridge/