From 1616261bef925d7c7d3e9b4c23b524a1db3ff2d2 Mon Sep 17 00:00:00 2001
From: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
Date: Wed, 20 Sep 2023 15:38:15 -0300
Subject: [PATCH] misc: update plugin-store after plugin uninstall

Change-Id: Ibbb428e17f362f3645a530ad55fbd87d6719f98d
---
 src/app/pluginlistmodel.cpp                            |  3 +++
 src/app/pluginlistmodel.h                              |  3 ++-
 src/app/pluginstorelistmodel.cpp                       | 10 +++-------
 src/app/pluginversionmanager.cpp                       |  2 +-
 .../settingsview/components/PluginPreferencesView.qml  |  3 ++-
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/app/pluginlistmodel.cpp b/src/app/pluginlistmodel.cpp
index 46f25caee..a63ffb4a6 100644
--- a/src/app/pluginlistmodel.cpp
+++ b/src/app/pluginlistmodel.cpp
@@ -80,6 +80,8 @@ PluginListModel::data(const QModelIndex& index, int role) const
         return QVariant(pluginStatus_.value(installedPlugins_.at(index.row())));
     case Role::NewPluginAvailable:
         return QVariant(newVersionAvailable_.value(installedPlugins_.at(index.row())));
+    case Role::Id:
+        return QVariant(details.id);
     }
     return QVariant();
 }
@@ -98,6 +100,7 @@ PluginListModel::roleNames() const
     roles[Status] = "Status";
     roles[PluginDescription] = "PluginDescription";
     roles[NewPluginAvailable] = "NewPluginAvailable";
+    roles[Id] = "Id";
     return roles;
 }
 
diff --git a/src/app/pluginlistmodel.h b/src/app/pluginlistmodel.h
index 9605b3004..8bf2a0776 100644
--- a/src/app/pluginlistmodel.h
+++ b/src/app/pluginlistmodel.h
@@ -38,7 +38,8 @@ public:
         PluginIcon,
         NewPluginAvailable,
         IsLoaded,
-        Status
+        Status,
+        Id
     };
     Q_ENUM(Role)
 
diff --git a/src/app/pluginstorelistmodel.cpp b/src/app/pluginstorelistmodel.cpp
index dc7c7bac3..3a9c08a5e 100644
--- a/src/app/pluginstorelistmodel.cpp
+++ b/src/app/pluginstorelistmodel.cpp
@@ -79,7 +79,6 @@ void
 PluginStoreListModel::reset()
 {
     beginResetModel();
-    plugins_.clear();
     endResetModel();
 }
 
@@ -88,8 +87,8 @@ PluginStoreListModel::addPlugin(const QVariantMap& plugin)
 {
     beginInsertRows(QModelIndex(), plugins_.size(), plugins_.size());
     plugins_.append(plugin);
-    endInsertRows();
     sort();
+    endInsertRows();
 }
 
 void
@@ -97,8 +96,8 @@ PluginStoreListModel::setPlugins(const QList<QVariantMap>& plugins)
 {
     beginResetModel();
     plugins_ = filterPlugins(plugins);
-    endResetModel();
     sort();
+    endResetModel();
 }
 
 void
@@ -109,12 +108,12 @@ PluginStoreListModel::removePlugin(const QString& pluginId)
         if (plugin["id"].toString() == pluginId) {
             beginRemoveRows(QModelIndex(), index, index);
             plugins_.removeAt(index);
+            sort();
             endRemoveRows();
             return;
         }
         index++;
     }
-    sort();
 }
 
 void
@@ -129,7 +128,6 @@ PluginStoreListModel::updatePlugin(const QVariantMap& plugin)
         }
         index++;
     }
-    sort();
 }
 
 QColor
@@ -221,11 +219,9 @@ PluginStoreListModel::rowFromPluginId(const QString& pluginId) const
 void
 PluginStoreListModel::sort()
 {
-    beginResetModel();
     std::sort(plugins_.begin(), plugins_.end(), [](const QVariantMap& a, const QVariantMap& b) {
         return a["timestamp"].toString() < b["timestamp"].toString();
     });
-    endResetModel();
 }
 
 QList<QVariantMap>
diff --git a/src/app/pluginversionmanager.cpp b/src/app/pluginversionmanager.cpp
index 04c850d3f..6f2c11d52 100644
--- a/src/app/pluginversionmanager.cpp
+++ b/src/app/pluginversionmanager.cpp
@@ -109,7 +109,7 @@ public:
                                    // `data` represents the version in this case.
                                    if (plugin.version < data) {
                                        if (isAutoUpdaterEnabled()) {
-                                           installRemotePlugin(plugin.name);
+                                           installRemotePlugin(plugin.id);
                                            return;
                                        }
                                    }
diff --git a/src/app/settingsview/components/PluginPreferencesView.qml b/src/app/settingsview/components/PluginPreferencesView.qml
index 35b185b50..79d8163ec 100644
--- a/src/app/settingsview/components/PluginPreferencesView.qml
+++ b/src/app/settingsview/components/PluginPreferencesView.qml
@@ -289,9 +289,10 @@ Item {
                                 "buttonTitles": [JamiStrings.optionOk, JamiStrings.optionCancel],
                                 "buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue, SimpleMessageDialog.ButtonStyle.TintedBlack],
                                 "buttonCallBacks": [function () {
-                                        PluginListModel.setVersionStatus(PluginName, PluginStatus.INSTALLABLE);
+                                        PluginListModel.setVersionStatus(Id, PluginStatus.INSTALLABLE);
                                         PluginModel.uninstallPlugin(PluginId);
                                         PluginListModel.removePlugin(index);
+                                        PluginAdapter.getPluginsFromStore();
                                         // could not call root from here
                                         settings.ListView.view.parent.closed();
                                     }]
-- 
GitLab