Some more WTVMail stuff (untested)

This commit is contained in:
zefie
2022-01-21 11:40:52 -05:00
parent 3ee968f226
commit d479ba5f98

View File

@@ -18,6 +18,9 @@ class WTVMail {
is_guest = null; is_guest = null;
mailboxes = null; mailboxes = null;
static msgFileExt = ".zmsg";
static trashMailboxName = "Trash";
constructor(minisrv_config, ssid, wtvclient) { constructor(minisrv_config, ssid, wtvclient) {
if (!minisrv_config) throw ("minisrv_config required"); if (!minisrv_config) throw ("minisrv_config required");
var WTVShared = require('./WTVShared.js')['WTVShared']; var WTVShared = require('./WTVShared.js')['WTVShared'];
@@ -35,7 +38,7 @@ class WTVMail {
"Inbox", "Inbox",
"Sent", "Sent",
"Saved", "Saved",
"Trash" this.trashMailboxName
]; ];
} }
@@ -88,6 +91,18 @@ class WTVMail {
return (mailboxid < this.mailboxes.length - 1) ? this.mailboxes[mailboxid] : false; return (mailboxid < this.mailboxes.length - 1) ? this.mailboxes[mailboxid] : false;
} }
getMailboxByName(mailbox_name) {
var mailbox_id = false;
this.mailboxes.every(function (v, k) {
if (v.toLowerCase() == mailbox_name.toLowerCase()) {
mailbox_id = k;
return false;
}
return true;
});
return mailbox_id;
}
getMailboxStoreDir(mailboxid) { getMailboxStoreDir(mailboxid) {
if (this.mailboxExists(mailboxid)) { if (this.mailboxExists(mailboxid)) {
var mailbox_name = this.getMailboxById(mailboxid); var mailbox_name = this.getMailboxById(mailboxid);
@@ -118,7 +133,8 @@ class WTVMail {
if (!date) date = Math.floor(Date.now() / 1000); if (!date) date = Math.floor(Date.now() / 1000);
var mailbox_path = this.getMailboxStoreDir(mailboxid); var mailbox_path = this.getMailboxStoreDir(mailboxid);
var message_file = this.createMessageID() + ".zmsg"; var message_id = this.createMessageID();
var message_file = messageid + this.msgFileExt;
var message_file_out = mailbox_path + message_file; var message_file_out = mailbox_path + message_file;
var message_data = { var message_data = {
"from_addr": from_addr, "from_addr": from_addr,
@@ -134,7 +150,7 @@ class WTVMail {
} }
try { try {
if (this.fs.existsSync(message_file_out)) { if (this.fs.existsSync(message_file_out)) {
console.log(" * ERROR: Message with this UUID already exists (should never happen). Message lost."); console.log(" * ERROR: Message with this UUID (" + messageid + ") already exists (should never happen). Message lost.");
return false; return false;
} }
@@ -168,7 +184,7 @@ class WTVMail {
getMessage(mailboxid, messageid) { getMessage(mailboxid, messageid) {
if (this.createMailbox(mailboxid)) { if (this.createMailbox(mailboxid)) {
var mailbox_path = this.getMailboxStoreDir(mailboxid); var mailbox_path = this.getMailboxStoreDir(mailboxid);
var message_file = messageid + ".zmsg"; var message_file = messageid + this.msgFileExt;
var message_file_in = mailbox_path + this.path.sep + message_file; var message_file_in = mailbox_path + this.path.sep + message_file;
var message_data_raw = null; var message_data_raw = null;
@@ -225,7 +241,7 @@ class WTVMail {
else return a.time - b.time; else return a.time - b.time;
}) })
.map(function (v) { .map(function (v) {
if (v.name.substring((v.name.length - 5)) === ".zmsg") return v.name.substring(0, (v.name.length - 5)); if (v.name.substring((v.name.length - this.msgFileExt.length)) === this.msgFileExt) return v.name.substring(0, (v.name.length - 5));
}); });
if (files.length == 0) return false; // no messages if (files.length == 0) return false; // no messages
@@ -343,13 +359,16 @@ class WTVMail {
var mailboxid = false; var mailboxid = false;
if (this.checkMessageIdSanity(messageid)) { if (this.checkMessageIdSanity(messageid)) {
if (this.mailstoreExists()) { if (this.mailstoreExists()) {
this.fs.readdirSync(this.mailstore_dir).forEach(mailbox => { this.fs.readdirSync(this.mailstore_dir).every(mailbox => {
if (mailboxid) return; if (mailboxid) return false;
this.fs.readdirSync(this.mailstore_dir + self.path.sep + mailbox).forEach(file => { this.fs.readdirSync(this.mailstore_dir + self.path.sep + mailbox).every(file => {
if (!file.match(/.*\.zmsg/ig)) return; var regexSearch = ".*\." + this.msgFileExt;
if (mailboxid) return; var re = new RegExp(regexSearch, "ig");
if (!file.match(re)) return true;
if (file.indexOf(messageid) !== -1) mailboxid = mailbox; if (file.indexOf(messageid) !== -1) mailboxid = mailbox;
return false;
}); });
return true;
}); });
} }
} }
@@ -377,8 +396,8 @@ class WTVMail {
if (dest_mailbox_id > (mailboxes.length - 1) || dest_mailbox_id < 0) return false; if (dest_mailbox_id > (mailboxes.length - 1) || dest_mailbox_id < 0) return false;
var currentMailFile = getMailboxStoreDir(currentMailbox) + this.path.sep + messageid + ".zmsg"; var currentMailFile = getMailboxStoreDir(currentMailbox) + this.path.sep + messageid + this.msgFileExt;
var destMailFile = getMailboxStoreDir(dest_mailbox_id) + this.path.sep + messageid + ".zmsg"; var destMailFile = getMailboxStoreDir(dest_mailbox_id) + this.path.sep + messageid + this.msgFileExt;
// File exists // File exists
if (fs.existsSync(destMailFile)) return false; if (fs.existsSync(destMailFile)) return false;
@@ -386,6 +405,22 @@ class WTVMail {
return fs.rename(currentMailFile, destMailFile); return fs.rename(currentMailFile, destMailFile);
} }
deleteMessage(messageid) {
var currentMailbox = getMessageMailboxId(messageid);
var trashMailbox = getMailboxByName(this.trashMailboxName);
if (currentMailbox != trashMailbox) {
// if not in the trash, move it to trash
return moveMailMessage(messageid, trashMailbox);
} else {
// if its already in the trash, delete it forever
var currentMailFile = getMailboxStoreDir(trashMailbox) + this.path.sep + messageid + this.msgFileExt;
if (this.fs.fileExistsSync(currentMailFile))
return this.fs.unlink(currentMailFile);
else
return false;
}
}
setMessageReadStatus(messageid, read = true) { setMessageReadStatus(messageid, read = true) {
var message = this.getMessageByID(messageid); var message = this.getMessageByID(messageid);
if (!message) return false; if (!message) return false;