diff options
Diffstat (limited to 'src/global.cpp')
-rw-r--r-- | src/global.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/global.cpp b/src/global.cpp new file mode 100644 index 0000000..7039bc1 --- /dev/null +++ b/src/global.cpp @@ -0,0 +1,51 @@ +#include "global.h" +#include <QTimer> +#include <QModelIndex> +#include <QString> +#include <QEventLoop> +#include <QDebug> +#include <QCoreApplication> + +bool Global::m_testMode = false; + +QLightDM::Greeter* Global::m_Greeter = nullptr; +QLightDM::PowerInterface* Global::m_Power = nullptr; +QLightDM::SessionsModel* Global::m_Sessions = nullptr; + +void Global::initGreeter() +{ + m_Greeter = new QLightDM::Greeter(); + if (!m_Greeter->connectSync()) { + m_Greeter->deleteLater(); + m_Greeter = nullptr; + } +} + +bool Global::autoLoginGuest() +{ + GreeterCb *cb = new GreeterCb(); + GreeterCb::connect(greeter(), SIGNAL(authenticationComplete()), cb, SLOT(authenticationComplete())); + GreeterCb::connect(greeter(), SIGNAL(autologinTimerExpired()), cb, SLOT(autologinTimerExpired())); + GreeterCb::connect(greeter(), SIGNAL(reset()), cb, SLOT(reset())); + qWarning() << "Trying to auth as guest"; + greeter()->authenticateAsGuest(); + QTimer::singleShot(3000, cb, SLOT(customTimeout())); + while (!cb->authComplete && !cb->authError && greeter()->inAuthentication()) { + QCoreApplication::instance()->processEvents(QEventLoop::AllEvents); + } + qWarning() << "Complete:" << cb->authComplete << "Error:" + << cb->authError << "InAuth:" << greeter()->inAuthentication() << "isAuthenticated" << greeter()->isAuthenticated(); + if (cb->authComplete && greeter()->isAuthenticated()) { + cb->deleteLater(); + return startSession(); + } + cb->deleteLater(); + return false; +} + +bool Global::startSession() +{ + QModelIndex i = sessions()->index(0, 0); + QString s = m_Sessions->data(i, QLightDM::SessionsModel::KeyRole).toString(); + return m_Greeter->startSessionSync(s); +} |