1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-08-04 06:45:45 +02:00

PluginId: add handler for the plugin id

Change-Id: I377d5856491d38f127fe422e84a6c93839295447
This commit is contained in:
Xavier Jouslin de Noray 2023-08-03 14:22:29 -04:00
parent 80fe376e3c
commit 9947021394
8 changed files with 29 additions and 16 deletions

2
daemon

@ -1 +1 @@
Subproject commit 56dc3ca07c79f4dbe536c1cab184eba8194deccd Subproject commit e1edf0adfac853e47d60e87623f755e83f94fbb6

View file

@ -97,7 +97,11 @@ PluginAdapter::getPluginsFromStore()
QList<QVariantMap> plugins; QList<QVariantMap> plugins;
for (const auto& plugin : result) { for (const auto& plugin : result) {
auto qPlugin = plugin.toVariant().toMap(); 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); plugins.append(qPlugin);
} }
} }
@ -115,8 +119,11 @@ PluginAdapter::getPluginDetails(const QString& pluginId)
auto result = QJsonDocument::fromJson(data).object(); auto result = QJsonDocument::fromJson(data).object();
// my response is a json object and I want to convert // my response is a json object and I want to convert
// it to a QVariantMap // it to a QVariantMap
pluginStoreListModel_->addPlugin( auto plugin = result.toVariantMap();
result.toVariantMap()); if (!plugin.contains("id")) {
plugin["id"] = plugin["name"];
}
pluginStoreListModel_->addPlugin(plugin);
}); });
} }

View file

