diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js index 5ca837df..23ba6761 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js @@ -21,6 +21,7 @@ if (!intro_seen && !request_headers.query.intro_seen) { if (!message) { mail_end_error("Invalid Message ID"); } else { + ssid_sessions[socket.ssid].mailstore.setMessageReadStatus(messageid); var notImplementedAlert = new clientShowAlert({ 'image': minisrv_config.config.service_logo, 'message': "This feature is not available.", diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js index 6b07775b..e7504c23 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js @@ -5,7 +5,6 @@ if (!intro_seen && !request_headers.query.intro_seen) { // user is trying to bypass the intro screen headers = "300 OK\nLocation: wtv-mail:/DiplomaMail"; } else { - var doClientError = function (msg) { var clientErrorMsg = new clientShowAlert({ 'image': minisrv_config.config.service_logo, diff --git a/zefie_wtvp_minisrv/WTVMail.js b/zefie_wtvp_minisrv/WTVMail.js index 76c4c376..86027b01 100644 --- a/zefie_wtvp_minisrv/WTVMail.js +++ b/zefie_wtvp_minisrv/WTVMail.js @@ -129,7 +129,8 @@ class WTVMail { "subject": subject, "body": msgbody, "known_sender": known_sender, - "signature": signature + "signature": signature, + "unread": true } try { if (this.fs.existsSync(message_file_out)) { @@ -176,6 +177,8 @@ class WTVMail { if (message_data_raw) { var message_data = JSON.parse(message_data_raw); + message_data.mailbox_path = mailbox_path; + message_data.message_file = message_file; if (message_data) { message_data.id = messageid; return message_data; @@ -186,6 +189,21 @@ class WTVMail { return false; } + updateMessage(message_data) { + // encode message into json + var message_out = new Object(); + Object.assign(message_out, message_data); + delete message_out.mailbox_path; + delete message_out.message_file; + var result = this.fs.writeFileSync(message_data.mailbox_path + this.path.sep + message_data.message_file, JSON.stringify(message_out)); + if (!result) return false; + + // rely on filesystem times for sorting as it is quicker then reading every file + var file_timestamp = new Date(message_data.date * 1000); + fs.utimesSync(message_file, Date.now(), file_timestamp); + if (!result) console.error(" WARNING: Setting timestamp on " + message_file + " failed, mail dates will be inaccurate."); + } + checkMessageIdSanity(messageid) { return /^[A-Za-z0-9\-]{36}$/.test(messageid); } @@ -339,6 +357,14 @@ class WTVMail { return null; } + setMessageReadStatus(messageid, read = true) { + var message = this.getMessageByID(messageid); + if (!message) return false; + + message.unread = !read; + this.updateMessage(message); + return true; + } } module.exports = WTVMail;