Clean plugin action renderers based on availability

This commit is contained in:
Ryan Blenis 2019-11-01 22:56:17 -04:00
parent b3d24c37f0
commit 72b5939a44

View File

@ -2365,23 +2365,7 @@
} }
case 'pluginVersionsAvailable': { case 'pluginVersionsAvailable': {
if (pluginHandler == null) break; if (pluginHandler == null) break;
try { updatePluginList(message.list);
var td = Q('pluginRow-'+message.list.id).querySelectorAll(".pluginUpgradeAvailable");
var sel = Q('pluginRow-'+message.list.id).querySelectorAll(".pluginAction > select");
td = td[0];
sel = sel[0];
if (message.list.hasUpdate && message.list.status) {
td.innerHTML = '<a title="View Changelog" target="_blank" href="' + message.list.changelogUrl + '">' + message.list.version + '</a>';
if (sel.innerHTML.indexOf('Upgrade') === -1) {
var option = document.createElement("option");
option.value = "install"
option.text = "Upgrade";
sel.add(option);
}
} else {
td.innerHTML = "Up to date";
}
} catch (e) { }
break; break;
} }
case 'plugin': { case 'plugin': {
@ -9434,8 +9418,12 @@
} }
} }
function updatePluginList() { function updatePluginList(versInfo) {
if (installedPluginList.length) { if (installedPluginList.length) {
if (versInfo != null) {
if (installedPluginList['version_info'] == null) installedPluginList['version_info'] = [];
installedPluginList['version_info'][versInfo.id] = versInfo;
}
var tr = Q('p7tbl').querySelectorAll(".p7tblRow"); var tr = Q('p7tbl').querySelectorAll(".p7tblRow");
if (tr.length) { if (tr.length) {
for (const i in Object.values(tr)) { for (const i in Object.values(tr)) {
@ -9458,24 +9446,51 @@
'delete': 'Delete' 'delete': 'Delete'
}, },
1: { 1: {
'disable': 'Disable' 'disable': 'Disable',
'upgrade': 'Upgrade'
} }
}; };
var vers_not_compat = ` [ <span onclick="return setDialogMode(2, 'Compatibility Issue', 1, null, 'This plugin version is not compatible with your MeshCentral installation, please upgrade MeshCentral first.');" title="Version incompatible, please upgrade your MeshCentral installation first" style="cursor: pointer; color:red;"> ! </span> ]`;
var tbl = Q('p7tbl'); var tbl = Q('p7tbl');
installedPluginList.forEach(function(p){ installedPluginList.forEach(function(p){
var cant_action = [];
if (p.hasAdminPanel == true) { if (p.hasAdminPanel == true) {
p.name = `<a onclick="return goPlugin('${p._id}');">${p.name}</a>`; p.name = `<a onclick="return goPlugin('${p._id}');">${p.name}</a>`;
} }
p.statusText = statusMap[p.status].text; p.statusText = statusMap[p.status].text;
p.statusColor = statusMap[p.status].color; p.statusColor = statusMap[p.status].color;
if (!p.status) { // It isn't technically installed, so no version number
p.version = ' - ';
}
p.upgradeAvail = 'Checking...';
if (installedPluginList['version_info'] != null && installedPluginList['version_info'][p._id] != null) {
var vin = installedPluginList['version_info'][p._id];
if (vin.hasUpdate) {
p.upgradeAvail = '<a title="View Changelog" target="_blank" href="' + vin.changelogUrl + '">' + vin.version + '</a>';
} else {
cant_action.push('upgrade');
if (p.status) p.upgradeAvail = 'Up to date';
else p.upgradeAvail = '<a title="View Changelog" target="_blank" href="' + vin.changelogUrl + '">' + vin.version + '</a>';
}
if (!vin.meshCentralCompat) {
p.upgradeAvail += vers_not_compat;
cant_action.push('install');
}
}
p.actions = '<select onchange="return pluginAction(this, \'' + p._id + '\');"><option value=""> --</option>'; p.actions = '<select onchange="return pluginAction(this, \'' + p._id + '\');"><option value=""> --</option>';
for (const [k, v] of Object.entries(statusAvailability[p.status])) { for (const [k, v] of Object.entries(statusAvailability[p.status])) {
p.actions += '<option value="' + k + '">' + v + '</option>'; if (cant_action.indexOf(k) === -1) {
p.actions += '<option value="' + k + '">' + v + '</option>';
}
} }
p.action += '</select>' p.actions += '</select>';
let tpl = `<td>${p.name}</td><td>${p.description}</td><td><a href="${p.homepage}" target="_blank">Homepage</a></td><td>${p.version}</td><td class="pluginUpgradeAvailable">Checking...</td><td style="color: #${p.statusColor}">${p.statusText}</td><td class="pluginAction">${p.actions}</td>`; let tpl = `<td>${p.name}</td><td>${p.description}</td><td><a href="${p.homepage}" target="_blank">Homepage</a></td><td>${p.version}</td><td class="pluginUpgradeAvailable">${p.upgradeAvail}</td><td style="color: #${p.statusColor}">${p.statusText}</td><td class="pluginAction">${p.actions}</td>`;
let tr = tbl.insertRow(-1); let tr = tbl.insertRow(-1);
tr.innerHTML = tpl; tr.innerHTML = tpl;
tr.classList.add('p7tblRow'); tr.classList.add('p7tblRow');
@ -9488,7 +9503,7 @@
tr[i].parentNode.removeChild(tr[i]); tr[i].parentNode.removeChild(tr[i]);
} }
} }
refreshPluginLatest(); if (versInfo == null) refreshPluginLatest();
} }
function refreshPluginLatest() { function refreshPluginLatest() {
@ -9498,18 +9513,16 @@
function pluginActionEx() { function pluginActionEx() {
var act = Q('lastPluginAct').value, id = Q('lastPluginId').value; var act = Q('lastPluginAct').value, id = Q('lastPluginId').value;
switch(act) { switch(act) {
case 'install': { case 'upgrade':
case 'install':
meshserver.send({ "action": "installplugin", "id": id }); meshserver.send({ "action": "installplugin", "id": id });
break; break;
} case 'delete':
case 'delete': {
meshserver.send({ "action": "removeplugin", "id": id }); meshserver.send({ "action": "removeplugin", "id": id });
break; break;
} case 'disable':
case 'disable': {
meshserver.send({ "action": "disableplugin", "id": id }); meshserver.send({ "action": "disableplugin", "id": id });
break; break;
}
} }
QS('pluginRestartNotice').display = ''; QS('pluginRestartNotice').display = '';
} }