Skip to content
Snippets Groups Projects
Commit 8c75ac8a authored by Xavier Jouslin de Noray's avatar Xavier Jouslin de Noray Committed by Sébastien Blin
Browse files

UpdateManager: fix to be able to update if needed

Gitlab: #1426

Change-Id: Ib6bda9d03fad23fe896ad76bda3d6fd52a1e2dbb
parent 92546c73
No related branches found
No related tags found
No related merge requests found
......@@ -218,10 +218,12 @@ void
PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status)
{
auto pluginIndex = -1;
for (auto& p : installedPlugins_) {
QString pluginModelId = "";
for (const auto& p : installedPlugins_) {
auto details = lrcInstance_->pluginModel().getPluginDetails(p);
if (details.name == pluginId) {
if (details.id == pluginId) {
pluginIndex = installedPlugins_.indexOf(p, -1);
pluginModelId = p;
break;
}
}
......@@ -229,6 +231,10 @@ PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::R
case PluginStatus::INSTALLED:
addPlugin();
break;
case PluginStatus::FAILED:
errorOccurred(pluginId);
status = PluginStatus::UPDATABLE;
break;
default:
break;
}
......@@ -236,7 +242,8 @@ PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::R
if (pluginIndex == -1) {
return;
}
pluginStatus_[pluginId] = status;
pluginStatus_[pluginModelId] = status;
pluginChanged(pluginIndex);
switch (status) {
case PluginStatus::INSTALLABLE:
removePlugin(pluginIndex);
......
......@@ -72,6 +72,8 @@ Q_SIGNALS:
void setVersionStatus(const QString& pluginId, PluginStatus::Role status);
void autoUpdateChanged(bool state);
void disabled(const QString& pluginId);
void errorOccurred(const QString& pluginId);
public Q_SLOTS:
void onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status);
void onNewVersionAvailable(const QString& pluginId, const QString& version);
......
......@@ -21,6 +21,8 @@
#include "lrcinstance.h"
#include "api/pluginmodel.h"
#include <QJsonArray>
#include <QJsonDocument>
#include <QMap>
#include <QTimer>
#include <QDir>
......@@ -101,21 +103,20 @@ public:
Q_EMIT parent_.versionStatusChanged(plugin.id, PluginStatus::Role::FAILED);
return;
}
parent_.sendGetRequest(QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString()
+ "/versions/" + plugin.id + "?arch="
+ lrcInstance_->pluginModel().getPlatformInfo()["os"]),
[this, plugin](const QByteArray& data) {
// `data` represents the version in this case.
if (plugin.version < data) {
if (isAutoUpdaterEnabled()) {
installRemotePlugin(plugin.id);
return;
}
}
parent_.versionStatusChanged(plugin.id,
PluginStatus::Role::UPDATABLE);
});
parent_.sendGetRequest(
QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString() + "/versions/"
+ plugin.id + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
[this, plugin](const QByteArray& data) {
// `data` represents the version in this case.
auto result = QJsonDocument::fromJson(data).array().toVariantList()[0].toMap();
if (parent_.checkVersion(plugin.version, result["version"].toString())) {
if (isAutoUpdaterEnabled()) {
installRemotePlugin(plugin.id);
return;
}
parent_.versionStatusChanged(plugin.id, PluginStatus::Role::UPDATABLE);
}
});
}
void installRemotePlugin(const QString& pluginId)
......@@ -222,3 +223,22 @@ PluginVersionManager::installRemotePlugin(const QString& pluginId)
{
pimpl_->installRemotePlugin(pluginId);
}
bool
PluginVersionManager::checkVersion(const QString& installedVersion,
const QString& remoteVersion) const
{
auto installedVersionDetails = installedVersion.split(".");
auto remoteVersionDetails = remoteVersion.split(".");
if (remoteVersionDetails.size() != installedVersionDetails.size()) {
return false;
}
for (int i = 0; i < installedVersionDetails.size(); i++) {
if (installedVersionDetails[i].toInt() < remoteVersionDetails[i].toInt()) {
return true;
} else if (installedVersionDetails[i].toInt() > remoteVersionDetails[i].toInt()) {
return false;
}
}
return false;
}
\ No newline at end of file
......@@ -69,6 +69,7 @@ Q_SIGNALS:
void newVersionAvailable(const QString& pluginId, const QString& version);
private:
bool checkVersion(const QString& installedVersion, const QString& remoteVersion) const;
QString baseUrl;
bool autoUpdateCheck = false;
QMap<QString, int> pluginRepliesId {};
......
......@@ -27,24 +27,43 @@ import "../../commoncomponents"
ItemDelegate {
id: root
property string pluginName: ""
property string pluginId: ""
property string pluginPath: ""
property string pluginIcon: ""
property string pluginId: ""
property int pluginStatus
property bool isLoaded: false
height: implicitHeight
Connections {
target: PluginListModel
function onDisabled(id) {
if (root.pluginId === id) {
if (root.pluginPath === id) {
isLoaded = false;
loadSwitch.checked = false;
}
}
function onErrorOccurred(id) {
if (root.pluginId !== id) {
return;
}
presentErrorMessage();
}
}
onClicked: {
pluginListView.currentIndex = index;
}
Component.onCompleted: {
PluginAdapter.checkVersionStatus(pluginPath);
}
function presentErrorMessage() {
viewCoordinator.presentDialog(appWindow, "commoncomponents/SimpleMessageDialog.qml", {
"title": JamiStrings.installationFailed,
"infoText": JamiStrings.pluginInstallationFailed,
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue],
"buttonTitles": [JamiStrings.optionOk],
"buttonCallBacks": []
});
}
Rectangle {
id: mask
......@@ -121,6 +140,7 @@ ItemDelegate {
preferredWidth: updateTextSize.width
text: JamiStrings.updateDialogTitle
fontSize: 15
onClicked: PluginAdapter.installRemotePlugin(pluginId)
}
Item {
id: itemSwitch
......@@ -140,9 +160,9 @@ ItemDelegate {
checked: isLoaded
onSwitchToggled: {
if (isLoaded)
PluginModel.unloadPlugin(pluginId);
PluginModel.unloadPlugin(pluginPath);
else
PluginModel.loadPlugin(pluginId);
PluginModel.loadPlugin(pluginPath);
PluginListModel.pluginChanged(index);
}
}
......
......@@ -109,10 +109,11 @@ Rectangle {
implicitHeight: 50
pluginName: PluginName
pluginId: PluginId
pluginPath: PluginId
pluginIcon: PluginIcon
pluginStatus: Status
isLoaded: IsLoaded
pluginId: Id
HoverHandler {
id: pluginHover
target: parent
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment