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 "extensionmanagerwidget.h"
|
||||||
|
|
||||||
|
#include "extensionmanagersettings.h"
|
||||||
#include "extensionmanagertr.h"
|
#include "extensionmanagertr.h"
|
||||||
#include "extensionsbrowser.h"
|
#include "extensionsbrowser.h"
|
||||||
#include "extensionsmodel.h"
|
#include "extensionsmodel.h"
|
||||||
@@ -383,7 +384,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void updateView(const QModelIndex ¤t);
|
void updateView(const QModelIndex ¤t);
|
||||||
void fetchAndInstallPlugin(const QUrl &url);
|
void fetchAndInstallPlugin(const QUrl &url, const QString &id);
|
||||||
|
|
||||||
QString m_currentItemName;
|
QString m_currentItemName;
|
||||||
ExtensionsModel *m_extensionModel;
|
ExtensionsModel *m_extensionModel;
|
||||||
@@ -405,6 +406,7 @@ private:
|
|||||||
QLabel *m_packExtensions;
|
QLabel *m_packExtensions;
|
||||||
PluginStatusWidget *m_pluginStatus;
|
PluginStatusWidget *m_pluginStatus;
|
||||||
QString m_currentDownloadUrl;
|
QString m_currentDownloadUrl;
|
||||||
|
QString m_currentId;
|
||||||
Tasking::TaskTreeRunner m_dlTaskTreeRunner;
|
Tasking::TaskTreeRunner m_dlTaskTreeRunner;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -507,8 +509,8 @@ ExtensionManagerWidget::ExtensionManagerWidget()
|
|||||||
const int secondaryDescriptionWidth = secondaryDescriptionVisible ? 264 : 0;
|
const int secondaryDescriptionWidth = secondaryDescriptionVisible ? 264 : 0;
|
||||||
m_secondaryDescriptionWidget->setWidth(secondaryDescriptionWidth);
|
m_secondaryDescriptionWidget->setWidth(secondaryDescriptionWidth);
|
||||||
});
|
});
|
||||||
connect(m_headingWidget, &HeadingWidget::pluginInstallationRequested, this, [this](){
|
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_tags, &TagList::tagSelected, m_extensionBrowser, &ExtensionsBrowser::setFilter);
|
||||||
connect(m_headingWidget, &HeadingWidget::vendorClicked,
|
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_pluginStatus->setPluginId(isPack ? QString() : current.data(RoleId).toString());
|
||||||
m_currentDownloadUrl = current.data(RoleDownloadUrl).toString();
|
m_currentDownloadUrl = current.data(RoleDownloadUrl).toString();
|
||||||
|
|
||||||
|
m_currentId = current.data(RoleVendorId).toString() + "." + current.data(RoleId).toString();
|
||||||
|
|
||||||
{
|
{
|
||||||
const QStringList description = {
|
const QStringList description = {
|
||||||
"# " + m_currentItemName,
|
"# " + 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;
|
using namespace Tasking;
|
||||||
|
|
||||||
@@ -681,20 +685,40 @@ void ExtensionManagerWidget::fetchAndInstallPlugin(const QUrl &url)
|
|||||||
|
|
||||||
const auto onPluginInstallation = [storage]() {
|
const auto onPluginInstallation = [storage]() {
|
||||||
if (storage->packageData.isEmpty())
|
if (storage->packageData.isEmpty())
|
||||||
return;
|
return false;
|
||||||
const FilePath source = FilePath::fromUrl(storage->url);
|
const FilePath source = FilePath::fromUrl(storage->url);
|
||||||
TempFileSaver saver(
|
TempFileSaver saver(
|
||||||
TemporaryDirectory::masterDirectoryPath() + "/XXXXXX-" + source.fileName());
|
TemporaryDirectory::masterDirectoryPath() + "/XXXXXX-" + source.fileName());
|
||||||
|
|
||||||
saver.write(storage->packageData);
|
saver.write(storage->packageData);
|
||||||
if (saver.finalize(ICore::dialogParent()))
|
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{
|
Group group{
|
||||||
storage,
|
storage,
|
||||||
NetworkQueryTask{onQuerySetup, onQueryDone},
|
NetworkQueryTask{onQuerySetup, onQueryDone},
|
||||||
onGroupDone(onPluginInstallation),
|
Sync{onPluginInstallation},
|
||||||
|
NetworkQueryTask{onDownloadSetup, onDownloadDone},
|
||||||
};
|
};
|
||||||
|
|
||||||
m_dlTaskTreeRunner.start(group);
|
m_dlTaskTreeRunner.start(group);
|
||||||
|
@@ -15,7 +15,6 @@
|
|||||||
#include <coreplugin/coreconstants.h>
|
#include <coreplugin/coreconstants.h>
|
||||||
#include <coreplugin/icontext.h>
|
#include <coreplugin/icontext.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/plugininstallwizard.h>
|
|
||||||
#include <coreplugin/welcomepagehelper.h>
|
#include <coreplugin/welcomepagehelper.h>
|
||||||
|
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
|
@@ -159,6 +159,8 @@ QVariant ExtensionsModelPrivate::dataFromRemoteExtension(int index, int role) co
|
|||||||
return json.value("tags").toVariant().toStringList();
|
return json.value("tags").toVariant().toStringList();
|
||||||
case RoleVendor:
|
case RoleVendor:
|
||||||
return json.value("display_vendor");
|
return json.value("display_vendor");
|
||||||
|
case RoleVendorId:
|
||||||
|
return json.value("vendor_id");
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user