@ -50,6 +50,8 @@ PluginStoreListModel::data(const QModelIndex& index, int role) const
switch (role) { switch (role) {
case Role::Name: case Role::Name:
return QVariant(plugin["name"].toString()); return QVariant(plugin["name"].toString());
case Role::Id:
return QVariant(plugin["id"].toString());
case Role::IconPath: case Role::IconPath:
return QVariant(plugin["iconPath"].toString()); return QVariant(plugin["iconPath"].toString());
case Role::Description: case Role::Description:
@ -104,7 +106,7 @@ PluginStoreListModel::removePlugin(const QString& pluginId)
{ {
auto index = 0; auto index = 0;
for (auto& plugin : plugins_) { for (auto& plugin : plugins_) {
if (plugin["name"].toString() == pluginId) { if (plugin["id"].toString() == pluginId) {
beginRemoveRows(QModelIndex(), index, index); beginRemoveRows(QModelIndex(), index, index);
plugins_.removeAt(index); plugins_.removeAt(index);
endRemoveRows(); endRemoveRows();
@ -120,7 +122,7 @@ PluginStoreListModel::updatePlugin(const QVariantMap& plugin)
{ {
auto index = 0; auto index = 0;
for (auto& p : plugins_) { for (auto& p : plugins_) {
if (p["name"].toString() == plugin["name"].toString()) { if (p["id"].toString() == plugin["id"].toString()) {
p = plugin; p = plugin;
Q_EMIT dataChanged(createIndex(index, 0), createIndex(index, 0)); Q_EMIT dataChanged(createIndex(index, 0), createIndex(index, 0));
return; return;
@ -169,7 +171,7 @@ void
PluginStoreListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status) PluginStoreListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status)
{ {
auto it = std::find_if(plugins_.begin(), plugins_.end(), [&pluginId](const QVariantMap& p) { 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) { switch (status) {
@ -237,7 +239,7 @@ PluginStoreListModel::filterPlugins(const QList<QVariantMap>& plugins)
installedPlugins.end(), installedPlugins.end(),
[remotePlugin, &pluginModel, this](const QString& installedPlugin) { [remotePlugin, &pluginModel, this](const QString& installedPlugin) {
const auto& details = pluginModel.getPluginDetails(installedPlugin); const auto& details = pluginModel.getPluginDetails(installedPlugin);
return remotePlugin["name"].toString() == details.name; return remotePlugin["id"].toString() == details.id;
}) })
== installedPlugins.end()) { == installedPlugins.end()) {
filterPluginsNotInstalled.append(remotePlugin); filterPluginsNotInstalled.append(remotePlugin);

View file

@ -24,6 +24,7 @@ class QColor;
class QString; class QString;
#define PLUGINSTORE_ROLES \ #define PLUGINSTORE_ROLES \
X(Id) \
X(Name) \ X(Name) \
X(IconPath) \ X(IconPath) \
X(Background) \ X(Background) \

View file

@ -28,6 +28,7 @@ import "../../mainview/components"
ItemDelegate { ItemDelegate {
id: root id: root
property string pluginName property string pluginName
property string pluginId
property string pluginIcon property string pluginIcon
property string pluginBackground: JamiTheme.pluginDefaultBackgroundColor property string pluginBackground: JamiTheme.pluginDefaultBackgroundColor
property string pluginDescription property string pluginDescription
@ -238,13 +239,13 @@ ItemDelegate {
function installPlugin() { function installPlugin() {
switch (pluginStatus) { switch (pluginStatus) {
case PluginStatus.DOWNLOADING: case PluginStatus.DOWNLOADING:
PluginAdapter.cancelDownload(pluginName); PluginAdapter.cancelDownload(pluginId);
break; break;
case PluginStatus.INSTALLABLE: case PluginStatus.INSTALLABLE:
PluginAdapter.installRemotePlugin(pluginName); PluginAdapter.installRemotePlugin(pluginId);
break; break;
case PluginStatus.FAILED: case PluginStatus.FAILED:
PluginAdapter.installRemotePlugin(pluginName); PluginAdapter.installRemotePlugin(pluginId);
break; break;
case PluginStatus.INSTALLING: case PluginStatus.INSTALLING:
break; break;

View file

@ -59,7 +59,7 @@ ColumnLayout {
Repeater { Repeater {
model: PluginStoreListModel model: PluginStoreListModel
onCountChanged: { onCountChanged: {
root.visible = count > 0 root.visible = count > 0;
} }
delegate: Item { delegate: Item {
id: wrapper id: wrapper
@ -87,6 +87,7 @@ ColumnLayout {
width: wrapper.widthProvider() * scalingFactor width: wrapper.widthProvider() * scalingFactor
height: wrapper.heightProvider() * scalingFactor height: wrapper.heightProvider() * scalingFactor
pluginName: Name pluginName: Name
pluginId:
pluginIcon: IconPath pluginIcon: IconPath
pluginDescription: Description pluginDescription: Description
pluginAuthor: Author pluginAuthor: Author

View file

@ -38,10 +38,10 @@ namespace plugin {
*/ */
struct PluginDetails struct PluginDetails
{ {
QString path = "";
QString id = ""; QString id = "";
QString name = ""; QString name = "";
QString description = ""; QString description = "";
QString path = "";
QString version = ""; QString version = "";
QString author = ""; QString author = "";
QString iconPath = ""; QString iconPath = "";

View file

@ -88,6 +88,7 @@ PluginModel::getPluginDetails(const QString& path)
MapStringString details = PluginManager::instance().getPluginDetails(path); MapStringString details = PluginManager::instance().getPluginDetails(path);
plugin::PluginDetails result; plugin::PluginDetails result;
if (!details.empty()) { if (!details.empty()) {
result.path = details["path"];
result.id = details["id"]; result.id = details["id"];
result.name = details["name"]; result.name = details["name"];
result.description = details["description"]; result.description = details["description"];
@ -97,8 +98,8 @@ PluginModel::getPluginDetails(const QString& path)
result.author = details["author"]; result.author = details["author"];
result.version = details["version"]; result.version = details["version"];
} }
if (!pluginsPath_.contains(result.id)) { if (!pluginsPath_.contains(result.path)) {
pluginsPath_[result.id] = path; pluginsPath_[result.path] = path;
} }
VectorString loadedPlugins = getLoadedPlugins(); VectorString loadedPlugins = getLoadedPlugins();
if (std::find(loadedPlugins.begin(), loadedPlugins.end(), result.path) != loadedPlugins.end()) { if (std::find(loadedPlugins.begin(), loadedPlugins.end(), result.path) != loadedPlugins.end()) {
@ -158,7 +159,7 @@ PluginModel::setPluginsPath()
{ {
for (auto plugin : getInstalledPlugins()) { for (auto plugin : getInstalledPlugins()) {
auto details = getPluginDetails(plugin); auto details = getPluginDetails(plugin);
pluginsPath_[details.name] = details.path; pluginsPath_[details.id] = details.path;
} }
} }