fix: don't move theme/plugin to top if its already active

This commit is contained in:
Barış Soner Uşaklı
2019-09-05 13:31:42 -04:00
parent 1796b65d34
commit acd9576489
3 changed files with 43 additions and 44 deletions

View File

@@ -63,9 +63,19 @@ function activate(plugin) {
if (!isInstalled) { if (!isInstalled) {
return next(new Error('plugin not installed')); return next(new Error('plugin not installed'));
} }
plugins.isActive(plugin, next);
},
function (isActive, next) {
if (isActive) {
winston.info('Plugin `%s` already active', plugin);
process.exit(0);
}
db.sortetSetCard('plugins:active', next);
},
function (numPlugins, next) {
winston.info('Activating plugin `%s`', plugin); winston.info('Activating plugin `%s`', plugin);
db.sortedSetAdd('plugins:active', 0, plugin, next); db.sortedSetAdd('plugins:active', numPlugins, plugin, next);
}, },
function (next) { function (next) {
events.log({ events.log({

View File

@@ -86,39 +86,37 @@ async function getThemes(themePath) {
} }
Themes.set = async (data) => { Themes.set = async (data) => {
const themeData = {
'theme:type': data.type,
'theme:id': data.id,
'theme:staticDir': '',
'theme:templates': '',
'theme:src': '',
};
switch (data.type) { switch (data.type) {
case 'local': { case 'local': {
const current = await Meta.configs.get('theme:id'); const current = await Meta.configs.get('theme:id');
var config = await fsReadfile(path.join(nconf.get('themes_path'), data.id, 'theme.json'), 'utf8'); if (current !== data.id) {
config = JSON.parse(config); let config = await fsReadfile(path.join(nconf.get('themes_path'), data.id, 'theme.json'), 'utf8');
await db.sortedSetRemove('plugins:active', current); config = JSON.parse(config);
await db.sortedSetAdd('plugins:active', 0, data.id);
// Re-set the themes path (for when NodeBB is reloaded) await db.sortedSetRemove('plugins:active', current);
Themes.setPath(config); const numPlugins = await db.sortedSetCard('plugins:active');
await db.sortedSetAdd('plugins:active', numPlugins, data.id);
// Re-set the themes path (for when NodeBB is reloaded)
Themes.setPath(config);
themeData['theme:staticDir'] = config.staticDir ? config.staticDir : ''; await Meta.configs.setMultiple({
themeData['theme:templates'] = config.templates ? config.templates : ''; 'theme:type': data.type,
themeData['theme:src'] = ''; 'theme:id': data.id,
themeData.bootswatchSkin = ''; 'theme:staticDir': config.staticDir ? config.staticDir : '',
'theme:templates': config.templates ? config.templates : '',
'theme:src': '',
bootswatchSkin: '',
});
await Meta.configs.setMultiple(themeData); await events.log({
await events.log({ type: 'theme-set',
type: 'theme-set', uid: parseInt(data.uid, 10) || 0,
uid: parseInt(data.uid, 10) || 0, ip: data.ip || '127.0.0.1',
ip: data.ip || '127.0.0.1', text: data.id,
text: data.id, });
});
Meta.reloadRequired = true; Meta.reloadRequired = true;
}
break; break;
} }
case 'bootswatch': case 'bootswatch':

View File

@@ -106,27 +106,18 @@ SocketAdmin.themes.getInstalled = function (socket, data, callback) {
meta.themes.get(callback); meta.themes.get(callback);
}; };
SocketAdmin.themes.set = function (socket, data, callback) { SocketAdmin.themes.set = async function (socket, data) {
if (!data) { if (!data) {
return callback(new Error('[[error:invalid-data]]')); throw new Error('[[error:invalid-data]]');
}
if (data.type === 'local') {
await widgets.reset();
} }
async.waterfall([ data.ip = socket.ip;
function (next) { data.uid = socket.uid;
if (data.type === 'bootswatch') {
setImmediate(next);
} else {
widgets.reset(next);
}
},
function (next) {
// Add uid and ip data
data.ip = socket.ip;
data.uid = socket.uid;
meta.themes.set(data, next); await meta.themes.set(data);
},
], callback);
}; };
SocketAdmin.plugins.toggleActive = async function (socket, plugin_id) { SocketAdmin.plugins.toggleActive = async function (socket, plugin_id) {