AusweisApp2/src/services/Service.cpp

113 lines
2.3 KiB
C++
Raw Normal View History

2017-12-20 14:54:05 +01:00
/*!
2018-03-28 15:10:51 +02:00
* \copyright Copyright (c) 2017-2018 Governikus GmbH & Co. KG, Germany
2017-12-20 14:54:05 +01:00
*/
#include "Service.h"
#include "AppSettings.h"
#include "AppUpdateData.h"
#include "ProviderConfiguration.h"
#include "SingletonHelper.h"
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
#include "ReaderConfiguration.h"
#endif
#include <QMetaObject>
using namespace governikus;
defineSingleton(Service)
Service::Service()
: mTimer(this)
, mUpdateScheduled(true)
, mExplicitSuccessMessage(true)
{
connect(&mTimer, &QTimer::timeout, this, &Service::onTimedUpdateTriggered);
2019-01-03 15:06:22 +01:00
connect(Env::getSingleton<AppUpdater>(), &AppUpdater::fireAppUpdateCheckFinished, this, &Service::onAppUpdateFinished);
2017-12-20 14:54:05 +01:00
mTimer.setSingleShot(true);
mTimer.start(mOneDayInMs);
}
Service& Service::getInstance()
{
return *Instance;
}
void Service::updateConfigurations()
{
2019-01-03 15:06:22 +01:00
QMetaObject::invokeMethod(this, &Service::doConfigurationsUpdate, Qt::QueuedConnection);
2017-12-20 14:54:05 +01:00
}
void Service::updateApp(bool pIgnoreNextVersionskip)
{
mExplicitSuccessMessage = pIgnoreNextVersionskip;
mTimer.start(mOneDayInMs);
2019-01-03 15:06:22 +01:00
QMetaObject::invokeMethod(this, [ = ] {
doAppUpdate(pIgnoreNextVersionskip);
}, Qt::QueuedConnection);
2017-12-20 14:54:05 +01:00
}
void Service::doConfigurationsUpdate()
{
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
Env::getSingleton<ReaderConfiguration>()->update();
#endif
Env::getSingleton<ProviderConfiguration>()->update();
}
void Service::doAppUpdate(bool pIgnoreNextVersionskip)
{
2019-01-03 15:06:22 +01:00
Env::getSingleton<AppUpdater>()->checkAppUpdate(pIgnoreNextVersionskip);
2017-12-20 14:54:05 +01:00
}
void Service::onTimedUpdateTriggered()
{
mUpdateScheduled = true;
Q_EMIT fireUpdateScheduled();
}
bool Service::isUpdateScheduled()
{
return mUpdateScheduled;
}
void Service::runUpdateIfNeeded()
{
if (mUpdateScheduled)
{
2019-01-03 15:06:22 +01:00
mUpdateScheduled = false;
2017-12-20 14:54:05 +01:00
updateConfigurations();
if (Env::getSingleton<AppSettings>()->getGeneralSettings().isAutoUpdateCheck())
{
updateApp();
}
}
}
const AppUpdateData& Service::getUpdateData() const
{
2019-01-03 15:06:22 +01:00
return Env::getSingleton<AppUpdater>()->getUpdateData();
2017-12-20 14:54:05 +01:00
}
void Service::onAppUpdateFinished(bool pUpdateAvailable, const GlobalStatus& pError)
{
if (pUpdateAvailable || pError.isError() || mExplicitSuccessMessage)
{
Q_EMIT fireAppUpdateFinished(pUpdateAvailable, pError);
}
}