Add @markAllRead method for msg_list
This commit is contained in:
parent
73bc211b94
commit
dd7b234a1d
Binary file not shown.
|
@ -783,6 +783,10 @@
|
||||||
keys: [ "x", "shift + x" ]
|
keys: [ "x", "shift + x" ]
|
||||||
action: @method:fullExit
|
action: @method:fullExit
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
keys: [ "m", "shift + m" ]
|
||||||
|
action: @method:markAllRead
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
const MenuModule = require('./menu_module.js').MenuModule;
|
const MenuModule = require('./menu_module.js').MenuModule;
|
||||||
const ViewController = require('./view_controller.js').ViewController;
|
const ViewController = require('./view_controller.js').ViewController;
|
||||||
const messageArea = require('./message_area.js');
|
const messageArea = require('./message_area.js');
|
||||||
const stringFormat = require('./string_format.js');
|
|
||||||
const MessageAreaConfTempSwitcher = require('./mod_mixins.js').MessageAreaConfTempSwitcher;
|
const MessageAreaConfTempSwitcher = require('./mod_mixins.js').MessageAreaConfTempSwitcher;
|
||||||
const Errors = require('./enig_error.js').Errors;
|
const Errors = require('./enig_error.js').Errors;
|
||||||
const Message = require('./message.js');
|
const Message = require('./message.js');
|
||||||
|
@ -64,7 +63,7 @@ exports.getModule = class MessageListModule extends MessageAreaConfTempSwitcher(
|
||||||
|
|
||||||
const modOpts = {
|
const modOpts = {
|
||||||
extraArgs : {
|
extraArgs : {
|
||||||
messageAreaTag : this.getSelectedAreaTag(formData.value.message),// this.config.messageAreaTag,
|
messageAreaTag : this.getSelectedAreaTag(formData.value.message),
|
||||||
messageList : this.config.messageList,
|
messageList : this.config.messageList,
|
||||||
messageIndex : formData.value.message,
|
messageIndex : formData.value.message,
|
||||||
lastMessageNextExit : true,
|
lastMessageNextExit : true,
|
||||||
|
@ -135,6 +134,13 @@ exports.getModule = class MessageListModule extends MessageAreaConfTempSwitcher(
|
||||||
const msgListView = this.viewControllers.allViews.getView(MciViewIds.allViews.msgList);
|
const msgListView = this.viewControllers.allViews.getView(MciViewIds.allViews.msgList);
|
||||||
this.enableMessageListIndexUpdates(msgListView);
|
this.enableMessageListIndexUpdates(msgListView);
|
||||||
return cb(null);
|
return cb(null);
|
||||||
|
},
|
||||||
|
markAllRead : (formData, extraArgs, cb) => {
|
||||||
|
if(this.config.noUpdateLastReadId) {
|
||||||
|
return cb(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.markAllMessagesAsRead(cb);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -295,6 +301,48 @@ exports.getModule = class MessageListModule extends MessageAreaConfTempSwitcher(
|
||||||
msgListView.on('index update', idx => this.populateCustomLabelsForSelected(idx) );
|
msgListView.on('index update', idx => this.populateCustomLabelsForSelected(idx) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
markAllMessagesAsRead(cb) {
|
||||||
|
if(!this.config.messageList || this.config.messageList.length === 0) {
|
||||||
|
return cb(null); // nothing to do.
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generally we'll have a message list for a specific area,
|
||||||
|
// but this is not always the case. For a given area, we need
|
||||||
|
// to find the highest message ID in the list to set a
|
||||||
|
// last read pointer.
|
||||||
|
//
|
||||||
|
const areaHighestIds = {};
|
||||||
|
this.config.messageList.forEach(msg => {
|
||||||
|
const highestId = areaHighestIds[msg.areaTag];
|
||||||
|
if(highestId) {
|
||||||
|
if(msg.messageId > highestId) {
|
||||||
|
areaHighestIds[msg.areaTag] = msg.messageId;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
areaHighestIds[msg.areaTag] = msg.messageId;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
async.forEachOf(areaHighestIds, (highestId, areaTag, nextArea) => {
|
||||||
|
messageArea.updateMessageAreaLastReadId(
|
||||||
|
this.client.user.userId,
|
||||||
|
areaTag,
|
||||||
|
highestId,
|
||||||
|
err => {
|
||||||
|
if(err) {
|
||||||
|
this.client.log.warn( { error : err.message }, 'Failed marking area as read');
|
||||||
|
} else {
|
||||||
|
this.client.log.info( { highestId, areaTag }, 'User marked area as read');
|
||||||
|
}
|
||||||
|
return nextArea(null); // always continue
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, () => {
|
||||||
|
return cb(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
updateMessageNumbersAfterDelete(startIndex) {
|
updateMessageNumbersAfterDelete(startIndex) {
|
||||||
// all index -= 1 from this point on.
|
// all index -= 1 from this point on.
|
||||||
for(let i = startIndex; i < this.config.messageList.length; ++i) {
|
for(let i = startIndex; i < this.config.messageList.length; ++i) {
|
||||||
|
|
Loading…
Reference in New Issue