Files
QtZeiterfassung/main.cpp
T

139 lines
4.7 KiB
C++
Raw Permalink Normal View History

2017-12-02 10:50:30 +01:00
#include <QApplication>
#include <QSplashScreen>
#include <QPixmap>
#include <QInputDialog>
#include <QMessageBox>
2017-12-03 22:22:07 +01:00
#include "zeiterfassungsettings.h"
2017-12-02 10:50:30 +01:00
#include "zeiterfassung.h"
#include "eventloopwithstatus.h"
#include "dialogs/authenticationdialog.h"
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
2017-12-02 21:37:26 +01:00
qSetMessagePattern("%{time dd.MM.yyyy HH:mm:ss.zzz} "
"["
"%{if-debug}D%{endif}"
"%{if-info}I%{endif}"
"%{if-warning}W%{endif}"
"%{if-critical}C%{endif}"
"%{if-fatal}F%{endif}"
"] "
"%{function}(): "
"%{message}");
2017-12-03 22:15:03 +01:00
QLocale::setDefault(QLocale(QLocale::German, QLocale::Austria));
2017-12-02 10:50:30 +01:00
QCoreApplication::setOrganizationDomain(QStringLiteral("brunner.ninja"));
QCoreApplication::setOrganizationName(QStringLiteral("db-software"));
QCoreApplication::setApplicationName(QStringLiteral("zeiterfassung"));
QCoreApplication::setApplicationVersion(QStringLiteral("1.0"));
QSplashScreen splashScreen(QPixmap(":/zeiterfassung/images/splash.png"));
splashScreen.showMessage(QObject::tr("Loading settings..."));
splashScreen.show();
2017-12-03 22:22:07 +01:00
ZeiterfassungSettings settings(&app);
2017-12-02 10:50:30 +01:00
splashScreen.showMessage(QObject::tr("Loading login page..."));
2017-12-03 22:22:07 +01:00
Zeiterfassung erfassung(settings.url(), &app);
2017-12-02 10:50:30 +01:00
{
EventLoopWithStatus eventLoop;
QObject::connect(&erfassung, &Zeiterfassung::loginPageFinished, &eventLoop, &EventLoopWithStatus::quitWithStatus);
again1:
erfassung.doLoginPage();
eventLoop.exec();
if(!eventLoop.success())
{
bool ok;
QMessageBox::warning(&splashScreen, QObject::tr("Could not access Zeiterfassung"),
QObject::tr("The Zeiterfassung could not be accessed:\n\n%0").arg(eventLoop.message()));
auto url = QInputDialog::getText(&splashScreen, QObject::tr("Base url"),
QObject::tr("Please enter the base url to the Zeiterfassung:"),
2017-12-03 22:22:07 +01:00
QLineEdit::Normal, settings.url(), &ok);
2017-12-02 10:50:30 +01:00
if(!ok)
return -1;
2017-12-03 22:22:07 +01:00
settings.setUrl(url);
2017-12-02 10:50:30 +01:00
erfassung.setUrl(url);
goto again1;
}
}
splashScreen.showMessage(QObject::tr("Authenticating..."));
2017-12-03 22:22:07 +01:00
if(settings.username().isNull() || settings.password().isNull())
2017-12-02 10:50:30 +01:00
{
AuthenticationDialog dialog(&splashScreen);
if(dialog.exec() != QDialog::Accepted)
return -1;
2017-12-03 22:22:07 +01:00
settings.setUsername(dialog.username());
settings.setPassword(dialog.password());
2017-12-02 10:50:30 +01:00
}
{
EventLoopWithStatus eventLoop;
QObject::connect(&erfassung, &Zeiterfassung::loginFinished, &eventLoop, &EventLoopWithStatus::quitWithStatus);
again2:
2017-12-03 22:22:07 +01:00
erfassung.doLogin(settings.username(), settings.password());
2017-12-02 10:50:30 +01:00
eventLoop.exec();
if(!eventLoop.success())
{
QMessageBox::warning(&splashScreen, QObject::tr("Could not authenticate with Zeiterfassung"),
QObject::tr("The Zeiterfassung authentication was not successful:\n\n%0").arg(eventLoop.message()));
AuthenticationDialog dialog(&splashScreen);
2017-12-03 22:22:07 +01:00
dialog.setUsername(settings.username());
dialog.setPassword(settings.password());
2017-12-02 10:50:30 +01:00
if(dialog.exec() != QDialog::Accepted)
return -1;
2017-12-03 22:22:07 +01:00
settings.setUsername(dialog.username());
settings.setPassword(dialog.password());
2017-12-02 10:50:30 +01:00
goto again2;
}
}
splashScreen.showMessage(QObject::tr("Getting user information..."));
Zeiterfassung::UserInfo userInfo;
{
EventLoopWithStatus eventLoop;
QObject::connect(&erfassung, &Zeiterfassung::userInfoFinished,
[&](bool success, const QString &message, const Zeiterfassung::UserInfo &_userInfo) {
Q_UNUSED(message)
if(success)
userInfo = _userInfo;
});
QObject::connect(&erfassung, &Zeiterfassung::userInfoFinished, &eventLoop, &EventLoopWithStatus::quitWithStatus);
erfassung.doUserInfo();
eventLoop.exec();
if(!eventLoop.success())
{
QMessageBox::warning(&splashScreen, QObject::tr("Could not get user information!"),
QObject::tr("Could not get user information:\n\n%0").arg(eventLoop.message()));
return -1;
}
}
MainWindow mainWindow(settings, erfassung, userInfo);
mainWindow.show();
splashScreen.finish(&mainWindow);
return app.exec();
}