Extensionmanager: Notify backend of install success

Change-Id: I7a31beb3bcc2fd75666a6d95bec087495ca05932
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Marcus Tillmanns
2024-09-17 14:17:21 +02:00
parent e7365e957c
commit 2da8283bb2
3 changed files with 33 additions and 8 deletions

View File

@@ -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 &current); void updateView(const QModelIndex &current);
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;
}; };
@@ -508,7 +510,7 @@ ExtensionManagerWidget::ExtensionManagerWidget()
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 &current)
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 &current)
} }
} }
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);

View File

@@ -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>

View File

@@ -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;
} }