summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 2f78b5d00..5fdba4bd0 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -220,6 +220,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core)
, m_userSetBinaryMarker(false)
, m_checkAvailableSpace(true)
, m_autoAcceptLicenses(false)
+ , m_disableWriteMaintenanceTool(false)
{
}
@@ -255,6 +256,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q
, m_userSetBinaryMarker(false)
, m_checkAvailableSpace(true)
, m_autoAcceptLicenses(false)
+ , m_disableWriteMaintenanceTool(false)
{
foreach (const OperationBlob &operation, performedOperations) {
QScopedPointer<QInstaller::Operation> op(KDUpdater::UpdateOperationFactory::instance()
@@ -1178,6 +1180,11 @@ void PackageManagerCorePrivate::writeMaintenanceToolBinaryData(QFileDevice *outp
void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOperations)
{
+ if (m_disableWriteMaintenanceTool) {
+ qCDebug(QInstaller::lcInstallerInstallLog()) << "Maintenance tool writing disabled.";
+ return;
+ }
+
bool gainedAdminRights = false;
if (!directoryWritable(targetDir())) {
m_core->gainAdminRights();
@@ -1610,7 +1617,24 @@ bool PackageManagerCorePrivate::runInstaller()
}
}
}
+ emit m_core->titleMessageChanged(tr("Creating Maintenance Tool"));
+
m_needToWriteMaintenanceTool = true;
+ m_core->writeMaintenanceTool();
+
+ // fake a possible wrong value to show a full progress bar
+ const int progress = ProgressCoordinator::instance()->progressInPercentage();
+ // usually this should be only the reserved one from the beginning
+ if (progress < 100)
+ ProgressCoordinator::instance()->addManualPercentagePoints(100 - progress);
+
+ ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstallation finished!"));
+
+ if (adminRightsGained)
+ m_core->dropAdminRights();
+
+ setStatus(PackageManagerCore::Success);
+ emit installationFinished();
} catch (const Error &err) {
if (m_core->status() != PackageManagerCore::Canceled) {
setStatus(PackageManagerCore::Failure);
@@ -2510,14 +2534,17 @@ bool PackageManagerCorePrivate::calculateComponentsAndRun()
{
QString htmlOutput;
bool componentsOk = m_core->calculateComponents(&htmlOutput);
- bool success = false;
if (statusCanceledOrFailed()) {
qCDebug(QInstaller::lcInstallerInstallLog) << "Installation canceled.";
} else if (componentsOk && acceptLicenseAgreements()) {
qCDebug(QInstaller::lcInstallerInstallLog).noquote() << htmlToString(htmlOutput);
- success = m_core->run();
+ if (m_core->run()) {
+ // Write maintenance tool if required
+ m_core->writeMaintenanceTool();
+ return true;
+ }
}
- return success;
+ return false;
}
bool PackageManagerCorePrivate::acceptLicenseAgreements() const