diff --git a/kerfuffle/cliinterface.h b/kerfuffle/cliinterface.h --- a/kerfuffle/cliinterface.h +++ b/kerfuffle/cliinterface.h @@ -71,6 +71,7 @@ virtual void resetParsing() = 0; virtual bool readListLine(const QString &line) = 0; virtual bool readExtractLine(const QString &line) = 0; + virtual bool readDeleteLine(const QString &line); bool doKill() Q_DECL_OVERRIDE; bool doSuspend() Q_DECL_OVERRIDE; bool doResume() Q_DECL_OVERRIDE; diff --git a/kerfuffle/cliinterface.cpp b/kerfuffle/cliinterface.cpp --- a/kerfuffle/cliinterface.cpp +++ b/kerfuffle/cliinterface.cpp @@ -917,6 +917,10 @@ return readListLine(line); } + if (m_operationMode == Delete) { + return readDeleteLine(line); + } + if (m_operationMode == Test) { if (m_cliProps->isPasswordPrompt(line)) { @@ -936,6 +940,12 @@ return true; } +bool CliInterface::readDeleteLine(const QString &line) +{ + Q_UNUSED(line); + return true; +} + bool CliInterface::handleFileExistsMessage(const QString& line) { // Check for a filename and store it. diff --git a/plugins/cli7zplugin/cliplugin.h b/plugins/cli7zplugin/cliplugin.h --- a/plugins/cli7zplugin/cliplugin.h +++ b/plugins/cli7zplugin/cliplugin.h @@ -38,6 +38,7 @@ virtual void resetParsing() Q_DECL_OVERRIDE; virtual bool readListLine(const QString &line) Q_DECL_OVERRIDE; virtual bool readExtractLine(const QString &line) Q_DECL_OVERRIDE; + virtual bool readDeleteLine(const QString &line) Q_DECL_OVERRIDE; private: enum ArchiveType { diff --git a/plugins/cli7zplugin/cliplugin.cpp b/plugins/cli7zplugin/cliplugin.cpp --- a/plugins/cli7zplugin/cliplugin.cpp +++ b/plugins/cli7zplugin/cliplugin.cpp @@ -284,6 +284,18 @@ return true; } +bool CliPlugin::readDeleteLine(const QString &line) +{ + QRegularExpression rx(QStringLiteral("Error: .+ is not supported archive")); + + if (rx.match(line).hasMatch()) { + emit error(i18n("Delete operation failed. Try upgrading p7zip or disabling the p7zip plugin in the configuration dialog.")); + return false; + } + + return true; +} + void CliPlugin::handleMethods(const QStringList &methods) { foreach (const QString &method, methods) {