diff --git a/core/mrc.js b/core/mrc.js index 496e7e9b..11533dbd 100644 --- a/core/mrc.js +++ b/core/mrc.js @@ -379,7 +379,9 @@ exports.getModule = class mrcModule extends MenuModule { } // Deliver PrivMsg - else if (message.to_user.toLowerCase() == this.state.alias.toLowerCase()) { + else if ( + message.to_user.toLowerCase() == this.state.alias.toLowerCase() + ) { const currentTime = moment().format( this.client.currentTheme.helpers.getTimeFormat() ); @@ -387,8 +389,6 @@ exports.getModule = class mrcModule extends MenuModule { '|08' + currentTime + '|00 ' + message.body + '|00' ); } - - } this.viewControllers.mrcChat.switchFocus(MciViewIds.mrcChat.inputArea); @@ -563,47 +563,35 @@ exports.getModule = class mrcModule extends MenuModule { * Process known additional server commands directly */ case 'afk': - this.sendServerMessage( - `AFK ${message.substr(5)}` - ); + this.sendServerMessage(`AFK ${message.substr(5)}`); break; case 'roomconfig': - this.sendServerMessage( - `ROOMCONFIG ${message.substr(12)}` - ); + this.sendServerMessage(`ROOMCONFIG ${message.substr(12)}`); break; case 'roompass': - this.sendServerMessage( - `ROOMPASS ${message.substr(12)}` - ); + this.sendServerMessage(`ROOMPASS ${message.substr(12)}`); break; case 'status': - this.sendServerMessage( - `STATUS ${message.substr(8)}` - ); + this.sendServerMessage(`STATUS ${message.substr(8)}`); break; case 'lastseen': - this.sendServerMessage( - `LASTSEEN ${message.substr(10)}` - ); + this.sendServerMessage(`LASTSEEN ${message.substr(10)}`); break; - + case 'help': - this.sendServerMessage( - `HELP ${message.substr(6)}` - ); + this.sendServerMessage(`HELP ${message.substr(6)}`); break; - + case 'statistics': case 'changelog': case 'listbans': case 'listmutes': case 'routing': - this.sendServerMessage(cmd[0].toUpperCase()); + this.sendServerMessage(cmd[0].toUpperCase()); break; case 'quit': diff --git a/core/oputil/oputil_help.js b/core/oputil/oputil_help.js index 6a5ee7d9..e2af0587 100644 --- a/core/oputil/oputil_help.js +++ b/core/oputil/oputil_help.js @@ -183,6 +183,8 @@ General Information: MessageBase: `usage: oputil.js mb [] Actions: + list-confs List conferences and areas + areafix CMD1 CMD2 ... ADDR Sends an AreaFix NetMail NetMail is sent to supplied address with the supplied command(s). Multi-part commands @@ -195,6 +197,9 @@ Actions: packet in the directory specified by PATH. The QWK BBS ID will be obtained by the final component of PATH. +list-confs arguments: + --areas Include areas within each message conference. + import-areas arguments: --conf CONF_TAG Conference tag in which to import areas --network NETWORK Network name/key to associate FTN areas diff --git a/core/oputil/oputil_message_base.js b/core/oputil/oputil_message_base.js index 38f5e529..36cde188 100644 --- a/core/oputil/oputil_message_base.js +++ b/core/oputil/oputil_message_base.js @@ -692,6 +692,30 @@ function exportQWKPacket() { ); } +const listConferences = () => { + initConfigAndDatabases(err => { + if (err) { + return console.error(err.reason ? err.reason : err.message); + } + + const { getSortedAvailMessageConferences } = require('../../core/message_area'); + + const conferences = getSortedAvailMessageConferences(null, { noClient: true }); + + for (let conf of conferences) { + console.info(`${conf.confTag} - ${conf.conf.name}`); + + if (!argv.areas) { + continue; + } + + for (let areaTag of Object.keys(conf.conf.areas)) { + console.info(` ${areaTag} - ${conf.conf.areas[areaTag].name}`); + } + } + }); +}; + function handleMessageBaseCommand() { function errUsage() { return printUsageAndSetExitCode(getHelpFor('MessageBase'), ExitCodes.ERROR); @@ -709,6 +733,7 @@ function handleMessageBaseCommand() { 'import-areas': importAreas, 'qwk-dump': dumpQWKPacket, 'qwk-export': exportQWKPacket, + 'list-confs': listConferences, }[action] || errUsage )(); } diff --git a/core/user_config.js b/core/user_config.js index e5bbff6f..b5f56e90 100644 --- a/core/user_config.js +++ b/core/user_config.js @@ -8,10 +8,10 @@ const theme = require('./theme.js'); const sysValidate = require('./system_view_validate.js'); const UserProps = require('./user_property.js'); const { getISOTimestampString } = require('./database.js'); +const EnigAssert = require('./enigma_assert'); // deps const async = require('async'); -const assert = require('assert'); const _ = require('lodash'); const moment = require('moment'); @@ -110,7 +110,10 @@ exports.getModule = class UserConfigModule extends MenuModule { // Handlers // saveChanges: function (formData, extraArgs, cb) { - assert(formData.value.password === formData.value.passwordConfirm); + EnigAssert(formData.value.password === formData.value.passwordConfirm); + + // cache a copy of |formData| as changing a theme below can invalidate it + formData = _.clone(formData); const newProperties = { [UserProps.RealName]: formData.value.realName, @@ -127,7 +130,7 @@ exports.getModule = class UserConfigModule extends MenuModule { self.availThemeInfo[formData.value.theme].themeId, }; - // runtime set theme + // Runtime set theme theme.setClientTheme(self.client, newProperties.theme_id); // persist all changes