From 994702139438f1624b3ac2a5b8fa622b462bfd09 Mon Sep 17 00:00:00 2001 From: Xavier Jouslin de Noray Date: Thu, 3 Aug 2023 14:22:29 -0400 Subject: [PATCH] PluginId: add handler for the plugin id Change-Id: I377d5856491d38f127fe422e84a6c93839295447 --- daemon | 2 +- src/app/pluginadapter.cpp | 13 ++++++++++--- src/app/pluginstorelistmodel.cpp | 10 ++++++---- src/app/pluginstorelistmodel.h | 1 + .../components/PluginAvailableDelegate.qml | 7 ++++--- .../settingsview/components/PluginStoreListView.qml | 3 ++- src/libclient/api/pluginmodel.h | 2 +- src/libclient/pluginmodel.cpp | 7 ++++--- 8 files changed, 29 insertions(+), 16 deletions(-) diff --git a/daemon b/daemon index 56dc3ca0..e1edf0ad 160000 --- a/daemon +++ b/daemon @@ -1 +1 @@ -Subproject commit 56dc3ca07c79f4dbe536c1cab184eba8194deccd +Subproject commit e1edf0adfac853e47d60e87623f755e83f94fbb6 diff --git a/src/app/pluginadapter.cpp b/src/app/pluginadapter.cpp index 50f615e6..3cf37acf 100644 --- a/src/app/pluginadapter.cpp +++ b/src/app/pluginadapter.cpp @@ -97,7 +97,11 @@ PluginAdapter::getPluginsFromStore() QList plugins; for (const auto& plugin : result) { auto qPlugin = plugin.toVariant().toMap(); - if (!pluginsInstalled.contains(qPlugin["name"].toString())) { + if (!qPlugin.contains("id")) { + qPlugin["id"] = qPlugin["name"]; + } + qWarning() << qPlugin["id"]; + if (!pluginsInstalled.contains(qPlugin["id"].toString())) { plugins.append(qPlugin); } } @@ -115,8 +119,11 @@ PluginAdapter::getPluginDetails(const QString& pluginId) auto result = QJsonDocument::fromJson(data).object(); // my response is a json object and I want to convert // it to a QVariantMap - pluginStoreListModel_->addPlugin( - result.toVariantMap()); + auto plugin = result.toVariantMap(); + if (!plugin.contains("id")) { + plugin["id"] = plugin["name"]; + } + pluginStoreListModel_->addPlugin(plugin); }); } diff --git a/src/app/pluginstorelistmodel.cpp b/src/app/pluginstorelistmodel.cpp index 769954a7..6a776157 100644 --- a/src/app/pluginstorelistmodel.cpp +++ b/src/app/pluginstorelistmodel.cpp @@ -50,6 +50,8 @@ PluginStoreListModel::data(const QModelIndex& index, int role) const switch (role) { case Role::Name: return QVariant(plugin["name"].toString()); + case Role::Id: + return QVariant(plugin["id"].toString()); case Role::IconPath: return QVariant(plugin["iconPath"].toString()); case Role::Description: @@ -104,7 +106,7 @@ PluginStoreListModel::removePlugin(const QString& pluginId) { auto index = 0; for (auto& plugin : plugins_) { - if (plugin["name"].toString() == pluginId) { + if (plugin["id"].toString() == pluginId) { beginRemoveRows(QModelIndex(), index, index); plugins_.removeAt(index); endRemoveRows(); @@ -120,7 +122,7 @@ PluginStoreListModel::updatePlugin(const QVariantMap& plugin) { auto index = 0; for (auto& p : plugins_) { - if (p["name"].toString() == plugin["name"].toString()) { + if (p["id"].toString() == plugin["id"].toString()) { p = plugin; Q_EMIT dataChanged(createIndex(index, 0), createIndex(index, 0)); return; @@ -169,7 +171,7 @@ void PluginStoreListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status) { auto it = std::find_if(plugins_.begin(), plugins_.end(), [&pluginId](const QVariantMap& p) { - return p["name"].toString() == pluginId; + return p["id"].toString() == pluginId; }); switch (status) { @@ -237,7 +239,7 @@ PluginStoreListModel::filterPlugins(const QList& plugins) installedPlugins.end(), [remotePlugin, &pluginModel, this](const QString& installedPlugin) { const auto& details = pluginModel.getPluginDetails(installedPlugin); - return remotePlugin["name"].toString() == details.name; + return remotePlugin["id"].toString() == details.id; }) == installedPlugins.end()) { filterPluginsNotInstalled.append(remotePlugin); diff --git a/src/app/pluginstorelistmodel.h b/src/app/pluginstorelistmodel.h index 53654feb..b5f8f531 100644 --- a/src/app/pluginstorelistmodel.h +++ b/src/app/pluginstorelistmodel.h @@ -24,6 +24,7 @@ class QColor; class QString; #define PLUGINSTORE_ROLES \ + X(Id) \ X(Name) \ X(IconPath) \ X(Background) \ diff --git a/src/app/settingsview/components/PluginAvailableDelegate.qml b/src/app/settingsview/components/PluginAvailableDelegate.qml index 709c8db4..f01febea 100644 --- a/src/app/settingsview/components/PluginAvailableDelegate.qml +++ b/src/app/settingsview/components/PluginAvailableDelegate.qml @@ -28,6 +28,7 @@ import "../../mainview/components" ItemDelegate { id: root property string pluginName + property string pluginId property string pluginIcon property string pluginBackground: JamiTheme.pluginDefaultBackgroundColor property string pluginDescription @@ -238,13 +239,13 @@ ItemDelegate { function installPlugin() { switch (pluginStatus) { case PluginStatus.DOWNLOADING: - PluginAdapter.cancelDownload(pluginName); + PluginAdapter.cancelDownload(pluginId); break; case PluginStatus.INSTALLABLE: - PluginAdapter.installRemotePlugin(pluginName); + PluginAdapter.installRemotePlugin(pluginId); break; case PluginStatus.FAILED: - PluginAdapter.installRemotePlugin(pluginName); + PluginAdapter.installRemotePlugin(pluginId); break; case PluginStatus.INSTALLING: break; diff --git a/src/app/settingsview/components/PluginStoreListView.qml b/src/app/settingsview/components/PluginStoreListView.qml index 17b385ec..05a982de 100644 --- a/src/app/settingsview/components/PluginStoreListView.qml +++ b/src/app/settingsview/components/PluginStoreListView.qml @@ -59,7 +59,7 @@ ColumnLayout { Repeater { model: PluginStoreListModel onCountChanged: { - root.visible = count > 0 + root.visible = count > 0; } delegate: Item { id: wrapper @@ -87,6 +87,7 @@ ColumnLayout { width: wrapper.widthProvider() * scalingFactor height: wrapper.heightProvider() * scalingFactor pluginName: Name + pluginId: pluginIcon: IconPath pluginDescription: Description pluginAuthor: Author diff --git a/src/libclient/api/pluginmodel.h b/src/libclient/api/pluginmodel.h index d2176c57..2faafeac 100644 --- a/src/libclient/api/pluginmodel.h +++ b/src/libclient/api/pluginmodel.h @@ -38,10 +38,10 @@ namespace plugin { */ struct PluginDetails { + QString path = ""; QString id = ""; QString name = ""; QString description = ""; - QString path = ""; QString version = ""; QString author = ""; QString iconPath = ""; diff --git a/src/libclient/pluginmodel.cpp b/src/libclient/pluginmodel.cpp index 6175a83e..7afd2acb 100644 --- a/src/libclient/pluginmodel.cpp +++ b/src/libclient/pluginmodel.cpp @@ -88,6 +88,7 @@ PluginModel::getPluginDetails(const QString& path) MapStringString details = PluginManager::instance().getPluginDetails(path); plugin::PluginDetails result; if (!details.empty()) { + result.path = details["path"]; result.id = details["id"]; result.name = details["name"]; result.description = details["description"]; @@ -97,8 +98,8 @@ PluginModel::getPluginDetails(const QString& path) result.author = details["author"]; result.version = details["version"]; } - if (!pluginsPath_.contains(result.id)) { - pluginsPath_[result.id] = path; + if (!pluginsPath_.contains(result.path)) { + pluginsPath_[result.path] = path; } VectorString loadedPlugins = getLoadedPlugins(); if (std::find(loadedPlugins.begin(), loadedPlugins.end(), result.path) != loadedPlugins.end()) { @@ -158,7 +159,7 @@ PluginModel::setPluginsPath() { for (auto plugin : getInstalledPlugins()) { auto details = getPluginDetails(plugin); - pluginsPath_[details.name] = details.path; + pluginsPath_[details.id] = details.path; } }