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

v1.18.x
Barış Soner Uşaklı 6 years ago
parent 1796b65d34
commit acd9576489

@ -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({

@ -86,31 +86,28 @@ 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) {
let config = await fsReadfile(path.join(nconf.get('themes_path'), data.id, 'theme.json'), 'utf8');
config = JSON.parse(config); config = JSON.parse(config);
await db.sortedSetRemove('plugins:active', current);
await db.sortedSetAdd('plugins:active', 0, data.id);
await db.sortedSetRemove('plugins:active', current);
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) // Re-set the themes path (for when NodeBB is reloaded)
Themes.setPath(config); 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,
@ -119,6 +116,7 @@ Themes.set = async (data) => {
}); });
Meta.reloadRequired = true; Meta.reloadRequired = true;
}
break; break;
} }
case 'bootswatch': case 'bootswatch':

@ -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') {
async.waterfall([ await widgets.reset();
function (next) {
if (data.type === 'bootswatch') {
setImmediate(next);
} else {
widgets.reset(next);
} }
},
function (next) {
// Add uid and ip data
data.ip = socket.ip; data.ip = socket.ip;
data.uid = socket.uid; 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) {

Loading…
Cancel
Save