forked from qt-creator/qt-creator
Extensionmanager: Notify backend of install success
Change-Id: I7a31beb3bcc2fd75666a6d95bec087495ca05932 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "extensionmanagerwidget.h"
|
||||
|
||||
#include "extensionmanagersettings.h"
|
||||
#include "extensionmanagertr.h"
|
||||
#include "extensionsbrowser.h"
|
||||
#include "extensionsmodel.h"
|
||||
@@ -383,7 +384,7 @@ public:
|
||||
|
||||
private:
|
||||
void updateView(const QModelIndex ¤t);
|
||||
void fetchAndInstallPlugin(const QUrl &url);
|
||||
void fetchAndInstallPlugin(const QUrl &url, const QString &id);
|
||||
|
||||
QString m_currentItemName;
|
||||
ExtensionsModel *m_extensionModel;
|
||||
@@ -405,6 +406,7 @@ private:
|
||||
QLabel *m_packExtensions;
|
||||
PluginStatusWidget *m_pluginStatus;
|
||||
QString m_currentDownloadUrl;
|
||||
QString m_currentId;
|
||||
Tasking::TaskTreeRunner m_dlTaskTreeRunner;
|
||||
};
|
||||
|
||||
@@ -508,7 +510,7 @@ ExtensionManagerWidget::ExtensionManagerWidget()
|
||||
m_secondaryDescriptionWidget->setWidth(secondaryDescriptionWidth);
|
||||
});
|
||||
connect(m_headingWidget, &HeadingWidget::pluginInstallationRequested, this, [this]() {
|
||||
fetchAndInstallPlugin(QUrl::fromUserInput(m_currentDownloadUrl));
|
||||
fetchAndInstallPlugin(QUrl::fromUserInput(m_currentDownloadUrl), m_currentId);
|
||||
});
|
||||
connect(m_tags, &TagList::tagSelected, m_extensionBrowser, &ExtensionsBrowser::setFilter);
|
||||
connect(m_headingWidget, &HeadingWidget::vendorClicked,
|
||||
@@ -579,6 +581,8 @@ void ExtensionManagerWidget::updateView(const QModelIndex ¤t)
|
||||
m_pluginStatus->setPluginId(isPack ? QString() : current.data(RoleId).toString());
|
||||
m_currentDownloadUrl = current.data(RoleDownloadUrl).toString();
|
||||
|
||||
m_currentId = current.data(RoleVendorId).toString() + "." + current.data(RoleId).toString();
|
||||
|
||||
{
|
||||
const QStringList description = {
|
||||
"# " + m_currentItemName,
|
||||
@@ -640,7 +644,7 @@ void ExtensionManagerWidget::updateView(const QModelIndex ¤t)
|
||||
}
|
||||
}
|
||||
|
||||
void ExtensionManagerWidget::fetchAndInstallPlugin(const QUrl &url)
|
||||
void ExtensionManagerWidget::fetchAndInstallPlugin(const QUrl &url, const QString &id)
|
||||
{
|
||||
using namespace Tasking;
|
||||
|
||||
@@ -681,20 +685,40 @@ void ExtensionManagerWidget::fetchAndInstallPlugin(const QUrl &url)
|
||||
|
||||
const auto onPluginInstallation = [storage]() {
|
||||
if (storage->packageData.isEmpty())
|
||||
return;
|
||||
return false;
|
||||
const FilePath source = FilePath::fromUrl(storage->url);
|
||||
TempFileSaver saver(
|
||||
TemporaryDirectory::masterDirectoryPath() + "/XXXXXX-" + source.fileName());
|
||||
|
||||
saver.write(storage->packageData);
|
||||
if (saver.finalize(ICore::dialogParent()))
|
||||
executePluginInstallWizard(saver.filePath());;
|
||||
return executePluginInstallWizard(saver.filePath());
|
||||
return false;
|
||||
};
|
||||
|
||||
const auto onDownloadSetup = [id](NetworkQuery &query) {
|
||||
query.setOperation(NetworkOperation::Post);
|
||||
query.setRequest(QNetworkRequest(
|
||||
QUrl(settings().externalRepoUrl() + "/api/v1/downloads/completed/" + id)));
|
||||
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
||||
};
|
||||
|
||||
const auto onDownloadDone = [id](const NetworkQuery &query, DoneWith result) {
|
||||
if (result != DoneWith::Success) {
|
||||
qCWarning(widgetLog) << "Failed to notify download completion for" << id;
|
||||
qCWarning(widgetLog) << query.reply()->errorString();
|
||||
qCWarning(widgetLog) << query.reply()->readAll();
|
||||
} else {
|
||||
qCDebug(widgetLog) << "Download completion notification sent for" << id;
|
||||
qCDebug(widgetLog) << query.reply()->readAll();
|
||||
}
|
||||
};
|
||||
|
||||
Group group{
|
||||
storage,
|
||||
NetworkQueryTask{onQuerySetup, onQueryDone},
|
||||
onGroupDone(onPluginInstallation),
|
||||
Sync{onPluginInstallation},
|
||||
NetworkQueryTask{onDownloadSetup, onDownloadDone},
|
||||
};
|
||||
|
||||
m_dlTaskTreeRunner.start(group);
|
||||
|
@@ -15,7 +15,6 @@
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <coreplugin/icontext.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/plugininstallwizard.h>
|
||||
#include <coreplugin/welcomepagehelper.h>
|
||||
|
||||
#include <extensionsystem/iplugin.h>
|
||||
|
@@ -159,6 +159,8 @@ QVariant ExtensionsModelPrivate::dataFromRemoteExtension(int index, int role) co
|
||||
return json.value("tags").toVariant().toStringList();
|
||||
case RoleVendor:
|
||||
return json.value("display_vendor");
|
||||
case RoleVendorId:
|
||||
return json.value("vendor_id");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user