summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2019-08-01 17:02:46 +0200
committerRobert Griebl <robert.griebl@pelagicore.com>2019-08-02 16:59:34 +0200
commited9dea417c1346183de52782459eb0b697778245 (patch)
treec56e5e23cd6c95f569028892f31c2184a3b4aa76
parent09c5c6c8aa46691702cf5eb553a21a23baaf34aa (diff)
(Re)implement package and application blocking
This was deliberately left out of the first patch that introduced the package abstraction. As a side effect, the classes from the installer-lib had to be moved to the manager-lib, because the PackageManager is now a central part of the AM, that has to have access to other classes in the manager-lib. Change-Id: I94c1e62d3ffa769f3e053aab8730fea9133a7bc8 Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
-rw-r--r--doc/QtApplicationManagerDoc1
-rw-r--r--examples/applicationmanager/custom-appman/custom-appman.cpp2
-rw-r--r--src/dbus-lib/dbus-lib.pro1
-rw-r--r--src/installer-lib/installer-lib.pro39
-rw-r--r--src/main-lib/applicationinstaller.h6
-rw-r--r--src/main-lib/main-lib.pro1
-rw-r--r--src/manager-lib/application.cpp34
-rw-r--r--src/manager-lib/application.h8
-rw-r--r--src/manager-lib/applicationmanager.cpp29
-rw-r--r--src/manager-lib/applicationmanager.h3
-rw-r--r--src/manager-lib/asynchronoustask.cpp (renamed from src/installer-lib/asynchronoustask.cpp)0
-rw-r--r--src/manager-lib/asynchronoustask.h (renamed from src/installer-lib/asynchronoustask.h)0
-rw-r--r--src/manager-lib/deinstallationtask.cpp (renamed from src/installer-lib/deinstallationtask.cpp)22
-rw-r--r--src/manager-lib/deinstallationtask.h (renamed from src/installer-lib/deinstallationtask.h)8
-rw-r--r--src/manager-lib/installationtask.cpp (renamed from src/installer-lib/installationtask.cpp)0
-rw-r--r--src/manager-lib/installationtask.h (renamed from src/installer-lib/installationtask.h)4
-rw-r--r--src/manager-lib/manager-lib.pro28
-rw-r--r--src/manager-lib/package.cpp (renamed from src/installer-lib/package.cpp)44
-rw-r--r--src/manager-lib/package.h (renamed from src/installer-lib/package.h)15
-rw-r--r--src/manager-lib/packagemanager.cpp (renamed from src/installer-lib/packagemanager.cpp)23
-rw-r--r--src/manager-lib/packagemanager.h (renamed from src/installer-lib/packagemanager.h)6
-rw-r--r--src/manager-lib/packagemanager_p.h (renamed from src/installer-lib/packagemanager_p.h)4
-rw-r--r--src/manager-lib/scopeutilities.cpp (renamed from src/installer-lib/scopeutilities.cpp)0
-rw-r--r--src/manager-lib/scopeutilities.h (renamed from src/installer-lib/scopeutilities.h)0
-rw-r--r--src/manager-lib/sudo.cpp (renamed from src/installer-lib/sudo.cpp)0
-rw-r--r--src/manager-lib/sudo.h (renamed from src/installer-lib/sudo.h)0
-rw-r--r--src/src.pro12
-rw-r--r--src/tools/dumpqmltypes/dumpqmltypes.cpp2
-rw-r--r--src/tools/dumpqmltypes/dumpqmltypes.pro1
-rw-r--r--tests/application/application.pro1
-rw-r--r--tests/applicationinstaller/applicationinstaller.pro1
-rw-r--r--tests/packager-tool/packager-tool.pro1
-rw-r--r--tests/runtime/runtime.pro1
-rw-r--r--tests/sudo/sudo.pro2
34 files changed, 155 insertions, 144 deletions
diff --git a/doc/QtApplicationManagerDoc b/doc/QtApplicationManagerDoc
index 333bf5a6..ccd77195 100644
--- a/doc/QtApplicationManagerDoc
+++ b/doc/QtApplicationManagerDoc
@@ -4,7 +4,6 @@
#include <QtAppManCommon/QtAppManCommon>
#include <QtAppManCrypto/QtAppManCrypto>
#include <QtAppManDBus/QtAppManDBus>
-#include <QtAppManInstaller/QtAppManInstaller>
#include <QtAppManIntentClient/QtAppManIntentClient>
#include <QtAppManIntentServer/QtAppManIntentServer>
#include <QtAppManLauncher/QtAppManLauncher>
diff --git a/examples/applicationmanager/custom-appman/custom-appman.cpp b/examples/applicationmanager/custom-appman/custom-appman.cpp
index e6d8c7d6..0c2cb4dd 100644
--- a/examples/applicationmanager/custom-appman/custom-appman.cpp
+++ b/examples/applicationmanager/custom-appman/custom-appman.cpp
@@ -56,7 +56,7 @@
#include <QtAppManMain/main.h>
#include <QtAppManMain/defaultconfiguration.h>
#include <QtAppManPackage/packageutilities.h>
-#include <QtAppManInstaller/sudo.h>
+#include <QtAppManManager/sudo.h>
QT_USE_NAMESPACE_AM
diff --git a/src/dbus-lib/dbus-lib.pro b/src/dbus-lib/dbus-lib.pro
index 8104bdd5..5635fdf0 100644
--- a/src/dbus-lib/dbus-lib.pro
+++ b/src/dbus-lib/dbus-lib.pro
@@ -32,7 +32,6 @@ ADAPTORS_XML = \
org.freedesktop.notifications.xml \
!disable-installer {
- QT *= appman_installer-private
HEADERS += packagemanagerdbuscontextadaptor.h
SOURCES += packagemanagerdbuscontextadaptor.cpp
ADAPTORS_XML += io.qt.packagemanager.xml
diff --git a/src/installer-lib/installer-lib.pro b/src/installer-lib/installer-lib.pro
deleted file mode 100644
index 0cf2695a..00000000
--- a/src/installer-lib/installer-lib.pro
+++ /dev/null
@@ -1,39 +0,0 @@
-TEMPLATE = lib
-TARGET = QtAppManInstaller
-MODULE = appman_installer
-
-load(am-config)
-
-QT = core network qml
-QT_FOR_PRIVATE *= \
- appman_common-private \
- appman_crypto-private \
- appman_application-private \
- appman_package-private \
-
-CONFIG *= static internal_module
-CONFIG -= create_cmake
-
-include($$SOURCE_DIR/3rdparty/libarchive.pri)
-include($$SOURCE_DIR/3rdparty/libz.pri)
-
-HEADERS += \
- asynchronoustask.h \
- deinstallationtask.h \
- installationtask.h \
- scopeutilities.h \
- package.h \
- packagemanager.h \
- packagemanager_p.h \
- sudo.h \
-
-SOURCES += \
- asynchronoustask.cpp \
- installationtask.cpp \
- deinstallationtask.cpp \
- scopeutilities.cpp \
- packagemanager.cpp \
- package.cpp \
- sudo.cpp \
-
-load(qt_module)
diff --git a/src/main-lib/applicationinstaller.h b/src/main-lib/applicationinstaller.h
index 70dcece8..e902fd21 100644
--- a/src/main-lib/applicationinstaller.h
+++ b/src/main-lib/applicationinstaller.h
@@ -51,9 +51,9 @@
#include <QtAppManCommon/error.h>
#include <QtAppManCommon/logging.h>
#include <QtAppManManager/applicationmanager.h>
-#include <QtAppManInstaller/packagemanager.h>
-#include <QtAppManInstaller/package.h>
-#include <QtAppManInstaller/asynchronoustask.h>
+#include <QtAppManManager/packagemanager.h>
+#include <QtAppManManager/package.h>
+#include <QtAppManManager/asynchronoustask.h>
QT_FORWARD_DECLARE_CLASS(QQmlEngine)
QT_FORWARD_DECLARE_CLASS(QJSEngine)
diff --git a/src/main-lib/main-lib.pro b/src/main-lib/main-lib.pro
index d2933c14..721a54ce 100644
--- a/src/main-lib/main-lib.pro
+++ b/src/main-lib/main-lib.pro
@@ -18,7 +18,6 @@ QT *= \
appman_monitor-private \
appman_shared_main-private \
appman_intent_server-private \
- appman_installer-private \
!headless:QT *= appman_window-private
!disable-external-dbus-interfaces:qtHaveModule(dbus):QT *= dbus appman_dbus-private
diff --git a/src/manager-lib/application.cpp b/src/manager-lib/application.cpp
index 2e489e7f..722ad753 100644
--- a/src/manager-lib/application.cpp
+++ b/src/manager-lib/application.cpp
@@ -284,6 +284,20 @@ Application::Application(ApplicationInfo *info, Package *package)
{
Q_ASSERT(info);
Q_ASSERT(package);
+
+ // handle package blocking: all apps have to be stopped and the stop state has to be reported
+ // back to the package
+ connect(package, &Package::blockedChanged, this, [this](bool blocked) {
+ emit blockedChanged(blocked);
+ if (blocked && (runState() == Am::NotRunning))
+ this->package()->applicationStoppedDueToBlock(id());
+ else if (blocked)
+ stop(true);
+ });
+ connect(this, &Application::runStateChanged, this, [this](Am::RunState runState) {
+ if (isBlocked() && (runState == Am::NotRunning))
+ this->package()->applicationStoppedDueToBlock(id());
+ });
}
bool Application::start(const QString &documentUrl)
@@ -373,6 +387,11 @@ QString Application::name(const QString &language) const
return package()->names().value(language).toString();
}
+bool Application::isBlocked() const
+{
+ return package()->isBlocked();
+}
+
QVariantMap Application::applicationProperties() const
{
return info()->applicationProperties();
@@ -412,21 +431,6 @@ qreal Application::progress() const
return package()->progress();
}
-bool Application::isBlocked() const
-{
- return m_blocked.load() == 1;
-}
-
-bool Application::block()
-{
- return m_blocked.testAndSetOrdered(0, 1);
-}
-
-bool Application::unblock()
-{
- return m_blocked.testAndSetOrdered(1, 0);
-}
-
void Application::setRunState(Am::RunState runState)
{
if (runState != m_runState) {
diff --git a/src/manager-lib/application.h b/src/manager-lib/application.h
index 9e3bcc16..0909ce00 100644
--- a/src/manager-lib/application.h
+++ b/src/manager-lib/application.h
@@ -92,6 +92,7 @@ class Application : public QObject
Q_PROPERTY(QString codeDir READ codeDir NOTIFY bulkChange)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
Q_PROPERTY(QT_PREPEND_NAMESPACE_AM(Am::RunState) runState READ runState NOTIFY runStateChanged)
+ Q_PROPERTY(bool blocked READ isBlocked NOTIFY blockedChanged)
public:
enum State { // kept for compatibility ... in reality moved to class Package
@@ -122,6 +123,7 @@ public:
QStringList supportedMimeTypes() const;
QString name() const;
Q_INVOKABLE QString name(const QString &language) const;
+ bool isBlocked() const;
// Properties that mainly forward content from ApplicationInfo
QString id() const;
@@ -140,9 +142,6 @@ public:
State state() const;
qreal progress() const;
Am::RunState runState() const { return m_runState; }
- bool isBlocked() const;
- bool block();
- bool unblock();
int lastExitCode() const { return m_lastExitCode; }
Am::ExitStatus lastExitStatus() const { return m_lastExitStatus; }
@@ -159,6 +158,7 @@ signals:
void activated();
void stateChanged(State state);
void runStateChanged(Am::RunState state);
+ void blockedChanged(bool blocked);
private:
void setLastExitCodeAndStatus(int exitCode, Am::ExitStatus exitStatus);
@@ -166,8 +166,6 @@ private:
QScopedPointer<ApplicationInfo> m_info;
Package *m_package = nullptr;
AbstractRuntime *m_runtime = nullptr;
- QAtomicInt m_blocked;
- QAtomicInt m_mounted;
Am::RunState m_runState = Am::NotRunning;
diff --git a/src/manager-lib/applicationmanager.cpp b/src/manager-lib/applicationmanager.cpp
index eaa8e205..0bcc9585 100644
--- a/src/manager-lib/applicationmanager.cpp
+++ b/src/manager-lib/applicationmanager.cpp
@@ -1126,30 +1126,6 @@ QString ApplicationManager::identifyApplication(qint64 pid) const
return app ? app->id() : QString();
}
-bool ApplicationManager::blockApplication(const QString &id)
-{
- Application *app = fromId(id);
- if (!app)
- return false;
- if (!app->block())
- return false;
- emitDataChanged(app, QVector<int> { IsBlocked });
- stopApplicationInternal(app, true);
- emitDataChanged(app, QVector<int> { IsRunning });
- return true;
-}
-
-bool ApplicationManager::unblockApplication(const QString &id)
-{
- Application *app = fromId(id);
- if (!app)
- return false;
- if (!app->unblock())
- return false;
- emitDataChanged(app, QVector<int> { IsBlocked });
- return true;
-}
-
void ApplicationManager::shutDown()
{
d->shuttingDown = true;
@@ -1416,6 +1392,11 @@ void ApplicationManager::addApplication(Application *app)
stopApplication(app->id(), forceKill);
};
+ connect(app, &Application::blockedChanged,
+ this, [this, app]() {
+ emitDataChanged(app, QVector<int> { IsBlocked });
+ });
+
d->apps << app;
}
diff --git a/src/manager-lib/applicationmanager.h b/src/manager-lib/applicationmanager.h
index 3e98038c..f221a91b 100644
--- a/src/manager-lib/applicationmanager.h
+++ b/src/manager-lib/applicationmanager.h
@@ -184,9 +184,6 @@ private slots:
void openUrlRelay(const QUrl &url);
void addApplication(Application *app);
- bool blockApplication(const QString &id);
- bool unblockApplication(const QString &id);
-
private:
void emitDataChanged(Application *app, const QVector<int> &roles = QVector<int>());
void emitActivated(Application *app);
diff --git a/src/installer-lib/asynchronoustask.cpp b/src/manager-lib/asynchronoustask.cpp
index 168dc72f..168dc72f 100644
--- a/src/installer-lib/asynchronoustask.cpp
+++ b/src/manager-lib/asynchronoustask.cpp
diff --git a/src/installer-lib/asynchronoustask.h b/src/manager-lib/asynchronoustask.h
index 977140df..977140df 100644
--- a/src/installer-lib/asynchronoustask.h
+++ b/src/manager-lib/asynchronoustask.h
diff --git a/src/installer-lib/deinstallationtask.cpp b/src/manager-lib/deinstallationtask.cpp
index 94551abe..09483022 100644
--- a/src/installer-lib/deinstallationtask.cpp
+++ b/src/manager-lib/deinstallationtask.cpp
@@ -44,14 +44,14 @@
#include "packagemanager.h"
#include "packagemanager_p.h"
#include "installationreport.h"
-#include "packageinfo.h"
+#include "package.h"
#include "exception.h"
#include "scopeutilities.h"
#include "deinstallationtask.h"
QT_BEGIN_NAMESPACE_AM
-DeinstallationTask::DeinstallationTask(PackageInfo *package, const QString &installationPath,
+DeinstallationTask::DeinstallationTask(Package *package, const QString &installationPath,
const QString &documentPath, bool forceDeinstallation,
bool keepDocuments, QObject *parent)
: AsynchronousTask(parent)
@@ -75,7 +75,8 @@ void DeinstallationTask::execute()
{
// these have been checked in PackageManager::removePackage() already
Q_ASSERT(m_package);
- Q_ASSERT(m_package->installationReport());
+ Q_ASSERT(m_package->info());
+ Q_ASSERT(m_package->info()->installationReport());
bool managerApproval = false;
@@ -87,14 +88,13 @@ void DeinstallationTask::execute()
Qt::BlockingQueuedConnection);
if (!managerApproval)
- throw Exception("ApplicationManager rejected the removal of package %1").arg(m_package->id());
-
- // if the app was running before, we now need to wait until is has actually stopped
-//TODO: this needs to be ported to the new PackageManager architecture
-// while (!m_canceled &&
-// (ApplicationManager::instance()->applicationRunState(m_app->id()) != Am::NotRunning)) {
-// QThread::msleep(30);
-// }
+ throw Exception("PackageManager rejected the removal of package %1").arg(m_package->id());
+
+ // if any of the apps in the package were running before, we now need to wait until all of
+ // them have actually stopped
+ while (!m_canceled && !m_package->areAllApplicationsStoppedDueToBlock())
+ QThread::msleep(30);
+
// there's a small race condition here, but not doing a planned cancellation isn't harmful
m_canBeCanceled = false;
if (m_canceled)
diff --git a/src/installer-lib/deinstallationtask.h b/src/manager-lib/deinstallationtask.h
index 895f75c3..9161d1ba 100644
--- a/src/installer-lib/deinstallationtask.h
+++ b/src/manager-lib/deinstallationtask.h
@@ -42,11 +42,11 @@
#pragma once
-#include <QtAppManInstaller/asynchronoustask.h>
+#include <QtAppManManager/asynchronoustask.h>
QT_BEGIN_NAMESPACE_AM
-class PackageInfo;
+class Package;
class InstallationLocation;
class DeinstallationTask : public AsynchronousTask
@@ -54,7 +54,7 @@ class DeinstallationTask : public AsynchronousTask
Q_OBJECT
public:
- DeinstallationTask(PackageInfo *package, const QString &installationPath, const QString &documentPath,
+ DeinstallationTask(Package *package, const QString &installationPath, const QString &documentPath,
bool forceDeinstallation, bool keepDocuments, QObject *parent = nullptr);
bool cancel() override;
@@ -63,7 +63,7 @@ protected:
void execute() override;
private:
- PackageInfo *m_package;
+ Package *m_package;
QString m_installationPath;
QString m_documentPath;
bool m_forceDeinstallation;
diff --git a/src/installer-lib/installationtask.cpp b/src/manager-lib/installationtask.cpp
index ad017286..ad017286 100644
--- a/src/installer-lib/installationtask.cpp
+++ b/src/manager-lib/installationtask.cpp
diff --git a/src/installer-lib/installationtask.h b/src/manager-lib/installationtask.h
index 6fc43f16..5ab947fe 100644
--- a/src/installer-lib/installationtask.h
+++ b/src/manager-lib/installationtask.h
@@ -48,8 +48,8 @@
#include <QMutex>
#include <QtAppManApplication/installationreport.h>
-#include <QtAppManInstaller/asynchronoustask.h>
-#include <QtAppManInstaller/scopeutilities.h>
+#include <QtAppManManager/asynchronoustask.h>
+#include <QtAppManManager/scopeutilities.h>
QT_BEGIN_NAMESPACE_AM
diff --git a/src/manager-lib/manager-lib.pro b/src/manager-lib/manager-lib.pro
index 9ae1ee90..71fad983 100644
--- a/src/manager-lib/manager-lib.pro
+++ b/src/manager-lib/manager-lib.pro
@@ -13,7 +13,6 @@ QT_FOR_PRIVATE *= \
appman_plugininterfaces-private \
appman_intent_server-private \
appman_intent_client-private \
- appman_installer-private \
appman_monitor-private \
CONFIG *= static internal_module
@@ -57,6 +56,9 @@ HEADERS += \
amnamespace.h \
intentaminterface.h \
processstatus.h \
+ package.h \
+ packagemanager.h \
+ packagemanager_p.h \
!headless:HEADERS += \
qmlinprocessapplicationmanagerwindow.h \
@@ -82,6 +84,8 @@ SOURCES += \
debugwrapper.cpp \
intentaminterface.cpp \
processstatus.cpp \
+ packagemanager.cpp \
+ package.cpp \
!headless:SOURCES += \
qmlinprocessapplicationmanagerwindow.cpp \
@@ -95,4 +99,26 @@ qtHaveModule(qml):SOURCES += \
# compile the moc-data into the exporting binary (appman itself)
HEADERS += ../plugin-interfaces/containerinterface.h
+
+!disable-installer {
+
+ QT_FOR_PRIVATE *= \
+ appman_package-private \
+ appman_crypto-private \
+
+ HEADERS += \
+ asynchronoustask.h \
+ deinstallationtask.h \
+ installationtask.h \
+ scopeutilities.h \
+ sudo.h \
+
+ SOURCES += \
+ asynchronoustask.cpp \
+ installationtask.cpp \
+ deinstallationtask.cpp \
+ scopeutilities.cpp \
+ sudo.cpp \
+}
+
load(qt_module)
diff --git a/src/installer-lib/package.cpp b/src/manager-lib/package.cpp
index f9693daa..5f414488 100644
--- a/src/installer-lib/package.cpp
+++ b/src/manager-lib/package.cpp
@@ -44,6 +44,7 @@
#include "package.h"
#include "packageinfo.h"
+#include "applicationinfo.h"
QT_BEGIN_NAMESPACE_AM
@@ -190,4 +191,47 @@ bool Package::canBeRevertedToBuiltIn() const
return m_info && m_updatedInfo;
}
+bool Package::isBlocked() const
+{
+ return m_blocked > 0;
+}
+
+bool Package::block()
+{
+ bool blockedNow = (m_blocked.fetchAndAddOrdered(1) == 0);
+ if (blockedNow) {
+ emit blockedChanged(true);
+ m_blockedApps = info()->applications();
+ }
+ return blockedNow;
+}
+
+bool Package::unblock()
+{
+ bool unblockedNow = (m_blocked.fetchAndSubOrdered(1) == 1);
+ if (unblockedNow) {
+ m_blockedApps.clear();
+ emit blockedChanged(false);
+ }
+ return unblockedNow;
+
+}
+
+void Package::applicationStoppedDueToBlock(const QString &appId)
+{
+ if (!isBlocked())
+ return;
+
+ auto it = std::find_if(m_blockedApps.cbegin(), m_blockedApps.cend(), [appId](const ApplicationInfo *appInfo) {
+ return appInfo->id() == appId;
+ });
+ if (it != m_blockedApps.cend())
+ m_blockedApps.removeOne(*it);
+}
+
+bool Package::areAllApplicationsStoppedDueToBlock() const
+{
+ return isBlocked() && m_blockedApps.isEmpty();
+}
+
QT_END_NAMESPACE_AM
diff --git a/src/installer-lib/package.h b/src/manager-lib/package.h
index 2c134c44..7932f426 100644
--- a/src/installer-lib/package.h
+++ b/src/manager-lib/package.h
@@ -46,7 +46,7 @@
#include <QtAppManApplication/packageinfo.h>
#include <QUrl>
#include <QString>
-
+#include <QAtomicInt>
#include <QObject>
QT_BEGIN_NAMESPACE_AM
@@ -66,6 +66,7 @@ class Package : public QObject
Q_PROPERTY(QVariantMap descriptions READ descriptions NOTIFY bulkChange)
Q_PROPERTY(QStringList categories READ categories NOTIFY bulkChange)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
+ Q_PROPERTY(bool blocked READ isBlocked NOTIFY blockedChanged)
public:
enum State {
@@ -123,9 +124,19 @@ public:
bool canBeRevertedToBuiltIn() const;
+ bool isBlocked() const;
+ bool block();
+ bool unblock();
+
+ // function for Application to report it has stopped after getting a block request
+ void applicationStoppedDueToBlock(const QString &appId);
+ // query function for the installer to verify that it is safe to manipulate binaries
+ bool areAllApplicationsStoppedDueToBlock() const;
+
signals:
void bulkChange();
void stateChanged(State state);
+ void blockedChanged(bool blocked);
private:
QScopedPointer<PackageInfo> m_info;
@@ -133,6 +144,8 @@ private:
State m_state = Installed;
qreal m_progress = 0;
+ QAtomicInt m_blocked;
+ QVector<ApplicationInfo *> m_blockedApps;
};
QT_END_NAMESPACE_AM
diff --git a/src/installer-lib/packagemanager.cpp b/src/manager-lib/packagemanager.cpp
index c84fe833..36cd5d07 100644
--- a/src/installer-lib/packagemanager.cpp
+++ b/src/manager-lib/packagemanager.cpp
@@ -236,7 +236,7 @@ QVariant PackageManager::data(const QModelIndex &index, int role) const
case Icon:
return package->icon();
case IsBlocked:
- return false; //TODO package->isBlocked();
+ return package->isBlocked();
case IsUpdating:
return package->state() != Package::Installed;
case UpdateProgress:
@@ -656,7 +656,7 @@ QVariantMap PackageManager::installedPackageExtraMetaData(const QString &package
}
/*!
- \qmlmethod var PackageManager::installedApplicationExtraSignedMetaData(string packageId)
+ \qmlmethod var PackageManager::installedPackageExtraSignedMetaData(string packageId)
Returns a map of all signed extra metadata in the package header of the package identified
by \a packageId.
@@ -756,7 +756,7 @@ QString PackageManager::removePackage(const QString &packageId, bool keepDocumen
if (Package *package = fromId(packageId)) {
if (package->info()->installationReport()) {
- return enqueueTask(new DeinstallationTask(package->info(), d->installationPath,
+ return enqueueTask(new DeinstallationTask(package, d->installationPath,
d->documentPath, force, keepDocuments));
}
}
@@ -1035,8 +1035,8 @@ bool PackageManager::startingPackageInstallation(PackageInfo *info)
// return false;
if (package) { // update
-// if (!blockApplication(app->id()))
-// return false;
+ if (!package->block())
+ return false;
if (package->isBuiltIn()) {
// overlay the existing base info
@@ -1054,7 +1054,7 @@ bool PackageManager::startingPackageInstallation(PackageInfo *info)
} else { // installation
package = new Package(newInfo.take(), Package::BeingInstalled);
- //app->block();
+ Q_ASSERT(package->block());
beginInsertRows(QModelIndex(), d->packages.count(), d->packages.count());
@@ -1076,14 +1076,14 @@ bool PackageManager::startingPackageRemoval(const QString &id)
if (!package)
return false;
- if (/*package->isBlocked()*/ false || (package->state() != Package::Installed))
+ if (package->isBlocked() || (package->state() != Package::Installed))
return false;
if (package->isBuiltIn() && !package->canBeRevertedToBuiltIn())
return false;
-// if (!blockApplication(id))
-// return false;
+ if (!package->block()) // this will implicitly stop all apps in this package (asynchronously)
+ return false;
package->setState(package->canBeRevertedToBuiltIn() ? Package::BeingDowngraded
: Package::BeingRemoved);
@@ -1120,7 +1120,7 @@ bool PackageManager::finishedPackageInstall(const QString &id)
emitDataChanged(package);
- // unblockApplication(id);
+ package->unblock();
emit package->bulkChange(); // not ideal, but icon and codeDir have changed
break;
}
@@ -1175,13 +1175,12 @@ bool PackageManager::canceledPackageInstall(const QString &id)
package->setProgress(0);
emitDataChanged(package, QVector<int> { IsUpdating });
- // unblockApplication(id);
+ package->unblock();
break;
}
return true;
}
-
bool removeRecursiveHelper(const QString &path)
{
if (PackageManager::instance()->isApplicationUserIdSeparationEnabled() && SudoClient::instance())
diff --git a/src/installer-lib/packagemanager.h b/src/manager-lib/packagemanager.h
index 24cd0f63..9d4419de 100644
--- a/src/installer-lib/packagemanager.h
+++ b/src/manager-lib/packagemanager.h
@@ -46,9 +46,9 @@
#include <QAbstractListModel>
#include <QtAppManCommon/global.h>
#include <QtAppManApplication/packageinfo.h>
-#include <QtAppManInstaller/asynchronoustask.h>
-#include <QtAppManInstaller/installationtask.h>
-#include <QtAppManInstaller/deinstallationtask.h>
+#include <QtAppManManager/asynchronoustask.h>
+#include <QtAppManManager/installationtask.h>
+#include <QtAppManManager/deinstallationtask.h>
QT_FORWARD_DECLARE_CLASS(QQmlEngine)
diff --git a/src/installer-lib/packagemanager_p.h b/src/manager-lib/packagemanager_p.h
index 89d5c287..8c916db2 100644
--- a/src/installer-lib/packagemanager_p.h
+++ b/src/manager-lib/packagemanager_p.h
@@ -48,9 +48,9 @@
#include <QScopedPointer>
#include <QThread>
-#include <QtAppManInstaller/packagemanager.h>
+#include <QtAppManManager/packagemanager.h>
#include <QtAppManApplication/packagedatabase.h>
-#include <QtAppManInstaller/asynchronoustask.h>
+#include <QtAppManManager/asynchronoustask.h>
#include <QtAppManCommon/global.h>
QT_BEGIN_NAMESPACE_AM
diff --git a/src/installer-lib/scopeutilities.cpp b/src/manager-lib/scopeutilities.cpp
index eff1d1bc..eff1d1bc 100644
--- a/src/installer-lib/scopeutilities.cpp
+++ b/src/manager-lib/scopeutilities.cpp
diff --git a/src/installer-lib/scopeutilities.h b/src/manager-lib/scopeutilities.h
index f3d30424..f3d30424 100644
--- a/src/installer-lib/scopeutilities.h
+++ b/src/manager-lib/scopeutilities.h
diff --git a/src/installer-lib/sudo.cpp b/src/manager-lib/sudo.cpp
index a9d661fe..a9d661fe 100644
--- a/src/installer-lib/sudo.cpp
+++ b/src/manager-lib/sudo.cpp
diff --git a/src/installer-lib/sudo.h b/src/manager-lib/sudo.h
index 357261e6..357261e6 100644
--- a/src/installer-lib/sudo.h
+++ b/src/manager-lib/sudo.h
diff --git a/src/src.pro b/src/src.pro
index 3bd37a3c..b5e66223 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -19,11 +19,9 @@ notification_lib.depends = common_lib
package_lib.subdir = package-lib
package_lib.depends = crypto_lib application_lib
-installer_lib.subdir = installer-lib
-installer_lib.depends = package_lib
-
manager_lib.subdir = manager-lib
-manager_lib.depends = application_lib notification_lib intent_server_lib intent_client_lib installer_lib monitor_lib plugin_interfaces
+manager_lib.depends = application_lib notification_lib intent_server_lib intent_client_lib monitor_lib plugin_interfaces
+!disable-installer:manager_lib.depends += package_lib crypto_lib
window_lib.subdir = window-lib
window_lib.depends = manager_lib
@@ -49,7 +47,6 @@ main_lib.depends = shared_main_lib manager_lib window_lib monitor_lib
!disable-external-dbus-interfaces:qtHaveModule(dbus) {
dbus_lib.subdir = dbus-lib
dbus_lib.depends = manager_lib window_lib
- !disable-installer:dbus_lib.depends += installer_lib
main_lib.depends += dbus_lib
}
@@ -64,10 +61,10 @@ tools_testrunner.subdir = tools/testrunner
tools_testrunner.depends = main_lib
tools_dumpqmltypes.subdir = tools/dumpqmltypes
-tools_dumpqmltypes.depends = manager_lib installer_lib window_lib shared_main_lib main_lib launcher_lib
+tools_dumpqmltypes.depends = manager_lib window_lib shared_main_lib main_lib launcher_lib
tools_packager.subdir = tools/packager
-tools_packager.depends = package_lib
+tools_packager.depends = package_lib application_lib crypto_lib
tools_uploader.subdir = tools/uploader
tools_uploader.depends = common_lib
@@ -91,7 +88,6 @@ SUBDIRS = \
qtHaveModule(qml):SUBDIRS += \
notification_lib \
manager_lib \
- installer_lib \
window_lib \
monitor_lib \
shared_main_lib \
diff --git a/src/tools/dumpqmltypes/dumpqmltypes.cpp b/src/tools/dumpqmltypes/dumpqmltypes.cpp
index d5ce1ab6..3690dc89 100644
--- a/src/tools/dumpqmltypes/dumpqmltypes.cpp
+++ b/src/tools/dumpqmltypes/dumpqmltypes.cpp
@@ -27,7 +27,7 @@
**
****************************************************************************/
-#include <QtAppManInstaller/packagemanager.h>
+#include <QtAppManManager/packagemanager.h>
#include <QtAppManMain/applicationinstaller.h>
#include <QtAppManManager/applicationmanager.h>
#include <QtAppManManager/applicationmodel.h>
diff --git a/src/tools/dumpqmltypes/dumpqmltypes.pro b/src/tools/dumpqmltypes/dumpqmltypes.pro
index ff13f5a7..acde4c97 100644
--- a/src/tools/dumpqmltypes/dumpqmltypes.pro
+++ b/src/tools/dumpqmltypes/dumpqmltypes.pro
@@ -10,7 +10,6 @@ QT *= \
appman_common-private \
appman_application-private \
appman_manager-private \
- appman_installer-private \
appman_notification-private \
appman_window-private \
appman_launcher-private \
diff --git a/tests/application/application.pro b/tests/application/application.pro
index b2a75f71..cc13702e 100644
--- a/tests/application/application.pro
+++ b/tests/application/application.pro
@@ -6,6 +6,5 @@ QT *= \
appman_common-private \
appman_application-private \
appman_manager-private \
- appman_installer-private \
SOURCES += tst_application.cpp
diff --git a/tests/applicationinstaller/applicationinstaller.pro b/tests/applicationinstaller/applicationinstaller.pro
index 37532e10..b84ffac4 100644
--- a/tests/applicationinstaller/applicationinstaller.pro
+++ b/tests/applicationinstaller/applicationinstaller.pro
@@ -9,6 +9,5 @@ QT *= \
appman_application-private \
appman_package-private \
appman_manager-private \
- appman_installer-private
SOURCES += tst_applicationinstaller.cpp
diff --git a/tests/packager-tool/packager-tool.pro b/tests/packager-tool/packager-tool.pro
index 7e69306b..08876ac6 100644
--- a/tests/packager-tool/packager-tool.pro
+++ b/tests/packager-tool/packager-tool.pro
@@ -8,7 +8,6 @@ QT *= \
appman_application-private \
appman_package-private \
appman_manager-private \
- appman_installer-private \
INCLUDEPATH += $$PWD/../../src/tools/packager
SOURCES += $$PWD/../../src/tools/packager/packagingjob.cpp
diff --git a/tests/runtime/runtime.pro b/tests/runtime/runtime.pro
index 16e6ed0a..64c550cc 100644
--- a/tests/runtime/runtime.pro
+++ b/tests/runtime/runtime.pro
@@ -7,6 +7,5 @@ QT *= \
appman_common-private \
appman_application-private \
appman_manager-private \
- appman_installer-private \
SOURCES += tst_runtime.cpp
diff --git a/tests/sudo/sudo.pro b/tests/sudo/sudo.pro
index 9745e2fc..95be319b 100644
--- a/tests/sudo/sudo.pro
+++ b/tests/sudo/sudo.pro
@@ -6,6 +6,6 @@ include($$PWD/../tests.pri)
QT *= \
appman_common-private \
- appman_installer-private \
+ appman_manager-private \
SOURCES += tst_sudo.cpp