From 2da8283bb27562681da0c85d9db8e942c4daca1b Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 17 Sep 2024 14:17:21 +0200 Subject: [PATCH] Extensionmanager: Notify backend of install success Change-Id: I7a31beb3bcc2fd75666a6d95bec087495ca05932 Reviewed-by: Alessandro Portale --- .../extensionmanagerwidget.cpp | 38 +++++++++++++++---- .../extensionmanager/extensionsbrowser.cpp | 1 - .../extensionmanager/extensionsmodel.cpp | 2 + 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index eb7a373c505..dcf065fcd27 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -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; }; @@ -507,8 +509,8 @@ ExtensionManagerWidget::ExtensionManagerWidget() const int secondaryDescriptionWidth = secondaryDescriptionVisible ? 264 : 0; m_secondaryDescriptionWidget->setWidth(secondaryDescriptionWidth); }); - connect(m_headingWidget, &HeadingWidget::pluginInstallationRequested, this, [this](){ - fetchAndInstallPlugin(QUrl::fromUserInput(m_currentDownloadUrl)); + connect(m_headingWidget, &HeadingWidget::pluginInstallationRequested, this, [this]() { + 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); diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index 5b7ad188cbc..4cca3f80d37 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include diff --git a/src/plugins/extensionmanager/extensionsmodel.cpp b/src/plugins/extensionmanager/extensionsmodel.cpp index 366d19e694d..2c4100f2239 100644 --- a/src/plugins/extensionmanager/extensionsmodel.cpp +++ b/src/plugins/extensionmanager/extensionsmodel.cpp @@ -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; }