From f2ab63396c1f101216b2c6ade37528492e464785 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Tue, 9 Jun 2020 10:52:51 +0300 Subject: CLI: Ask user confirmation before performing installer actions Also add new option --confirm-command to skip the interactive query. Task-number: QTIFW-1834 Change-Id: I1c63fd990431c792a523da7047637f54b193bee6 Reviewed-by: Katja Marttila --- src/libs/installer/packagemanagercore_p.cpp | 31 +++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'src/libs/installer/packagemanagercore_p.cpp') diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 89be5d907..6b5c4683f 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -222,6 +222,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core) , m_checkAvailableSpace(true) , m_autoAcceptLicenses(false) , m_disableWriteMaintenanceTool(false) + , m_autoConfirmCommand(false) { } @@ -259,6 +260,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q , m_checkAvailableSpace(true) , m_autoAcceptLicenses(false) , m_disableWriteMaintenanceTool(false) + , m_autoConfirmCommand(false) { foreach (const OperationBlob &operation, performedOperations) { QScopedPointer op(KDUpdater::UpdateOperationFactory::instance() @@ -2548,7 +2550,9 @@ bool PackageManagerCorePrivate::calculateComponentsAndRun() qCDebug(QInstaller::lcInstallerInstallLog) << "Installation canceled."; } else if (componentsOk && acceptLicenseAgreements()) { qCDebug(QInstaller::lcInstallerInstallLog).noquote() << htmlToString(htmlOutput); - if (m_core->run()) { + if (!(m_autoConfirmCommand || askUserConfirmCommand())) { + qCDebug(QInstaller::lcInstallerInstallLog) << "Installation aborted."; + } else if (m_core->run()) { // Write maintenance tool if required m_core->writeMaintenanceTool(); return true; @@ -2592,11 +2596,7 @@ bool PackageManagerCorePrivate::askUserAcceptLicense(const QString &name, const "before continuing with the installation:" << name; forever { - qCDebug(QInstaller::lcInstallerInstallLog) << "Accept|Reject|Show"; - - QTextStream stream(stdin); - QString input; - stream.readLineInto(&input); + const QString input = m_core->readConsoleLine(QLatin1String("Accept|Reject|Show")); if (QString::compare(input, QLatin1String("Accept"), Qt::CaseInsensitive) == 0 || QString::compare(input, QLatin1String("A"), Qt::CaseInsensitive) == 0) { @@ -2658,4 +2658,23 @@ void PackageManagerCorePrivate::printLocalPackageInformation(const KDUpdater::Lo qCDebug(QInstaller::lcPackageUpdateDate).noquote() << "\tLast updated:" << package.lastUpdateDate; } +bool PackageManagerCorePrivate::askUserConfirmCommand() const +{ + qCDebug(QInstaller::lcInstallerInstallLog) << "Do you want to continue?"; + + forever { + const QString input = m_core->readConsoleLine(QLatin1String("Yes|No")); + + if (QString::compare(input, QLatin1String("Yes"), Qt::CaseInsensitive) == 0 + || QString::compare(input, QLatin1String("Y"), Qt::CaseInsensitive) == 0) { + return true; + } else if (QString::compare(input, QLatin1String("No"), Qt::CaseInsensitive) == 0 + || QString::compare(input, QLatin1String("N"), Qt::CaseInsensitive) == 0) { + return false; + } else { + qCDebug(QInstaller::lcInstallerInstallLog) << "Unknown answer:" << input; + } + } +} + } // namespace QInstaller -- cgit v1.2.3