diff --git a/makexpi.sh b/makexpi.sh new file mode 100755 index 0000000..2cb481b --- /dev/null +++ b/makexpi.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +NAME=thunderbird-thread-in-same-folder +VERSION=1.00 + +ZIPFILE=${NAME}-${VERSION}.xpi + +rm -f ${ZIPFILE} + +(cd src && zip -r - .) > ${ZIPFILE} diff --git a/src/background.js b/src/background.js new file mode 100644 index 0000000..0364875 --- /dev/null +++ b/src/background.js @@ -0,0 +1,41 @@ +'use strict' + +async function* iterateMessagePages(page) { + for (let message of page.messages) { + yield message; + } + + while (page.id) { + page = await messenger.messages.continueList(page.id); + for (let message of page.messages) { + yield message; + } + } +} + +async function load() { + await messenger.messages.onNewMailReceived.addListener(async (folder, messages) => { + for await (let message of iterateMessagePages(messages)) { + let full = await messenger.messages.getFull(message.id); + let inReplyTos = full["headers"]["in-reply-to"]; + if (inReplyTos.length > 0) { + let inReplyTo = inReplyTos[0] + if (inReplyTo.startsWith("<")) { + inReplyTo = inReplyTo.substring(1); + } + if (inReplyTo.endsWith(">")) { + inReplyTo = inReplyTo.substring(0, inReplyTo.length - 1) + } + let queryResult = await messenger.messages.query({"headerMessageId" : inReplyTo}) + if (queryResult.messages.length > 0) { + let parent = queryResult.messages[0] + if (parent['folder'] != message['folder']) { + messenger.messages.move([message.id], parent['folder']) + } + } + } + } + }) +} + +document.addEventListener("DOMContentLoaded", load); diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..f6c6c41 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "Thread in same folder", + "description": "Runs after junk classification and filtering to make sure a message lands in the same folder as its parent in a thread", + "version": "1.0", + "author": "Petros Koutsolampros", + "applications": { + "gecko": { + "id": "threadInSameFolder@pklampros.io", + "strict_min_version": "78.0" + } + }, + "background": { + "scripts": [ + "background.js" + ] + }, + "permissions": [ + "messagesRead", + "accountsRead", + "messagesMove" + ], + "manifest_version": 2 +}