Compare commits

...

2 commits

Author SHA1 Message Date
ClaraCrazy
63b30a3705
Patch delete-all
Off to a work trip now, byeee
2025-12-15 05:22:57 +01:00
ClaraCrazy
b80db9fbd3
Improve mail deletion speed en masse 2025-12-15 04:51:54 +01:00
2 changed files with 33 additions and 19 deletions

View file

@ -47,16 +47,28 @@ class MailRepository {
removeUid(uid, address) {
if (!this.config.email.examples.uids.includes(parseInt(uid))) {
var deleted = false
// TODO: make this more efficient, looping through each email is not cool.
this.mailSummaries.forEachAssociation((mails, to) => {
mails
.filter(mail => mail.uid === parseInt(uid) && (address ? to == address : true))
.forEach(mail => {
this.mailSummaries.remove(to, mail)
debug('Removed ', mail.date, to, mail.subject)
deleted = true
})
})
if (address) {
// Efficient path: only search the specific address's emails
const mails = this.mailSummaries.get(address) || []
const mailToDelete = mails.find(mail => mail.uid === parseInt(uid))
if (mailToDelete) {
this.mailSummaries.remove(address, mailToDelete)
debug('Removed ', mailToDelete.date, address, mailToDelete.subject)
deleted = true
}
} else {
// Fallback: search all emails (needed when address is unknown)
this.mailSummaries.forEachAssociation((mails, to) => {
mails
.filter(mail => mail.uid === parseInt(uid))
.forEach(mail => {
this.mailSummaries.remove(to, mail)
debug('Removed ', mail.date, to, mail.subject)
deleted = true
})
})
}
return deleted
}
return false

View file

@ -69,15 +69,6 @@ router.get(
)
// Catch-all for invalid UIDs (non-numeric)
router.get(
'^/:address/:uid',
sanitizeAddress,
async(req, res) => {
req.session.errorMessage = 'Invalid/Malformed UID provided.'
res.redirect(`/error/${req.params.address}/400`)
}
)
router.get(
'^/:address/delete-all',
sanitizeAddress,
@ -97,6 +88,7 @@ router.get(
)
router.get(
'^/:address/:uid/delete',
sanitizeAddress,
@ -203,5 +195,15 @@ router.get(
}
)
// Final catch-all for invalid UIDs (non-numeric or unmatched patterns)
router.get(
'^/:address/:uid',
sanitizeAddress,
async(req, res) => {
req.session.errorMessage = 'Invalid/Malformed UID provided.'
res.redirect(`/error/${req.params.address}/400`)
}
)
module.exports = router