Change to use list_tagged when offering message pages for users

This commit is contained in:
Deon George 2022-05-12 22:27:06 +10:00
parent 2ba3fbf231
commit 0bf0e223b5
5 changed files with 48 additions and 44 deletions

View File

@ -239,25 +239,27 @@ PageFrame.prototype.loadMessage = function(page) {
var newmsgs = area.newMsgsToMe();
log(LOG_DEBUG,'User has: '+newmsgs.length+' msgs to read to ME');
if (newmsgs.length) {
var next = newmsgs.shift();
var next = newmsgs[0];
log(LOG_DEBUG,'NEXT is: '+next.tag+' , this is: '+msg.tag);
if (next.tag === msg.tag)
//log(LOG_DEBUG,'- NEXT is: '+next.tags+', this is: '+msg.tags);
if (next.tags === msg.tags) {
log(LOG_DEBUG,'- Updating scan_ptr to: '+next.number);
stats.scan_ptr = next.number;
}
}
// if this message is the next message, update last_read
var newmsgs = area.newMsgs();
log(LOG_DEBUG,'User has: '+newmsgs.length+' msgs to read');
if (newmsgs.length) {
var next = newmsgs.shift();
var next = newmsgs[0];
log(LOG_DEBUG,'NEXT is: '+next.tag+' , this is: '+msg.tag);
if (next.tag === msg.tag)
//log(LOG_DEBUG,'- NEXT is: '+next.tags+', this is: '+msg.tags);
if (next.tags === msg.tags) {
log(LOG_DEBUG,'- Updating last_read to: '+next.number);
stats.last_read = next.number;
}
}
log(LOG_DEBUG,'Built frame: ['+this.frame+']['+this.index+'] ('+this.page+')');
}

View File

