From 80c8bc820bb77e16cfdae1f4c8150931c42d2300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Tue, 30 Apr 2024 16:41:47 +0200 Subject: [PATCH] Do not double count AlilasMailboxes with Aliases (#2095) * Do not double count aliasmailboxes with aliases * Keep Sl-Queue-id --- app/models.py | 20 ++++++++++++++------ email_handler.py | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/models.py b/app/models.py index 25d77bf3..ea3defdf 100644 --- a/app/models.py +++ b/app/models.py @@ -2649,10 +2649,15 @@ class Mailbox(Base, ModelMixin): return False def nb_alias(self): - return ( - AliasMailbox.filter_by(mailbox_id=self.id).count() - + Alias.filter_by(mailbox_id=self.id).count() + alias_ids = set( + am.alias_id + for am in AliasMailbox.filter_by(mailbox_id=self.id).values( + AliasMailbox.alias_id + ) ) + for alias in Alias.filter_by(mailbox_id=self.id).values(Alias.id): + alias_ids.add(alias.id) + return len(alias_ids) def is_proton(self) -> bool: if ( @@ -2701,12 +2706,15 @@ class Mailbox(Base, ModelMixin): @property def aliases(self) -> [Alias]: - ret = Alias.filter_by(mailbox_id=self.id).all() + ret = dict( + (alias.id, alias) for alias in Alias.filter_by(mailbox_id=self.id).all() + ) for am in AliasMailbox.filter_by(mailbox_id=self.id): - ret.append(am.alias) + if am.alias_id not in ret: + ret[am.alias_id] = am.alias - return ret + return list(ret.values()) @classmethod def create(cls, **kw): diff --git a/email_handler.py b/email_handler.py index e77fcbb6..303db53a 100644 --- a/email_handler.py +++ b/email_handler.py @@ -1180,6 +1180,7 @@ def handle_reply(envelope, msg: Message, rcpt_to: str) -> (bool, str): # References and In-Reply-To are used for keeping the email thread headers.REFERENCES, headers.IN_REPLY_TO, + headers.SL_QUEUE_ID, ] + headers.MIME_HEADERS, )