forked from qt-creator/qt-creator
Android: Transform AndroidSdkDownloader into a pure recipe
Get rid of AndroidSdkDownloader class. This will enable easy chaining of recipes for different workflows. Change-Id: Ia048597148a2a1e7573fc0d4192cf7e678f39c4f Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
committed by
Alessandro Portale
parent
b97434cca7
commit
d73c22cd95
@@ -31,7 +31,7 @@ namespace Android::Internal {
|
|||||||
static void logError(const QString &error)
|
static void logError(const QString &error)
|
||||||
{
|
{
|
||||||
qCDebug(sdkDownloaderLog, "%s", error.toUtf8().data());
|
qCDebug(sdkDownloaderLog, "%s", error.toUtf8().data());
|
||||||
QMessageBox::warning(Core::ICore::dialogParent(), AndroidSdkDownloader::dialogTitle(), error);
|
QMessageBox::warning(Core::ICore::dialogParent(), dialogTitle(), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isHttpRedirect(QNetworkReply *reply)
|
static bool isHttpRedirect(QNetworkReply *reply)
|
||||||
@@ -85,7 +85,7 @@ static bool verifyFileIntegrity(const FilePath fileName, const QByteArray &sha25
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidSdkDownloader::downloadAndExtractSdk()
|
GroupItem downloadSdkRecipe()
|
||||||
{
|
{
|
||||||
struct StorageStruct
|
struct StorageStruct
|
||||||
{
|
{
|
||||||
@@ -96,6 +96,7 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
progressDialog->setWindowTitle(dialogTitle());
|
progressDialog->setWindowTitle(dialogTitle());
|
||||||
progressDialog->setFixedSize(progressDialog->sizeHint());
|
progressDialog->setFixedSize(progressDialog->sizeHint());
|
||||||
progressDialog->setAutoClose(false);
|
progressDialog->setAutoClose(false);
|
||||||
|
progressDialog->show(); // TODO: Should not be needed. Investigate possible QT_BUG
|
||||||
}
|
}
|
||||||
std::unique_ptr<QProgressDialog> progressDialog;
|
std::unique_ptr<QProgressDialog> progressDialog;
|
||||||
std::optional<FilePath> sdkFileName;
|
std::optional<FilePath> sdkFileName;
|
||||||
@@ -116,7 +117,7 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
||||||
NetworkQuery *queryPtr = &query;
|
NetworkQuery *queryPtr = &query;
|
||||||
QProgressDialog *progressDialog = storage->progressDialog.get();
|
QProgressDialog *progressDialog = storage->progressDialog.get();
|
||||||
connect(queryPtr, &NetworkQuery::started, progressDialog, [queryPtr, progressDialog] {
|
QObject::connect(queryPtr, &NetworkQuery::started, progressDialog, [queryPtr, progressDialog] {
|
||||||
QNetworkReply *reply = queryPtr->reply();
|
QNetworkReply *reply = queryPtr->reply();
|
||||||
if (!reply)
|
if (!reply)
|
||||||
return;
|
return;
|
||||||
@@ -126,7 +127,7 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
progressDialog->setValue(received);
|
progressDialog->setValue(received);
|
||||||
});
|
});
|
||||||
#if QT_CONFIG(ssl)
|
#if QT_CONFIG(ssl)
|
||||||
connect(reply, &QNetworkReply::sslErrors,
|
QObject::connect(reply, &QNetworkReply::sslErrors,
|
||||||
reply, [reply](const QList<QSslError> &sslErrors) {
|
reply, [reply](const QList<QSslError> &sslErrors) {
|
||||||
for (const QSslError &error : sslErrors)
|
for (const QSslError &error : sslErrors)
|
||||||
qCDebug(sdkDownloaderLog, "SSL error: %s\n", qPrintable(error.errorString()));
|
qCDebug(sdkDownloaderLog, "SSL error: %s\n", qPrintable(error.errorString()));
|
||||||
@@ -180,7 +181,7 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
unarchiver.setDestDir(sdkFileName.parentDir());
|
unarchiver.setDestDir(sdkFileName.parentDir());
|
||||||
return SetupResult::Continue;
|
return SetupResult::Continue;
|
||||||
};
|
};
|
||||||
const auto onUnarchiverDone = [this, storage](DoneWith result) {
|
const auto onUnarchiverDone = [storage](DoneWith result) {
|
||||||
if (result == DoneWith::Cancel)
|
if (result == DoneWith::Cancel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -190,7 +191,6 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
}
|
}
|
||||||
androidConfig().setTemporarySdkToolsPath(
|
androidConfig().setTemporarySdkToolsPath(
|
||||||
storage->sdkFileName->parentDir().pathAppended(Constants::cmdlineToolsName));
|
storage->sdkFileName->parentDir().pathAppended(Constants::cmdlineToolsName));
|
||||||
QMetaObject::invokeMethod(this, [this] { emit sdkExtracted(); }, Qt::QueuedConnection);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto onCanceled = [storage](Barrier &barrier) {
|
const auto onCanceled = [storage](Barrier &barrier) {
|
||||||
@@ -199,7 +199,7 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
&barrier, &Barrier::advance, Qt::QueuedConnection);
|
&barrier, &Barrier::advance, Qt::QueuedConnection);
|
||||||
};
|
};
|
||||||
|
|
||||||
const Group root {
|
return Group {
|
||||||
storage,
|
storage,
|
||||||
parallel,
|
parallel,
|
||||||
stopOnSuccessOrError,
|
stopOnSuccessOrError,
|
||||||
@@ -210,13 +210,8 @@ void AndroidSdkDownloader::downloadAndExtractSdk()
|
|||||||
},
|
},
|
||||||
BarrierTask(onCanceled, [] { return DoneResult::Error; })
|
BarrierTask(onCanceled, [] { return DoneResult::Error; })
|
||||||
};
|
};
|
||||||
|
|
||||||
m_taskTreeRunner.start(root);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AndroidSdkDownloader::dialogTitle()
|
QString dialogTitle() { return Tr::tr("Download SDK Tools"); }
|
||||||
{
|
|
||||||
return Tr::tr("Download SDK Tools");
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Android::Internal
|
} // namespace Android::Internal
|
||||||
|
|||||||
@@ -3,23 +3,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <solutions/tasking/tasktreerunner.h>
|
#include <QString>
|
||||||
|
|
||||||
|
namespace Tasking { class GroupItem; }
|
||||||
|
|
||||||
namespace Android::Internal {
|
namespace Android::Internal {
|
||||||
|
|
||||||
class AndroidSdkDownloader : public QObject
|
Tasking::GroupItem downloadSdkRecipe();
|
||||||
{
|
QString dialogTitle();
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
void downloadAndExtractSdk();
|
|
||||||
static QString dialogTitle();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void sdkExtracted();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Tasking::TaskTreeRunner m_taskTreeRunner;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Android::Internal
|
} // namespace Android::Internal
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
|
|
||||||
|
#include <solutions/tasking/tasktreerunner.h>
|
||||||
|
|
||||||
#include <utils/async.h>
|
#include <utils/async.h>
|
||||||
#include <utils/detailswidget.h>
|
#include <utils/detailswidget.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
@@ -183,7 +185,7 @@ private:
|
|||||||
AndroidSdkManagerWidget *m_sdkManagerWidget = nullptr;
|
AndroidSdkManagerWidget *m_sdkManagerWidget = nullptr;
|
||||||
|
|
||||||
AndroidSdkManager m_sdkManager;
|
AndroidSdkManager m_sdkManager;
|
||||||
AndroidSdkDownloader m_sdkDownloader;
|
Tasking::TaskTreeRunner m_sdkDownloader;
|
||||||
bool m_isInitialReloadDone = false;
|
bool m_isInitialReloadDone = false;
|
||||||
|
|
||||||
SummaryWidget *m_androidSummary = nullptr;
|
SummaryWidget *m_androidSummary = nullptr;
|
||||||
@@ -500,11 +502,13 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
this, [this] { m_sdkManagerWidget->exec(); });
|
this, [this] { m_sdkManagerWidget->exec(); });
|
||||||
connect(sdkToolsAutoDownloadButton, &QAbstractButton::clicked,
|
connect(sdkToolsAutoDownloadButton, &QAbstractButton::clicked,
|
||||||
this, &AndroidSettingsWidget::downloadSdk);
|
this, &AndroidSettingsWidget::downloadSdk);
|
||||||
connect(&m_sdkDownloader, &AndroidSdkDownloader::sdkExtracted, this, [this] {
|
connect(&m_sdkDownloader, &Tasking::TaskTreeRunner::done, this, [this](Tasking::DoneWith result) {
|
||||||
|
if (result != Tasking::DoneWith::Success)
|
||||||
|
return;
|
||||||
// Make sure the sdk path is created before installing packages
|
// Make sure the sdk path is created before installing packages
|
||||||
const FilePath sdkPath = androidConfig().sdkLocation();
|
const FilePath sdkPath = androidConfig().sdkLocation();
|
||||||
if (!sdkPath.createDir()) {
|
if (!sdkPath.createDir()) {
|
||||||
QMessageBox::warning(this, AndroidSdkDownloader::dialogTitle(),
|
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
||||||
Tr::tr("Failed to create the SDK Tools path %1.")
|
Tr::tr("Failed to create the SDK Tools path %1.")
|
||||||
.arg("\n\"" + sdkPath.toUserOutput() + "\""));
|
.arg("\n\"" + sdkPath.toUserOutput() + "\""));
|
||||||
}
|
}
|
||||||
@@ -813,7 +817,7 @@ void AndroidSettingsWidget::updateUI()
|
|||||||
void AndroidSettingsWidget::downloadSdk()
|
void AndroidSettingsWidget::downloadSdk()
|
||||||
{
|
{
|
||||||
if (androidConfig().sdkToolsOk()) {
|
if (androidConfig().sdkToolsOk()) {
|
||||||
QMessageBox::warning(this, AndroidSdkDownloader::dialogTitle(),
|
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
||||||
Tr::tr("The selected path already has a valid SDK Tools package."));
|
Tr::tr("The selected path already has a valid SDK Tools package."));
|
||||||
validateSdk();
|
validateSdk();
|
||||||
return;
|
return;
|
||||||
@@ -822,10 +826,10 @@ void AndroidSettingsWidget::downloadSdk()
|
|||||||
const QString message = Tr::tr("Download and install Android SDK Tools to %1?")
|
const QString message = Tr::tr("Download and install Android SDK Tools to %1?")
|
||||||
.arg("\n\"" + m_sdkLocationPathChooser->filePath().cleanPath().toUserOutput()
|
.arg("\n\"" + m_sdkLocationPathChooser->filePath().cleanPath().toUserOutput()
|
||||||
+ "\"");
|
+ "\"");
|
||||||
auto userInput = QMessageBox::information(this, AndroidSdkDownloader::dialogTitle(),
|
auto userInput = QMessageBox::information(this, Android::Internal::dialogTitle(),
|
||||||
message, QMessageBox::Yes | QMessageBox::No);
|
message, QMessageBox::Yes | QMessageBox::No);
|
||||||
if (userInput == QMessageBox::Yes)
|
if (userInput == QMessageBox::Yes)
|
||||||
m_sdkDownloader.downloadAndExtractSdk();
|
m_sdkDownloader.start({Android::Internal::downloadSdkRecipe()});
|
||||||
}
|
}
|
||||||
|
|
||||||
// AndroidSettingsPage
|
// AndroidSettingsPage
|
||||||
|
|||||||
Reference in New Issue
Block a user