@ -134,16 +134,16 @@ function atcode(field,length,pad,context) {
break;
// Oldest message in msgarea
// Our oldest message, is the first message with a tag from the headers
case 'msg_area_msgoldest_date':
if (typeof context !== 'object') {
log(LOG_ERROR,'Unable to render ['+field+'], no context provided');
break;
}
// @todo Cant use context.msgbase.first_msg - it is always zero?
var x = Object.keys(context.headers)[0];
var x = context.list_tagged[0];
result = x ? context.headers[x].date : '';
result = x ? x.date : '';
break;
case 'msg_area_msgoldest_page':
@ -152,19 +152,21 @@ function atcode(field,length,pad,context) {
break;
}
// @todo Cant use context.msgbase.first_msg - it is always zero?
var x = Object.keys(context.headers)[0];
var x = context.list_tagged[0];
return x ? context.getMessagePage(context.headers[x].number) : null;
return x ? context.getMessagePage(x.number) : null;
// Newest message in msgarea
// Our newest message, is the last message with a tag from the headers
case 'msg_area_msgnewest_date':
if (typeof context !== 'object') {
log(LOG_ERROR,'Unable to render ['+field+'], no context provided');
break;
}
result = context.headers[context.msgbase.last_msg] ? context.headers[context.msgbase.last_msg].date : '';
var x = context.list_tagged[context.list_tagged.length-1];
result = x ? x.date : '';
break;
case 'msg_area_msgnewest_page':
@ -173,7 +175,9 @@ function atcode(field,length,pad,context) {
break;
}
return context.msgbase.last_msg ? context.getMessagePage(context.headers[context.msgbase.last_msg].number) : null;
var x = context.list_tagged[context.list_tagged.length-1];
return x ? context.getMessagePage(x.number) : null;
// First unread message
case 'msg_area_msgunread_date':

View File

@ -54,6 +54,9 @@ function MsgArea() {
this.grp_number = undefined;
this.subnum = undefined;
/**
* Build a MsgArea once we are given the code
*/
Object.defineProperty(this,'code',{
set: function(code) {
this.msgbase = new MsgBase(code);
@ -64,6 +67,8 @@ function MsgArea() {
}
this.headers = this.msgbase.get_all_msg_headers(false,false) || [];
// @todo If there are more than 10,000, take only the last 10,000.
this.msgbase.close();
}
});
@ -75,13 +80,6 @@ function MsgArea() {
}
});
// Total Messages
Object.defineProperty(this,'list',{
get: function() {
return this.headers ? Object.keys(this.headers) : [];
}
});
// Total tagged messages
Object.defineProperty(this,'list_tagged',{
get: function() {
@ -167,14 +165,14 @@ function MsgArea() {
MsgArea.prototype.newMsgs = function() {
var msgs = [];
var stats = this.getUserStats();
//log(LOG_DEBUG,'Users scan pointer: '+JSON.stringify(stats.scan_ptr));
//log(LOG_DEBUG,'Users last_read pointer: '+JSON.stringify(stats.last_read));
for(var x in this.headers) {
for(var x in this.list_tagged) {
// Advance past our last scan_ptr
if (x <= stats.last_read)
if (this.list_tagged[x].number <= stats.last_read)
continue;
msgs.push(this.headers[x]);
msgs.push(this.list_tagged[x]);
write(); // @todo This is needed for this to work?
}
@ -188,15 +186,15 @@ MsgArea.prototype.newMsgs = function() {
MsgArea.prototype.newMsgsToMe = function() {
var msgs = [];
var stats = this.getUserStats();
//log(LOG_DEBUG,'Users scan pointer: '+JSON.stringify(stats.scan_ptr));
//log(LOG_DEBUG,'Users scan_ptr pointer: '+JSON.stringify(stats.scan_ptr));
for(var x in this.headers) {
for(var x in this.list_tagged) {
// Advance past our last scan_ptr
if (x <= stats.scan_ptr)
if (this.list_tagged[x].number <= stats.scan_ptr)
continue;
if ((this.headers[x].to === user.name) || (this.headers[x].to === user.alias))
msgs.push(this.headers[x]);
if ((this.list_tagged[x].to === user.name) || (this.list_tagged[x].to === user.alias))
msgs.push(this.list_tagged[x]);
write(); // @todo This is needed for this to work?
}
@ -210,9 +208,9 @@ MsgArea.prototype.newMsgsToMe = function() {
MsgArea.prototype.getMessage = function(page) {
var msg = undefined;
for(var x in this.headers) {
if (this.headers[x].tags === page) {
msg = this.headers[x];
for(var x in this.list_tagged) {
if (this.list_tagged[x].tags === page) {
msg = this.list_tagged[x];
break;
}
write(); // @todo This is needed for this to work?
@ -246,9 +244,10 @@ MsgArea.prototype.getMessagePage = function(number) {
var r;
for (var x in this.headers) {
if (this.headers[x].number === number) {
r = this.headers[x];
for (var x in this.list_tagged) {
if (this.list_tagged[x].number === number) {
r = this.list_tagged[x];
break;
}
}

View File

@ -432,7 +432,7 @@ while(bbs.online) {
}
}
if ((viewdata && read === '_') || (! viewdata && read === '#') || read === "\r") {
if ((viewdata && read === '_') || (! viewdata && read === '#') || ((read === "\r") && (cmd.length > 0))) {
// Nothing typed between * and #
// *# means go back
if (cmd === '') {
@ -947,11 +947,10 @@ while(bbs.online) {
// Parent
fo.key[0] = (''+next_page.frame).substr(0,7);
// First Unread
fo.key[1] = atcode('msg_area_msgunread_page',null,null,area);
// First to me
fo.key[2] = atcode('msg_area_msgtome_page',null,null,area);
fo.key[1] = atcode('msg_area_msgtome_page',null,null,area);
// First Unread
fo.key[2] = atcode('msg_area_msgunread_page',null,null,area);
// Oldest
fo.key[3] = atcode('msg_area_msgoldest_page',null,null,area);

View File

@ -1 +1 @@
{"version":1,"frame":198,"index":"a","owner":1,"cost":0,"content":"G1swbRtbNzZDG1sxbS4bWzBtDQogG1szM20bWG1zZ19ncnBfbmFtZTs0MBtcG1szMEMbWzM3bRtbMW3awr/Cv7+zG1swbQ0KIBtbMzZtG1htc2dfYXJlYV9hcmVhdGFnOzQwG1wbWzMwQxtbMzdtsyCzwrSzsw0KIBtbMTszNm0bWG1zZ19hcmVhX2Rlc2M7NDAbXBtbMzBDG1sxOzM3bVN1bW1hcnkbWzBtDQobWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSzxMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NCiAbWERBVEVUSU1FOzI0G1wbWzI1QxtbMTszMG2zG1swbSAbWzFtTmV3IE1lc3NhZ2VzIHRvIFlvdRtbMG06IBtbMTszMW0bWG1zZ19hcmVhX25ld3RvbWU7LTUbXBtbMG0NChtbNTBDG1sxOzMwbbMbWzBtICAgICAbWzFtVW5yZWFkIE1lc3NhZ2VzG1swbTogG1sxOzMxbRtYbXNnX2FyZWFfbmV3Oy01G1wbWzBtDQogG1sxOzMybTEbWzM3bSBGaXJzdCB1bnJlYWQgICAbWzM0bRtYbXNnX2FyZWFfbXNndW5yZWFkX2RhdGU7MzEbXBtbMG0gG1sxOzMwbbMbWzBtICAgICAgG1sxbVRvdGFsIE1lc3NhZ2VzG1swbTogG1sxOzMxbRtYbXNnX2FyZWFfdG90YWw7LTUbXBtbMG0NCiAbWzE7MzJtMhtbMG0gG1sxbUZpcnN0IHRvIHlvdRtbMG0gICAbWzE7MzRtG1htc2dfYXJlYV9tc2dvdG9tZV9kYXRlOzMxG1wbWzBtIBtbMTszMG2zG1swbQ0KG1s1MEMbWzE7MzBtsxtbMG0gICAgUGVuZGluZyBNZXNzYWdlczogG1szMW0bWG1zZ19hcmVhX3BlbmRpbmc7LTUbXBtbMzdtDQogG1sxOzMybTMgG1szN21PbGRlc3QgTWVzc2FnZSAbWzM0bRtYbXNnX2FyZWFfbXNnb2xkZXN0X2RhdGU7MzEbXBtbMzdtIBtbMTszMG2zG1swbQ0KIBtbMTszMm00IBtbMzdtTGF0ZXN0IE1lc3NhZ2UgG1szNG0bWG1zZ19hcmVhX21zZ25ld2VzdF9kYXRlOzMxG1wbWzM3bSAbWzE7MzBtsxtbMG0gICAgICAgICAgG1szMm05G1swbSBOZXcgU2NhbjogICAbWzE7MzJtG1htc2dfYXJlYV9uZXdzY2FuOy0zG1wbWzBtDQobWzUwQxtbMTszMG3BG1swbQ0KIBtbMzJtNRtbMW0gG1swbVdyaXRlIE5ldyBNZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG3Vzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc24G1swbQ0KIBtbMzJtNhtbMW0gG1swbVNlYXJjaCBmb3IgTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG2zG1szM20gryBNZXNzYWdlIFJlYWRpbmcgTmF2aWdhdGlvbiCuG1swOzMzOzQ0bSAbWzE7MzdtsxtbMG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG2zG1szM20gG1szMm0YG1szNm0gU2Nyb2xsIFVQIBtbMDs0NG0gIBtbMW2zG1swOzQ0bSAbWzE7MzJtGRtbMzZtIFNjcm9sbCBET1dOG1swOzQ0bSAbWzE7MzNtIBtbMzdtsxtbMG0NCiAbWzMybTgbWzM3bSBBcmVhIFN1bW1hcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7NDRtsxtbMzNtIBtbMDszMjs0NG00G1sxOzM2bSAbWzA7MzY7NDRtUHJldmlvdXMbWzFtICAbWzA7NDRtICAbWzFtsxtbMDs0NG0gG1szMm0zG1sxOzM2bSAbWzA7MzY7NDRtUHJldiBUaHJlYWQbWzM3bSAbWzE7MzNtIBtbMzdtsxtbMG0NCiAbWzE7MzJtMBtbMDszMm0gG1sxOzM3bUJhY2sbWzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7NDRtsxtbMzNtIBtbMDszMjs0NG02G1sxOzM2bSAbWzA7MzY7NDRtTmV4dBtbMW0gG1swOzQ0bSAgICAgICAbWzFtsxtbMDs0NG0gG1szMm03G1szN20gG1szNm1OZXh0IFRocmVhZBtbMzdtIBtbMTszM20gG1szN22zG1swbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bbMbWzA7NDRtIBtbMzJtNRtbMzdtIBtbMzZtV3JpdGUgTmV3G1szN20gICAbWzFtsxtbMDs0NG0gG1szMm04G1szN20gG1szNm1SZXBseRtbMzdtICAgICAgIBtbMTszM20gG1szN22zG1swbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bbMbWzA7NDRtIBtbMzJtIxtbMzdtIBtbMzZtTXNnIEF0dHJzICAbWzM3bSAbWzFtsxtbMDs0NG0gG1szMm0wG1szN20gG1szNm1SZXR1cm4gaGVyZRtbMzdtIBtbMTszM20gG1szN22zG1swbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bdTNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzb4bWzBtDQo=","isPublic":0,"isAccessible":1,"type":"m","key":[null,null,null,null,null,null,null,null,null,null],"date":"2022-04-29T00:00:00.000Z"}
{"version":1,"frame":198,"index":"a","owner":1,"cost":0,"content":"G1swbRtbNzZDG1sxbS4bWzBtDQogG1szM20bWG1zZ19ncnBfbmFtZTs0MBtcG1szMEMbWzM3bRtbMW3awr/Cv7+zG1swbQ0KIBtbMzZtG1htc2dfYXJlYV9hcmVhdGFnOzQwG1wbWzMwQxtbMzdtsyCzwrSzsw0KIBtbMTszNm0bWG1zZ19hcmVhX2Rlc2M7NDAbXBtbMzBDG1sxOzM3bVN1bW1hcnkbWzBtDQobWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSzxMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NCiAbWERBVEVUSU1FOzI0G1wbWzI1QxtbMTszMG2zG1swbSAbWzFtTmV3IE1lc3NhZ2VzIHRvIFlvdRtbMG06IBtbMTszMW0bWG1zZ19hcmVhX25ld3RvbWU7LTUbXBtbMG0NChtbNTBDG1sxOzMwbbMbWzBtICAgICAbWzFtVW5yZWFkIE1lc3NhZ2VzG1swbTogG1sxOzMxbRtYbXNnX2FyZWFfbmV3Oy01G1wbWzBtDQogG1sxOzMybTEbWzM3bSBGaXJzdCB0byB5b3UgICAbWzM0bRtYbXNnX2FyZWFfbXNnb3RvbWVfZGF0ZTszMRtcG1swbSAbWzE7MzBtsxtbMG0gICAgICAbWzFtVG90YWwgTWVzc2FnZXMbWzBtOiAbWzE7MzFtG1htc2dfYXJlYV90b3RhbDstNRtcG1swbQ0KIBtbMTszMm0yG1swbSAbWzFtRmlyc3QgdW5yZWFkICAgG1sxOzM0bRtYbXNnX2FyZWFfbXNndW5yZWFkX2RhdGU7MzEbXBtbMG0gG1sxOzMwbbMbWzBtDQobWzUwQxtbMTszMG2zG1swbSAgICBQZW5kaW5nIE1lc3NhZ2VzOiAbWzMxbRtYbXNnX2FyZWFfcGVuZGluZzstNRtcG1szN20NCiAbWzE7MzJtMyAbWzM3bU9sZGVzdCBNZXNzYWdlIBtbMzRtG1htc2dfYXJlYV9tc2dvbGRlc3RfZGF0ZTszMRtcG1szN20gG1sxOzMwbbMbWzBtDQogG1sxOzMybTQgG1szN21MYXRlc3QgTWVzc2FnZSAbWzM0bRtYbXNnX2FyZWFfbXNnbmV3ZXN0X2RhdGU7MzEbXBtbMzdtIBtbMTszMG2zG1swbSAgICAgICAgICAbWzMybTkbWzBtIE5ldyBTY2FuOiAgIBtbMTszMm0bWG1zZ19hcmVhX25ld3NjYW47LTMbXBtbMG0NChtbNTBDG1sxOzMwbcEbWzBtDQogG1szMm01G1sxbSAbWzBtV3JpdGUgTmV3IE1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bdXNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbgbWzBtDQogG1szMm02G1sxbSAbWzBtU2VhcmNoIGZvciBNZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bbMbWzMzbSCvIE1lc3NhZ2UgUmVhZGluZyBOYXZpZ2F0aW9uIK4bWzA7MzM7NDRtIBtbMTszN22zG1swbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bbMbWzMzbSAbWzMybRgbWzM2bSBTY3JvbGwgVVAgG1swOzQ0bSAgG1sxbbMbWzA7NDRtIBtbMTszMm0ZG1szNm0gU2Nyb2xsIERPV04bWzA7NDRtIBtbMTszM20gG1szN22zG1swbQ0KIBtbMzJtOBtbMzdtIEFyZWEgU3VtbWFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG2zG1szM20gG1swOzMyOzQ0bTQbWzE7MzZtIBtbMDszNjs0NG1QcmV2aW91cxtbMW0gIBtbMDs0NG0gIBtbMW2zG1swOzQ0bSAbWzMybTMbWzE7MzZtIBtbMDszNjs0NG1QcmV2IFRocmVhZBtbMzdtIBtbMTszM20gG1szN22zG1swbQ0KIBtbMTszMm0wG1swOzMybSAbWzE7MzdtQXJlYSBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzQ0bbMbWzMzbSAbWzA7MzI7NDRtNhtbMTszNm0gG1swOzM2OzQ0bU5leHQbWzFtIBtbMDs0NG0gICAgICAgG1sxbbMbWzA7NDRtIBtbMzJtNxtbMzdtIBtbMzZtTmV4dCBUaHJlYWQbWzM3bSAbWzE7MzNtIBtbMzdtsxtbMG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG2zG1swOzQ0bSAbWzMybTUbWzM3bSAbWzM2bVdyaXRlIE5ldxtbMzdtICAgG1sxbbMbWzA7NDRtIBtbMzJtOBtbMzdtIBtbMzZtUmVwbHkbWzM3bSAgICAgICAbWzE7MzNtIBtbMzdtsxtbMG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTs0NG2zG1swOzQ0bSAbWzMybSMbWzM3bSAbWzM2bU1zZyBBdHRycyAgG1szN20gG1sxbbMbWzA7NDRtIBtbMTszMm0wG1szN20gG1sxOzM2bVJldHVybiBoZXJlG1szN20gG1sxOzMzbSAbWzM3bbMbWzBtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7NDRt1M3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvhtbMG0NCg==","isPublic":0,"isAccessible":1,"type":"m","key":[null,null,null,null,null,null,null,null,null,null],"date":"2022-04-29T00:00:00.000Z"}