* WIP on message last read - not fully functional yet

This commit is contained in:
Bryan Ashby 2015-10-22 15:44:44 -06:00
parent 4988559569
commit 4a386d649e
5 changed files with 70 additions and 9 deletions

View file

@ -148,6 +148,15 @@ function createMessageBaseTables() {
');'
);
dbs.message.run(
'CREATE TABLE IF NOT EXISTS user_message_area_last_read (' +
' user_id INTEGER NOT NULL,' +
' area_name VARCHAR NOT NULL,' +
' message_id INTEGER NOT NULL,' +
' UNIQUE(user_id, area_name)' +
');'
);
dbs.message.run(
'CREATE TABLE IF NOT EXISTS user_message_status (' +
' user_id INTEGER NOT NULL,' +

View file

@ -1,13 +1,14 @@
/* jslint node: true */
'use strict';
var MenuModule = require('../core/menu_module.js').MenuModule;
var ViewController = require('../core/view_controller.js').ViewController;
var ansi = require('../core/ansi_term.js');
var theme = require('../core/theme.js');
var MultiLineEditTextView = require('../core/multi_line_edit_text_view.js').MultiLineEditTextView;
var Message = require('../core/message.js');
var getMessageAreaByName = require('../core/message_area.js').getMessageAreaByName;
var MenuModule = require('../core/menu_module.js').MenuModule;
var ViewController = require('../core/view_controller.js').ViewController;
var ansi = require('../core/ansi_term.js');
var theme = require('../core/theme.js');
var MultiLineEditTextView = require('../core/multi_line_edit_text_view.js').MultiLineEditTextView;
var Message = require('../core/message.js');
var getMessageAreaByName = require('../core/message_area.js').getMessageAreaByName;
var updateMessageAreaLastReadId = require('../core/message_area.js').updateMessageAreaLastReadId;
var async = require('async');
var assert = require('assert');
@ -209,6 +210,10 @@ function FullScreenEditorModule(options) {
this.setMessage = function(message) {
self.message = message;
if(!self.message.isPrivate()) {
updateMessageAreaLastReadId(self.client.user.userId, self.messageAreaName, self.message.messageId);
}
if(self.isReady) {
self.initHeaderViewMode();
self.initFooterViewMode();
@ -864,6 +869,8 @@ require('util').inherits(FullScreenEditorModule, MenuModule);
FullScreenEditorModule.prototype.enter = function(client) {
FullScreenEditorModule.super_.prototype.enter.call(this, client);
};
FullScreenEditorModule.prototype.mciReady = function(mciData, cb) {

View file

@ -54,6 +54,10 @@ function Message(options) {
return true;
};
this.isPrivate = function() {
return this.areaName === Message.WellKnownAreaNames.Private ? true : false;
};
this.getMessageTimestampString = function(ts) {
ts = ts || new Date();
return ts.toISOString();

View file

@ -15,6 +15,8 @@ exports.getMessageAreaByName = getMessageAreaByName;
exports.changeMessageArea = changeMessageArea;
exports.getMessageListForArea = getMessageListForArea;
exports.gotoMsgAreaFSEModuleForMessage = gotoMsgAreaFSEModuleForMessage;
exports.getMessageAreaLastReadId = getMessageAreaLastReadId;
exports.updateMessageAreaLastReadId = updateMessageAreaLastReadId;
function getAvailableMessageAreas(options) {
// example: [ { "name" : "local_music", "desc" : "Music Discussion", "groups" : ["somegroup"] }, ... ]
@ -183,3 +185,36 @@ function gotoMsgAreaFSEModuleForMessage(options, cb) {
}
});
}
function getMessageAreaLastReadId(userId, areaName, cb) {
msgDb.get(
'SELECT message_id ' +
'FROM user_message_area_last_read ' +
'WHERE user_id = ? AND area_name = ?;',
[ userId, areaName ],
cb // (err, lastId)
);
}
function updateMessageAreaLastReadId(userId, areaName, messageId) {
// :TODO: likely a better way to do this...
async.waterfall(
[
function getCurrent(callback) {
getMessageAreaLastReadId(userId, areaName, function result(err, lastId) {
lastId = lastId || 0;
callback(null, lastId); // ignore errors as we default to 0
});
},
function update(lastId, callback) {
if(messageId > lastId) {
msgDb.run(
'REPLACE INTO user_message_area_last_read (user_id, area_name, message_id) ' +
'VALUES (?, ?, ?);',
[ userId, areaName, messageId ]
);
}
}
]
);
}