diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/application-lib/application.cpp | 47 | ||||
-rw-r--r-- | src/application-lib/application.h | 16 | ||||
-rw-r--r-- | src/application-lib/yamlapplicationscanner.cpp | 2 | ||||
-rw-r--r-- | src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp | 2 | ||||
-rw-r--r-- | src/manager-lib/applicationmanager.cpp | 43 | ||||
-rw-r--r-- | src/manager-lib/applicationmanager.h | 16 | ||||
-rw-r--r-- | src/monitor-lib/processmonitor_p.cpp | 4 | ||||
-rw-r--r-- | src/monitor-lib/processmonitor_p.h | 2 |
8 files changed, 43 insertions, 89 deletions
diff --git a/src/application-lib/application.cpp b/src/application-lib/application.cpp index 08e1bb15..4bb5522e 100644 --- a/src/application-lib/application.cpp +++ b/src/application-lib/application.cpp @@ -244,21 +244,6 @@ \endlist */ /*! - \qmlproperty enumeration Application::runState - \readonly - - This property holds the current run state of the application. It can be one of: - - \list - \li Application.NotRunning - the application has not been started yet - \li Application.StartingUp - the application has been started and is initializing - \li Application.Running - the application is running - \li Application.ShuttingDown - the application has been stopped and is cleaning up (in - multi-process mode this signal is only emitted if the - application terminates gracefully) - \endlist -*/ -/*! \qmlsignal Application::activated() This signal is emitted when the application is started or when it's already running but has @@ -654,9 +639,6 @@ void Application::setCurrentRuntime(AbstractRuntime *rt) const else m_runtime = rt; emit runtimeChanged(); - - if (!rt) - setRunState(Application::NotRunning); } bool Application::isBlocked() const @@ -679,38 +661,11 @@ Application::State Application::state() const return m_nonAliased ? m_nonAliased->m_state : m_state; } -Application::RunState Application::runState() const -{ - return m_nonAliased ? m_nonAliased->m_runState : m_runState; -} - -void Application::setRunState(Application::RunState runState) const -{ - if (m_nonAliased) - m_nonAliased->setRunState(runState); - else - if (runState != m_runState) { - m_runState = runState; - emit runStateChanged(m_runState); - } -} - qreal Application::progress() const { return m_nonAliased ? m_nonAliased->m_progress : m_progress; } -void Application::setNonAliased(const Application *otherApp) -{ - if (m_nonAliased) - disconnect(m_nonAliased, 0, this, 0); - - m_nonAliased = otherApp; - - if (m_nonAliased) - connect(m_nonAliased, &Application::runStateChanged, this, &Application::runStateChanged); -} - Application *Application::readFromDataStream(QDataStream &ds, const QVector<const Application *> &applicationDatabase) Q_DECL_NOEXCEPT_EXPR(false) { QScopedPointer<Application> app(new Application); @@ -769,7 +724,7 @@ Application *Application::readFromDataStream(QDataStream &ds, const QVector<cons bool found = false; for (const Application *otherApp : applicationDatabase) { if (otherApp->id() == baseId) { - app->setNonAliased(otherApp); + app->m_nonAliased = otherApp; found = true; break; } diff --git a/src/application-lib/application.h b/src/application-lib/application.h index 34839484..1bd6fed8 100644 --- a/src/application-lib/application.h +++ b/src/application-lib/application.h @@ -86,20 +86,11 @@ class Application : public QObject Q_PROPERTY(bool supportsApplicationInterface READ supportsApplicationInterface NOTIFY bulkChange) Q_PROPERTY(QString codeDir READ codeDir NOTIFY bulkChange) Q_PROPERTY(State state READ state NOTIFY stateChanged) - Q_PROPERTY(RunState runState READ runState NOTIFY runStateChanged) public: enum ExitStatus { NormalExit, CrashExit, ForcedExit }; Q_ENUM(ExitStatus) - enum RunState { - NotRunning, - StartingUp, - Running, - ShuttingDown, - }; - Q_ENUM(RunState) - QString id() const; int uniqueNumber() const; QString absoluteCodeFilePath() const; @@ -170,8 +161,6 @@ public: Q_ENUM(State) qreal progress() const; - RunState runState() const; - void setSupportsApplicationInterface(bool supportsAppInterface); void setCodeDir(const QString &path); void setManifestDir(const QString &path); @@ -189,12 +178,9 @@ signals: void lastExitStatusChanged() const; void activated() const; void stateChanged(State state) const; - void runStateChanged(RunState state) const; private: Application(); - void setRunState(Application::RunState) const; - void setNonAliased(const Application *); // static part from info.json QString m_id; @@ -238,7 +224,6 @@ private: mutable QAtomicInt m_mounted; mutable State m_state = Installed; - mutable RunState m_runState = NotRunning; mutable qreal m_progress = 0; mutable int m_lastExitCode = 0; @@ -258,6 +243,5 @@ private: QT_END_NAMESPACE_AM Q_DECLARE_METATYPE(const QT_PREPEND_NAMESPACE_AM(Application *)) -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(Application::RunState)) QDebug operator<<(QDebug debug, const QT_PREPEND_NAMESPACE_AM(Application) *app); diff --git a/src/application-lib/yamlapplicationscanner.cpp b/src/application-lib/yamlapplicationscanner.cpp index 80d4b919..139b58f8 100644 --- a/src/application-lib/yamlapplicationscanner.cpp +++ b/src/application-lib/yamlapplicationscanner.cpp @@ -128,7 +128,7 @@ Application *YamlApplicationScanner::scanInternal(const QString &filePath, bool throw Exception(Error::Parse, "aliasId '%1' does not match base application id '%2'") .arg(app->m_id, application->id()); } - app->setNonAliased(application); + app->m_nonAliased = application; } } else if (field == "icon") { app->m_icon = v.toString(); diff --git a/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp b/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp index 98c257d9..2b7c58fe 100644 --- a/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp +++ b/src/dbus-lib/applicationmanagerdbuscontextadaptor.cpp @@ -85,7 +85,7 @@ ApplicationManagerAdaptor::ApplicationManagerAdaptor(QObject *parent) // connect this signal via a lambda, since it needs a type conversion connect(am, &ApplicationManager::applicationRunStateChanged, - this, [this](const QString &id, Application::RunState runState) { + this, [this](const QString &id, ApplicationManager::RunState runState) { emit applicationRunStateChanged(id, runState); }); } diff --git a/src/manager-lib/applicationmanager.cpp b/src/manager-lib/applicationmanager.cpp index 71b1ce4b..91c01f62 100644 --- a/src/manager-lib/applicationmanager.cpp +++ b/src/manager-lib/applicationmanager.cpp @@ -250,6 +250,15 @@ This signal is emitted when the \a runState of the application identified by \a id changed. The \a runState can be one of: + \list + \li ApplicationManager.NotRunning - the application has not been started yet + \li ApplicationManager.StartingUp - the application has been started and is initializing + \li ApplicationManager.Running - the application is running + \li ApplicationManager.ShuttingDown - the application has been stopped and is cleaning up (in + multi-process mode this signal is only emitted if the + application terminates gracefully) + \endlist + For example this signal can be used to restart an application in multi-process mode when it has crashed: @@ -264,8 +273,6 @@ } } \endqml - - See also Application::runState */ /*! @@ -333,13 +340,13 @@ enum Roles QT_BEGIN_NAMESPACE_AM -static Application::RunState runtimeToApplicationRunState(AbstractRuntime::State rtState) +static ApplicationManager::RunState runtimeToManagerState(AbstractRuntime::State rtState) { switch (rtState) { - case AbstractRuntime::Startup: return Application::StartingUp; - case AbstractRuntime::Active: return Application::Running; - case AbstractRuntime::Shutdown: return Application::ShuttingDown; - default: return Application::NotRunning; + case AbstractRuntime::Startup: return ApplicationManager::StartingUp; + case AbstractRuntime::Active: return ApplicationManager::Running; + case AbstractRuntime::Shutdown: return ApplicationManager::ShuttingDown; + default: return ApplicationManager::NotRunning; } } @@ -414,7 +421,6 @@ ApplicationManager *ApplicationManager::createInstance(ApplicationDatabase *adb, qmlRegisterUncreatableType<AbstractContainer>("QtApplicationManager", 1, 0, "Container", qSL("Cannot create objects of type Container")); qRegisterMetaType<AbstractContainer*>("AbstractContainer*"); - qRegisterMetaType<Application::RunState>("Application::RunState"); return s_instance = am.take(); } @@ -774,7 +780,7 @@ bool ApplicationManager::startApplication(const Application *app, const QString return false; } - connect(runtime, &AbstractRuntime::stateChanged, this, [this, app](AbstractRuntime::State newRuntimeState) { + connect(runtime, &AbstractRuntime::stateChanged, this, [this, app](AbstractRuntime::State newState) { QVector<const Application *> apps; //Always emit the actual starting app/alias first apps.append(app); @@ -792,12 +798,8 @@ bool ApplicationManager::startApplication(const Application *app, const QString apps.append(alias); } - Application::RunState newRunState = runtimeToApplicationRunState(newRuntimeState); - - nonAliasedApp->setRunState(newRunState); - for (const Application *app : qAsConst(apps)) { - emit applicationRunStateChanged(app->id(), newRunState); + emit applicationRunStateChanged(app->id(), runtimeToManagerState(newState)); emitDataChanged(app, QVector<int> { IsRunning, IsStartingUp, IsShuttingDown }); } }); @@ -1339,8 +1341,8 @@ void ApplicationManager::preload() else QMetaObject::invokeMethod(qApp, "shutDown", Qt::DirectConnection, Q_ARG(int, 1)); } else if (singleAppMode) { - connect(this, &ApplicationManager::applicationRunStateChanged, [app](const QString &id, Application::RunState runState) { - if ((id == app->id()) && (runState == Application::NotRunning)) { + connect(this, &ApplicationManager::applicationRunStateChanged, [app](const QString &id, ApplicationManager::RunState runState) { + if ((id == app->id()) && (runState == NotRunning)) { QMetaObject::invokeMethod(qApp, "shutDown", Qt::DirectConnection, Q_ARG(int, app->lastExitCode())); } @@ -1615,14 +1617,17 @@ QVariantMap ApplicationManager::get(const QString &id) const return map; } -Application::RunState ApplicationManager::applicationRunState(const QString &id) const +ApplicationManager::RunState ApplicationManager::applicationRunState(const QString &id) const { int index = indexOfApplication(id); if (index < 0) { qCWarning(LogSystem) << "invalid index:" << index; - return Application::NotRunning; + return NotRunning; } - return d->apps.at(index)->runState(); + const Application *app = d->apps.at(index); + if (!app->currentRuntime()) + return NotRunning; + return runtimeToManagerState(app->currentRuntime()->state()); } QT_END_NAMESPACE_AM diff --git a/src/manager-lib/applicationmanager.h b/src/manager-lib/applicationmanager.h index e4e76aac..ffb7125d 100644 --- a/src/manager-lib/applicationmanager.h +++ b/src/manager-lib/applicationmanager.h @@ -47,7 +47,6 @@ #include <QProcess> #include <QJSValue> #include <QtAppManCommon/global.h> -#include <QtAppManApplication/application.h> QT_FORWARD_DECLARE_CLASS(QDir) QT_FORWARD_DECLARE_CLASS(QQmlEngine) @@ -55,6 +54,7 @@ QT_FORWARD_DECLARE_CLASS(QJSEngine) QT_BEGIN_NAMESPACE_AM +class Application; class ApplicationDatabase; class ApplicationManagerPrivate; class AbstractRuntime; @@ -76,6 +76,14 @@ class ApplicationManager : public QAbstractListModel Q_PROPERTY(QJSValue containerSelectionFunction READ containerSelectionFunction WRITE setContainerSelectionFunction NOTIFY containerSelectionFunctionChanged) public: + enum RunState { + NotRunning, + StartingUp, + Running, + ShuttingDown, + }; + Q_ENUM(RunState) + ~ApplicationManager(); static ApplicationManager *createInstance(ApplicationDatabase *adb, bool singleProcess, QString *error); static ApplicationManager *instance(); @@ -134,13 +142,13 @@ public: Q_SCRIPTABLE bool openUrl(const QString &url); Q_SCRIPTABLE QStringList capabilities(const QString &id) const; Q_SCRIPTABLE QString identifyApplication(qint64 pid) const; - Q_SCRIPTABLE QT_PREPEND_NAMESPACE_AM(Application::RunState) applicationRunState(const QString &id) const; + Q_SCRIPTABLE RunState applicationRunState(const QString &id) const; public slots: void shutDown(); signals: - Q_SCRIPTABLE void applicationRunStateChanged(const QString &id, QT_PREPEND_NAMESPACE_AM(Application::RunState) runState); + Q_SCRIPTABLE void applicationRunStateChanged(const QString &id, QT_PREPEND_NAMESPACE_AM(ApplicationManager::RunState) runState); Q_SCRIPTABLE void applicationWasActivated(const QString &id, const QString &aliasId); Q_SCRIPTABLE void countChanged(); @@ -193,3 +201,5 @@ private: }; QT_END_NAMESPACE_AM + +Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(ApplicationManager::RunState)) diff --git a/src/monitor-lib/processmonitor_p.cpp b/src/monitor-lib/processmonitor_p.cpp index 0535da54..3ce11809 100644 --- a/src/monitor-lib/processmonitor_p.cpp +++ b/src/monitor-lib/processmonitor_p.cpp @@ -425,9 +425,9 @@ ProcessMonitorPrivate::~ProcessMonitorPrivate() thread.wait(); } -void ProcessMonitorPrivate::appRuntimeChanged(const QString &id, Application::RunState state) +void ProcessMonitorPrivate::appRuntimeChanged(const QString &id, ApplicationManager::RunState state) { - if (id == appId && (state == Application::Running || state == Application::NotRunning)) + if (id == appId && (state == ApplicationManager::Running || state == ApplicationManager::NotRunning)) determinePid(); } diff --git a/src/monitor-lib/processmonitor_p.h b/src/monitor-lib/processmonitor_p.h index f2d012c8..3d7fb9a7 100644 --- a/src/monitor-lib/processmonitor_p.h +++ b/src/monitor-lib/processmonitor_p.h @@ -224,7 +224,7 @@ signals: public slots: void readingUpdate(); - void appRuntimeChanged(const QString &id, Application::RunState state); + void appRuntimeChanged(const QString &id, ApplicationManager::RunState state); #if defined(AM_MULTI_PROCESS) && !defined(AM_HEADLESS) void applicationWindowClosing(int index, QQuickItem *window); #endif |