Android: Make parseDeployError() static

Rename DeployErrorCode into DeployErrorFlag and make
it a flag type.

Change-Id: I459a72a3a0a1dcddc275cd649a7f55c15369359d
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2024-05-17 16:05:50 +02:00
parent df01213641
commit b5ec6c4855

View File

@@ -66,27 +66,45 @@ const QLatin1String InstallFailedUpdateIncompatible("INSTALL_FAILED_UPDATE_INCOM
const QLatin1String InstallFailedPermissionModelDowngrade("INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE"); const QLatin1String InstallFailedPermissionModelDowngrade("INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE");
const QLatin1String InstallFailedVersionDowngrade("INSTALL_FAILED_VERSION_DOWNGRADE"); const QLatin1String InstallFailedVersionDowngrade("INSTALL_FAILED_VERSION_DOWNGRADE");
enum DeployErrorFlag
{
NoError = 0,
InconsistentCertificates = 0x0001,
UpdateIncompatible = 0x0002,
PermissionModelDowngrade = 0x0004,
VersionDowngrade = 0x0008,
Failure = 0x0010
};
Q_DECLARE_FLAGS(DeployErrorFlags, DeployErrorFlag)
static DeployErrorFlags parseDeployErrors(const QString &deployOutputLine)
{
DeployErrorFlags errorCode = NoError;
if (deployOutputLine.contains(InstallFailedInconsistentCertificatesString))
errorCode |= InconsistentCertificates;
if (deployOutputLine.contains(InstallFailedUpdateIncompatible))
errorCode |= UpdateIncompatible;
if (deployOutputLine.contains(InstallFailedPermissionModelDowngrade))
errorCode |= PermissionModelDowngrade;
if (deployOutputLine.contains(InstallFailedVersionDowngrade))
errorCode |= VersionDowngrade;
return errorCode;
}
// AndroidDeployQtStep // AndroidDeployQtStep
class AndroidDeployQtStep : public BuildStep class AndroidDeployQtStep : public BuildStep
{ {
Q_OBJECT Q_OBJECT
enum DeployErrorCode
{
NoError = 0,
InconsistentCertificates = 0x0001,
UpdateIncompatible = 0x0002,
PermissionModelDowngrade = 0x0004,
VersionDowngrade = 0x0008,
Failure = 0x0010
};
public: public:
AndroidDeployQtStep(BuildStepList *bc, Id id); AndroidDeployQtStep(BuildStepList *bc, Id id);
signals: signals:
void askForUninstall(DeployErrorCode errorCode); void askForUninstall(DeployErrorFlags errorCode);
private: private:
void runCommand(const CommandLine &command); void runCommand(const CommandLine &command);
@@ -94,26 +112,17 @@ private:
bool init() override; bool init() override;
Tasking::GroupItem runRecipe() final; Tasking::GroupItem runRecipe() final;
void gatherFilesToPull(); void gatherFilesToPull();
DeployErrorCode runDeploy(QPromise<void> &promise); DeployErrorFlags runDeploy(QPromise<void> &promise);
void slotAskForUninstall(DeployErrorCode errorCode); void slotAskForUninstall(DeployErrorFlags errorFlags);
void runImpl(QPromise<void> &promise); void runImpl(QPromise<void> &promise);
QWidget *createConfigWidget() override; QWidget *createConfigWidget() override;
void processReadyReadStdOutput(DeployErrorCode &errorCode); void processReadyReadStdOutput(DeployErrorFlags &errorCode);
void stdOutput(const QString &line); void stdOutput(const QString &line);
void processReadyReadStdError(DeployErrorCode &errorCode); void processReadyReadStdError(DeployErrorFlags &errorCode);
void stdError(const QString &line); void stdError(const QString &line);
DeployErrorCode parseDeployErrors(const QString &deployOutputLine) const;
friend void operator|=(DeployErrorCode &e1, const DeployErrorCode &e2) {
e1 = static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2);
}
friend DeployErrorCode operator|(const DeployErrorCode &e1, const DeployErrorCode &e2) {
return static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2);
}
void reportWarningOrError(const QString &message, Task::TaskType type); void reportWarningOrError(const QString &message, Task::TaskType type);
@@ -340,7 +349,7 @@ bool AndroidDeployQtStep::init()
return true; return true;
} }
AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QPromise<void> &promise) DeployErrorFlags AndroidDeployQtStep::runDeploy(QPromise<void> &promise)
{ {
CommandLine cmd(m_command); CommandLine cmd(m_command);
if (m_useAndroiddeployqt && m_apkPath.isEmpty()) { if (m_useAndroiddeployqt && m_apkPath.isEmpty()) {
@@ -355,7 +364,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QPromise<voi
} else { } else {
RunConfiguration *rc = target()->activeRunConfiguration(); RunConfiguration *rc = target()->activeRunConfiguration();
QTC_ASSERT(rc, return DeployErrorCode::Failure); QTC_ASSERT(rc, return Failure);
QString packageName; QString packageName;
if (m_uninstallPreviousPackageRun) { if (m_uninstallPreviousPackageRun) {
@@ -383,7 +392,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QPromise<voi
process.setEnvironment(m_environment); process.setEnvironment(m_environment);
process.setUseCtrlCStub(true); process.setUseCtrlCStub(true);
DeployErrorCode deployError = NoError; DeployErrorFlags deployError = NoError;
process.setStdOutLineCallback([this, &deployError](const QString &line) { process.setStdOutLineCallback([this, &deployError](const QString &line) {
deployError |= parseDeployErrors(line); deployError |= parseDeployErrors(line);
@@ -440,18 +449,18 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QPromise<voi
return deployError; return deployError;
} }
void AndroidDeployQtStep::slotAskForUninstall(DeployErrorCode errorCode) void AndroidDeployQtStep::slotAskForUninstall(DeployErrorFlags errorFlags)
{ {
Q_ASSERT(errorCode > 0); Q_ASSERT(errorFlags > 0);
QString uninstallMsg = Tr::tr("Deployment failed with the following errors:") + "\n\n"; QString uninstallMsg = Tr::tr("Deployment failed with the following errors:") + "\n\n";
if (errorCode & InconsistentCertificates) if (errorFlags & InconsistentCertificates)
uninstallMsg += InstallFailedInconsistentCertificatesString + '\n'; uninstallMsg += InstallFailedInconsistentCertificatesString + '\n';
if (errorCode & UpdateIncompatible) if (errorFlags & UpdateIncompatible)
uninstallMsg += InstallFailedUpdateIncompatible + '\n'; uninstallMsg += InstallFailedUpdateIncompatible + '\n';
if (errorCode & PermissionModelDowngrade) if (errorFlags & PermissionModelDowngrade)
uninstallMsg += InstallFailedPermissionModelDowngrade + '\n'; uninstallMsg += InstallFailedPermissionModelDowngrade + '\n';
if (errorCode & VersionDowngrade) if (errorFlags & VersionDowngrade)
uninstallMsg += InstallFailedVersionDowngrade + '\n'; uninstallMsg += InstallFailedVersionDowngrade + '\n';
uninstallMsg += '\n'; uninstallMsg += '\n';
uninstallMsg.append(Tr::tr("Uninstalling the installed package may solve the issue.") + '\n'); uninstallMsg.append(Tr::tr("Uninstalling the installed package may solve the issue.") + '\n');
@@ -478,8 +487,8 @@ void AndroidDeployQtStep::runImpl(QPromise<void> &promise)
AndroidManager::setDeviceSerialNumber(target(), serialNumber); AndroidManager::setDeviceSerialNumber(target(), serialNumber);
} }
DeployErrorCode returnValue = runDeploy(promise); DeployErrorFlags returnValue = runDeploy(promise);
if (returnValue > DeployErrorCode::NoError && returnValue < DeployErrorCode::Failure) { if (returnValue > NoError && returnValue < Failure) {
emit askForUninstall(returnValue); emit askForUninstall(returnValue);
if (m_askForUninstall) { if (m_askForUninstall) {
m_uninstallPreviousPackageRun = true; m_uninstallPreviousPackageRun = true;
@@ -618,22 +627,6 @@ void AndroidDeployQtStep::stdError(const QString &line)
} }
} }
AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::parseDeployErrors(
const QString &deployOutputLine) const
{
DeployErrorCode errorCode = NoError;
if (deployOutputLine.contains(InstallFailedInconsistentCertificatesString))
errorCode |= InconsistentCertificates;
if (deployOutputLine.contains(InstallFailedUpdateIncompatible))
errorCode |= UpdateIncompatible;
if (deployOutputLine.contains(InstallFailedPermissionModelDowngrade))
errorCode |= PermissionModelDowngrade;
if (deployOutputLine.contains(InstallFailedVersionDowngrade))
errorCode |= VersionDowngrade;
return errorCode;
}
void AndroidDeployQtStep::reportWarningOrError(const QString &message, Task::TaskType type) void AndroidDeployQtStep::reportWarningOrError(const QString &message, Task::TaskType type)
{ {