Merge branch 'master' of ssh://numinibsd/git/base/enigma-bbs
This commit is contained in:
commit
a39beda354
67
core/fse.js
67
core/fse.js
|
@ -9,6 +9,7 @@ var MultiLineEditTextView = require('../core/multi_line_edit_text_view.js').Mul
|
||||||
var Message = require('../core/message.js');
|
var Message = require('../core/message.js');
|
||||||
var getMessageAreaByName = require('../core/message_area.js').getMessageAreaByName;
|
var getMessageAreaByName = require('../core/message_area.js').getMessageAreaByName;
|
||||||
var updateMessageAreaLastReadId = require('../core/message_area.js').updateMessageAreaLastReadId;
|
var updateMessageAreaLastReadId = require('../core/message_area.js').updateMessageAreaLastReadId;
|
||||||
|
var getUserIdAndName = require('../core/user.js').getUserIdAndName;
|
||||||
|
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
@ -67,7 +68,6 @@ var MCICodeIds = {
|
||||||
To : 2,
|
To : 2,
|
||||||
Subject : 3,
|
Subject : 3,
|
||||||
AreaName : 4,
|
AreaName : 4,
|
||||||
|
|
||||||
DateTime : 5,
|
DateTime : 5,
|
||||||
MsgNum : 6,
|
MsgNum : 6,
|
||||||
MsgTotal : 7,
|
MsgTotal : 7,
|
||||||
|
@ -103,21 +103,41 @@ function FullScreenEditorModule(options) {
|
||||||
// editorType : email | area
|
// editorType : email | area
|
||||||
// editorMode : view | edit | quote
|
// editorMode : view | edit | quote
|
||||||
//
|
//
|
||||||
// extraArgs - view mode
|
// menuConfig.config or extraArgs
|
||||||
// messageAreaName
|
// messageAreaName
|
||||||
// messageIndex / messageTotal
|
// messageIndex / messageTotal
|
||||||
//
|
// toUserId
|
||||||
//
|
//
|
||||||
this.editorType = config.editorType;
|
this.editorType = config.editorType;
|
||||||
this.editorMode = config.editorMode;
|
this.editorMode = config.editorMode;
|
||||||
|
|
||||||
if(_.isObject(options.extraArgs)) {
|
if(config.messageAreaName) {
|
||||||
//console.log(options.extraArgs)
|
this.messageAreaName = config.messageAreaName;
|
||||||
this.messageAreaName = options.extraArgs.messageAreaName || Message.WellKnownAreaNames.Private;
|
|
||||||
this.messageIndex = options.extraArgs.messageIndex || 0;
|
|
||||||
this.messageTotal = options.extraArgs.messageTotal || 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.messageIndex = config.messageIndex || 0;
|
||||||
|
this.messageTotal = config.messageTotal || 0;
|
||||||
|
this.toUserId = config.toUserId || 0;
|
||||||
|
|
||||||
|
// extraArgs can override some config
|
||||||
|
if(_.isObject(options.extraArgs)) {
|
||||||
|
if(options.extraArgs.messageAreaName) {
|
||||||
|
this.messageAreaName = options.extraArgs.messageAreaName;
|
||||||
|
}
|
||||||
|
if(options.extraArgs.messageIndex) {
|
||||||
|
this.messageIndex = options.extraArgs.messageIndex;
|
||||||
|
}
|
||||||
|
if(options.extraArgs.messageTotal) {
|
||||||
|
this.messageTotal = options.extraArgs.messageTotal;
|
||||||
|
}
|
||||||
|
if(options.extraArgs.toUserId) {
|
||||||
|
this.toUserId = options.extraArgs.toUserId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(this.toUserId)
|
||||||
|
console.log(this.messageAreaName)
|
||||||
|
|
||||||
this.isReady = false;
|
this.isReady = false;
|
||||||
|
|
||||||
this.isEditMode = function() {
|
this.isEditMode = function() {
|
||||||
|
@ -129,7 +149,7 @@ function FullScreenEditorModule(options) {
|
||||||
};
|
};
|
||||||
|
|
||||||
this.isLocalEmail = function() {
|
this.isLocalEmail = function() {
|
||||||
return 'email' === self.editorType && Message.WellKnownAreaNames.Private === self.messageAreaName;
|
return Message.WellKnownAreaNames.Private === self.messageAreaName;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.isReply = function() {
|
this.isReply = function() {
|
||||||
|
@ -214,9 +234,9 @@ function FullScreenEditorModule(options) {
|
||||||
this.setMessage = function(message) {
|
this.setMessage = function(message) {
|
||||||
self.message = message;
|
self.message = message;
|
||||||
|
|
||||||
if(!self.message.isPrivate()) {
|
updateMessageAreaLastReadId(
|
||||||
updateMessageAreaLastReadId(self.client.user.userId, self.messageAreaName, self.message.messageId);
|
self.client.user.userId, self.messageAreaName, self.message.messageId,
|
||||||
}
|
function lastReadUpdated() {
|
||||||
|
|
||||||
if(self.isReady) {
|
if(self.isReady) {
|
||||||
self.initHeaderViewMode();
|
self.initHeaderViewMode();
|
||||||
|
@ -228,7 +248,7 @@ function FullScreenEditorModule(options) {
|
||||||
//bodyMessageView.redraw();
|
//bodyMessageView.redraw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.getMessage = function(cb) {
|
this.getMessage = function(cb) {
|
||||||
|
@ -242,12 +262,25 @@ function FullScreenEditorModule(options) {
|
||||||
},
|
},
|
||||||
function populateLocalUserInfo(callback) {
|
function populateLocalUserInfo(callback) {
|
||||||
if(self.isLocalEmail()) {
|
if(self.isLocalEmail()) {
|
||||||
msg.setLocalFromUserId(self.client.user.userId);
|
self.message.setLocalFromUserId(self.client.user.userId);
|
||||||
msg.setLocalToUserId(self.toUserId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// :TODO: DO THAT!
|
if(self.toUserId > 0) {
|
||||||
|
self.message.setLocalToUserId(self.toUserId);
|
||||||
callback(null);
|
callback(null);
|
||||||
|
} else {
|
||||||
|
// we need to look it up
|
||||||
|
getUserIdAndName(self.message.toUserName, function userInfo(err, toUserId) {
|
||||||
|
if(err) {
|
||||||
|
callback(err);
|
||||||
|
} else {
|
||||||
|
self.message.setLocalToUserId(toUserId);
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
function complete(err) {
|
function complete(err) {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
var msgDb = require('./database.js').dbs.message;
|
var msgDb = require('./database.js').dbs.message;
|
||||||
var Config = require('./config.js').config;
|
var Config = require('./config.js').config;
|
||||||
var Message = require('./message.js');
|
var Message = require('./message.js');
|
||||||
|
var Log = require('./logger.js').log;
|
||||||
|
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
|
@ -105,6 +106,19 @@ function changeMessageArea(client, areaName, cb) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMessageFromRow(row) {
|
||||||
|
return {
|
||||||
|
messageId : row.message_id,
|
||||||
|
messageUuid : row.message_uuid,
|
||||||
|
replyToMsgId : row.reply_to_message_id,
|
||||||
|
toUserName : row.to_user_name,
|
||||||
|
fromUserName : row.from_user_name,
|
||||||
|
subject : row.subject,
|
||||||
|
modTimestamp : row.modified_timestamp,
|
||||||
|
viewCount : row.view_count,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function getNewMessagesInAreaForUser(userId, areaName, cb) {
|
function getNewMessagesInAreaForUser(userId, areaName, cb) {
|
||||||
//
|
//
|
||||||
// If |areaName| is Message.WellKnownAreaNames.Private,
|
// If |areaName| is Message.WellKnownAreaNames.Private,
|
||||||
|
@ -136,18 +150,11 @@ function getNewMessagesInAreaForUser(userId, areaName, cb) {
|
||||||
|
|
||||||
sql += ' ORDER BY message_id;';
|
sql += ' ORDER BY message_id;';
|
||||||
|
|
||||||
|
console.log(sql)
|
||||||
|
|
||||||
msgDb.each(sql, function msgRow(err, row) {
|
msgDb.each(sql, function msgRow(err, row) {
|
||||||
if(!err) {
|
if(!err) {
|
||||||
msgList.push( {
|
msgList.push(getMessageFromRow(row));
|
||||||
messageId : row.message_id,
|
|
||||||
messageUuid : row.message_uuid,
|
|
||||||
replyToMsgId : row.reply_to_message_id,
|
|
||||||
toUserName : row.to_user_name,
|
|
||||||
fromUserName : row.from_user_name,
|
|
||||||
subject : row.subject,
|
|
||||||
modTimestamp : row.modified_timestamp,
|
|
||||||
viewCount : row.view_count,
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
}, callback);
|
}, callback);
|
||||||
}
|
}
|
||||||
|
@ -191,16 +198,7 @@ function getMessageListForArea(options, areaName, cb) {
|
||||||
[ areaName.toLowerCase() ],
|
[ areaName.toLowerCase() ],
|
||||||
function msgRow(err, row) {
|
function msgRow(err, row) {
|
||||||
if(!err) {
|
if(!err) {
|
||||||
msgList.push( {
|
msgList.push(getMessageFromRow(row));
|
||||||
messageId : row.message_id,
|
|
||||||
messageUuid : row.message_uuid,
|
|
||||||
replyToMsgId : row.reply_to_message_id,
|
|
||||||
toUserName : row.to_user_name,
|
|
||||||
fromUserName : row.from_user_name,
|
|
||||||
subject : row.subject,
|
|
||||||
modTimestamp : row.modified_timestamp,
|
|
||||||
viewCount : row.view_count,
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
callback
|
callback
|
||||||
|
@ -222,11 +220,13 @@ function getMessageAreaLastReadId(userId, areaName, cb) {
|
||||||
'FROM user_message_area_last_read ' +
|
'FROM user_message_area_last_read ' +
|
||||||
'WHERE user_id = ? AND area_name = ?;',
|
'WHERE user_id = ? AND area_name = ?;',
|
||||||
[ userId, areaName ],
|
[ userId, areaName ],
|
||||||
cb // (err, lastId)
|
function complete(err, row) {
|
||||||
|
cb(err, row ? row.message_id : 0);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateMessageAreaLastReadId(userId, areaName, messageId) {
|
function updateMessageAreaLastReadId(userId, areaName, messageId, cb) {
|
||||||
// :TODO: likely a better way to do this...
|
// :TODO: likely a better way to do this...
|
||||||
async.waterfall(
|
async.waterfall(
|
||||||
[
|
[
|
||||||
|
@ -241,10 +241,25 @@ function updateMessageAreaLastReadId(userId, areaName, messageId) {
|
||||||
msgDb.run(
|
msgDb.run(
|
||||||
'REPLACE INTO user_message_area_last_read (user_id, area_name, message_id) ' +
|
'REPLACE INTO user_message_area_last_read (user_id, area_name, message_id) ' +
|
||||||
'VALUES (?, ?, ?);',
|
'VALUES (?, ?, ?);',
|
||||||
[ userId, areaName, messageId ]
|
[ userId, areaName, messageId ],
|
||||||
|
callback
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
callback(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
function complete(err) {
|
||||||
|
if(err) {
|
||||||
|
Log.debug(
|
||||||
|
{ error : err.toString(), userId : userId, areaName : areaName, messageId : messageId },
|
||||||
|
'Failed updating area last read ID');
|
||||||
|
} else {
|
||||||
|
Log.trace(
|
||||||
|
{ userId : userId, areaName : areaName, messageId : messageId },
|
||||||
|
'Area last read ID updated');
|
||||||
|
}
|
||||||
|
cb(err);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,14 +19,16 @@ exports.getModule = NewScanModule;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* :TODO:
|
* :TODO:
|
||||||
* * Update message ID when reading (this should be working!)
|
* * User configurable new scan: Area selection (avail from messages area) (sep module)
|
||||||
* * New scan all areas
|
|
||||||
* * User configurable new scan: Area selection (avail from messages area)
|
|
||||||
* * Add status TL/VM (either/both should update if present)
|
* * Add status TL/VM (either/both should update if present)
|
||||||
* *
|
* *
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var MciCodeIds = {
|
||||||
|
ScanStatusLabel : 1, // TL1
|
||||||
|
ScanStatusList : 2, // VM2 (appends)
|
||||||
|
};
|
||||||
|
|
||||||
function NewScanModule(options) {
|
function NewScanModule(options) {
|
||||||
MenuModule.call(this, options);
|
MenuModule.call(this, options);
|
||||||
|
@ -35,8 +37,26 @@ function NewScanModule(options) {
|
||||||
var config = this.menuConfig.config;
|
var config = this.menuConfig.config;
|
||||||
|
|
||||||
this.currentStep = 'messageAreas';
|
this.currentStep = 'messageAreas';
|
||||||
this.currentScanAux = 0; // Message.WellKnownAreaNames.Private
|
this.currentScanAux = 0; // e.g. Message.WellKnownAreaNames.Private when currentSteps = messageAreas
|
||||||
|
|
||||||
|
this.scanStartFmt = config.scanStartFmt || 'Scanning {desc}...';
|
||||||
|
this.scanFinishNoneFmt = config.scanFinishNoneFmt || 'Nothing new';
|
||||||
|
this.scanFinishNewFmt = config.scanFinishNewFmt || '{count} entries found';
|
||||||
|
this.scanCompleteMsg = config.scanCompleteMsg || 'Finished newscan';
|
||||||
|
|
||||||
|
this.updateScanStatus = function(statusText) {
|
||||||
|
var vc = self.viewControllers.allViews;
|
||||||
|
|
||||||
|
var view = vc.getView(MciCodeIds.ScanStatusLabel);
|
||||||
|
if(view) {
|
||||||
|
view.setText(statusText);
|
||||||
|
}
|
||||||
|
|
||||||
|
view = vc.getView(MciCodeIds.ScanStatusList);
|
||||||
|
// :TODO: MenuView needs appendItem()
|
||||||
|
if(view) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
this.newScanMessageArea = function(cb) {
|
this.newScanMessageArea = function(cb) {
|
||||||
var availMsgAreas = msgArea.getAvailableMessageAreas( { includePrivate : true } );
|
var availMsgAreas = msgArea.getAvailableMessageAreas( { includePrivate : true } );
|
||||||
|
@ -54,16 +74,31 @@ function NewScanModule(options) {
|
||||||
self.currentScanAux += 1;
|
self.currentScanAux += 1;
|
||||||
callback(null);
|
callback(null);
|
||||||
} else {
|
} else {
|
||||||
|
self.updateScanStatus(self.scanCompleteMsg);
|
||||||
callback(new Error('No more areas'));
|
callback(new Error('No more areas'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function updateStatus(callback) {
|
function updateStatusScanStarted(callback) {
|
||||||
// :TODO: Update status text
|
self.updateScanStatus(self.scanStartFmt.format({
|
||||||
|
desc : currentArea.desc,
|
||||||
|
}));
|
||||||
callback(null);
|
callback(null);
|
||||||
},
|
},
|
||||||
function newScanAreaAndGetMessages(callback) {
|
function newScanAreaAndGetMessages(callback) {
|
||||||
msgArea.getNewMessagesInAreaForUser(
|
msgArea.getNewMessagesInAreaForUser(
|
||||||
self.client.user.userId, currentArea.name, function msgs(err, msgList) {
|
self.client.user.userId, currentArea.name, function msgs(err, msgList) {
|
||||||
|
if(!err) {
|
||||||
|
if(0 === msgList.length) {
|
||||||
|
self.updateScanStatus(self.scanFinishNoneFmt.format({
|
||||||
|
desc : currentArea.desc,
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
self.updateScanStatus(self.scanFinishNewFmt.format({
|
||||||
|
desc : currentArea.desc,
|
||||||
|
count : msgList.length,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
callback(err, msgList);
|
callback(err, msgList);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -369,9 +369,6 @@
|
||||||
art: LETTER
|
art: LETTER
|
||||||
options: { pause: true }
|
options: { pause: true }
|
||||||
next: newUserFeedbackToSysOp
|
next: newUserFeedbackToSysOp
|
||||||
extraArgs: {
|
|
||||||
messageAreaName: private_mail
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
newUserFeedbackToSysOp: {
|
newUserFeedbackToSysOp: {
|
||||||
|
@ -395,7 +392,9 @@
|
||||||
help: MSGEHLP
|
help: MSGEHLP
|
||||||
},
|
},
|
||||||
editorMode: edit
|
editorMode: edit
|
||||||
editorType: area
|
editorType: email
|
||||||
|
messageAreaName: private_mail
|
||||||
|
toUserId: 1 /* always to +op */
|
||||||
}
|
}
|
||||||
form: {
|
form: {
|
||||||
0: {
|
0: {
|
||||||
|
@ -505,6 +504,7 @@
|
||||||
options: { pause: true }
|
options: { pause: true }
|
||||||
next: fullLoginSequenceLastCallers
|
next: fullLoginSequenceLastCallers
|
||||||
}
|
}
|
||||||
|
|
||||||
fullLoginSequenceLastCallers: {
|
fullLoginSequenceLastCallers: {
|
||||||
desc: Last Callers
|
desc: Last Callers
|
||||||
module: last_callers
|
module: last_callers
|
||||||
|
@ -517,8 +517,34 @@
|
||||||
module: whos_online
|
module: whos_online
|
||||||
art: WHOSON
|
art: WHOSON
|
||||||
options: { pause: true }
|
options: { pause: true }
|
||||||
next: fullLoginSequenceSysStats
|
next: fullLoginSequenceNewScanConfirm
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fullLoginSequenceNewScanConfirm: {
|
||||||
|
desc: Logging In
|
||||||
|
prompt: loginGlobalNewScan
|
||||||
|
submit: [
|
||||||
|
{
|
||||||
|
value: { promptValue: 0 }
|
||||||
|
action: @menu:fullLoginSequenceNewScan
|
||||||
|
}
|
||||||
|
{
|
||||||
|
value: { promptValue: 1 }
|
||||||
|
action: @menu:fullLoginSequenceUserStats
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fullLoginSequenceNewScan: {
|
||||||
|
desc: Performing New Scan
|
||||||
|
module: @systemModule:new_scan
|
||||||
|
art: NEWSCAN
|
||||||
|
next: fullLoginSequenceSysStats
|
||||||
|
config: {
|
||||||
|
messageListMenu: newScanMessageList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fullLoginSequenceSysStats: {
|
fullLoginSequenceSysStats: {
|
||||||
desc: System Stats
|
desc: System Stats
|
||||||
art: SYSSTAT
|
art: SYSSTAT
|
||||||
|
@ -532,6 +558,40 @@
|
||||||
next: mainMenu
|
next: mainMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newScanMessageList: {
|
||||||
|
desc: Viewing New Message List
|
||||||
|
module: msg_list
|
||||||
|
art: NEWMSGS
|
||||||
|
config: {
|
||||||
|
menuViewPost: messageAreaViewPost
|
||||||
|
}
|
||||||
|
form: {
|
||||||
|
0: {
|
||||||
|
mci: {
|
||||||
|
VM1: {
|
||||||
|
focus: true
|
||||||
|
submit: true
|
||||||
|
argName: message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
submit: {
|
||||||
|
*: [
|
||||||
|
{
|
||||||
|
value: { message: null }
|
||||||
|
action: @method:selectMessage
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actionKeys: [
|
||||||
|
{
|
||||||
|
keys: [ "escape", "q", "shift + q" ]
|
||||||
|
action: @systemMethod:prevMenu
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
// Main Menu
|
// Main Menu
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
@ -743,6 +803,10 @@
|
||||||
value: { command: "4" }
|
value: { command: "4" }
|
||||||
action: @menu:doorTradeWars2002BBSLink
|
action: @menu:doorTradeWars2002BBSLink
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
value: { command: "DL" }
|
||||||
|
action: @menu:doorDarkLands
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,6 +828,24 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doorDarkLands: {
|
||||||
|
desc: Playing Dark Lands
|
||||||
|
module: abracadabra
|
||||||
|
config: {
|
||||||
|
name: DARKLANDS
|
||||||
|
dropFileType: DOOR
|
||||||
|
cmd: /home/nuskooler/dev/enigma-bbs/doors/darklands/start.sh
|
||||||
|
args: [
|
||||||
|
"{node}",
|
||||||
|
"{dropFile}",
|
||||||
|
"{srvPort}",
|
||||||
|
],
|
||||||
|
nodeMax: 1
|
||||||
|
tooManyArt: DOORMANY
|
||||||
|
io: socket
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
doorLORD: {
|
doorLORD: {
|
||||||
desc: Playing L.O.R.D.
|
desc: Playing L.O.R.D.
|
||||||
module: abracadabra
|
module: abracadabra
|
||||||
|
@ -860,7 +942,6 @@
|
||||||
module: msg_list
|
module: msg_list
|
||||||
art: MSGLIST
|
art: MSGLIST
|
||||||
config: {
|
config: {
|
||||||
listType: public
|
|
||||||
menuViewPost: messageAreaViewPost
|
menuViewPost: messageAreaViewPost
|
||||||
}
|
}
|
||||||
form: {
|
form: {
|
||||||
|
|
|
@ -45,7 +45,7 @@ function AreaPostFSEModule(options) {
|
||||||
if(err) {
|
if(err) {
|
||||||
// :TODO:... sooooo now what?
|
// :TODO:... sooooo now what?
|
||||||
} else {
|
} else {
|
||||||
console.log(msg);
|
console.log(msg); // :TODO: remove me -- probably log that one was saved, however.
|
||||||
}
|
}
|
||||||
|
|
||||||
self.nextMenu();
|
self.nextMenu();
|
||||||
|
|
|
@ -52,9 +52,21 @@ function MessageListModule(options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var config = this.menuConfig.config;
|
var config = this.menuConfig.config;
|
||||||
|
|
||||||
this.listType = config.listType || 'public';
|
this.messageAreaName = config.messageAreaName;
|
||||||
|
|
||||||
this.messageList = [];
|
if(options.extraArgs) {
|
||||||
|
//
|
||||||
|
// |extraArgs| can override |messageAreaName| provided by config
|
||||||
|
// as well as supply a pre-defined message list
|
||||||
|
//
|
||||||
|
if(options.extraArgs.messageAreaName) {
|
||||||
|
this.messageAreaName = options.extraArgs.messageAreaName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(options.extraArgs.messageList) {
|
||||||
|
this.messageList = options.extraArgs.messageList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.menuMethods = {
|
this.menuMethods = {
|
||||||
selectMessage : function(formData, extraArgs) {
|
selectMessage : function(formData, extraArgs) {
|
||||||
|
@ -85,9 +97,11 @@ require('util').inherits(MessageListModule, MenuModule);
|
||||||
MessageListModule.prototype.enter = function(client) {
|
MessageListModule.prototype.enter = function(client) {
|
||||||
MessageListModule.super_.prototype.enter.call(this, client);
|
MessageListModule.super_.prototype.enter.call(this, client);
|
||||||
|
|
||||||
if('private' === this.listType) {
|
//
|
||||||
this.messageAreaName = Message.WellKnownAreaNames.Private;
|
// Config can specify |messageAreaName| else it comes from
|
||||||
} else {
|
// the user's current area
|
||||||
|
//
|
||||||
|
if(!this.messageAreaName) {
|
||||||
this.messageAreaName = client.user.properties.message_area_name;
|
this.messageAreaName = client.user.properties.message_area_name;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -110,6 +124,12 @@ MessageListModule.prototype.mciReady = function(mciData, cb) {
|
||||||
vc.loadFromMenuConfig(loadOpts, callback);
|
vc.loadFromMenuConfig(loadOpts, callback);
|
||||||
},
|
},
|
||||||
function fetchMessagesInArea(callback) {
|
function fetchMessagesInArea(callback) {
|
||||||
|
//
|
||||||
|
// Config can supply messages else we'll need to populate the list now
|
||||||
|
//
|
||||||
|
if(_.isArray(self.messageList)) {
|
||||||
|
callback(0 === self.messageList.length ? new Error('No messages in area') : null);
|
||||||
|
} else {
|
||||||
messageArea.getMessageListForArea( { client : self.client }, self.messageAreaName, function msgs(err, msgList) {
|
messageArea.getMessageListForArea( { client : self.client }, self.messageAreaName, function msgs(err, msgList) {
|
||||||
if(msgList && 0 === msgList.length) {
|
if(msgList && 0 === msgList.length) {
|
||||||
callback(new Error('No messages in area'));
|
callback(new Error('No messages in area'));
|
||||||
|
@ -118,6 +138,7 @@ MessageListModule.prototype.mciReady = function(mciData, cb) {
|
||||||
callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
function getLastReadMesageId(callback) {
|
function getLastReadMesageId(callback) {
|
||||||
messageArea.getMessageAreaLastReadId(self.client.user.userId, self.messageAreaName, function lastRead(err, lastReadId) {
|
messageArea.getMessageAreaLastReadId(self.client.user.userId, self.messageAreaName, function lastRead(err, lastReadId) {
|
||||||
|
|
|
@ -46,6 +46,19 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loginGlobalNewScan: {
|
||||||
|
art: GNSPMPT
|
||||||
|
mci: {
|
||||||
|
TM1: {
|
||||||
|
argName: promptValue
|
||||||
|
items: [ "yes", "no" ]
|
||||||
|
focus: true
|
||||||
|
hotKeys: { Y: 0, N: 1 }
|
||||||
|
hotKeySubmit: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"menuCommand" : {
|
"menuCommand" : {
|
||||||
art: MNUPRMT
|
art: MNUPRMT
|
||||||
"mci" : {
|
"mci" : {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
/* jslint node: true */
|
/* jslint node: true */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -114,6 +116,10 @@ function main() {
|
||||||
|
|
||||||
process.exitCode = ExitCodes.SUCCESS;
|
process.exitCode = ExitCodes.SUCCESS;
|
||||||
|
|
||||||
|
if(true === argv.version) {
|
||||||
|
return console.info(require('./package.json').version);
|
||||||
|
}
|
||||||
|
|
||||||
if(0 === argv._.length ||
|
if(0 === argv._.length ||
|
||||||
'help' === argv._[0])
|
'help' === argv._[0])
|
||||||
{
|
{
|
||||||
|
|
13
package.json
13
package.json
|
@ -13,7 +13,7 @@
|
||||||
"telnet"
|
"telnet"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^1.5.0",
|
"async": "^1.5.1",
|
||||||
"binary": "0.3.x",
|
"binary": "0.3.x",
|
||||||
"buffers": "0.1.x",
|
"buffers": "0.1.x",
|
||||||
"bunyan": "1.5.x",
|
"bunyan": "1.5.x",
|
||||||
|
@ -21,15 +21,16 @@
|
||||||
"hjson": "1.7.x",
|
"hjson": "1.7.x",
|
||||||
"iconv-lite": "^0.4.13",
|
"iconv-lite": "^0.4.13",
|
||||||
"lodash": "^3.10.1",
|
"lodash": "^3.10.1",
|
||||||
|
"minimist": "1.2.x",
|
||||||
"mkdirp": "0.5.x",
|
"mkdirp": "0.5.x",
|
||||||
"moment": "^2.10.6",
|
"moment": "^2.11.0",
|
||||||
"node-uuid": "^1.4.7",
|
"node-uuid": "^1.4.7",
|
||||||
"ptyw.js": "^0.3.4",
|
"ptyw.js": "^0.3.7",
|
||||||
"sqlite3": "^3.1.1",
|
"sqlite3": "^3.1.1",
|
||||||
"ssh2": "^0.4.12",
|
"ssh2": "^0.4.13",
|
||||||
"string-format": "davidchambers/string-format#mini-language"
|
"string-format": "davidchambers/string-format#mini-language"
|
||||||
},
|
},
|
||||||
"engines" : {
|
"engines": {
|
||||||
"node" : ">=0.12.2"
|
"node": ">=0.12.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue