From bde1b2631db72601bce4b5bcd91b4f8f160efb67 Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Sun, 4 Oct 2020 16:13:28 -0400 Subject: [PATCH] Make reply-all consider recipients of email --- opwen_email_client/webapp/forms/email.py | 24 ++++++++++++++++-------- opwen_email_client/webapp/views.py | 3 ++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/opwen_email_client/webapp/forms/email.py b/opwen_email_client/webapp/forms/email.py index 8528b7d2..4f5cf546 100644 --- a/opwen_email_client/webapp/forms/email.py +++ b/opwen_email_client/webapp/forms/email.py @@ -86,7 +86,7 @@ def as_dict(self, email_store: EmailStore) -> dict: form['attachments'] = list(_attachments_as_dict(attachments)) return form - def _populate(self, email_store: EmailStore): + def _populate(self, user, email_store: EmailStore): pass @classmethod @@ -124,13 +124,13 @@ def _can_access(cls, user, email: dict) -> bool: return user.email in actors @classmethod - def from_request(cls, email_store: EmailStore): + def from_request(cls, user, email_store: EmailStore): action_name = request.args.get('action') form = cls._new_instance_for(action_name) if not form: return None - form._populate(email_store) + form._populate(user, email_store) return form @@ -139,7 +139,7 @@ class ToEmailForm(NewEmailForm): action_name = 'to' # noinspection PyUnusedLocal - def _populate(self, email_store: EmailStore): + def _populate(self, user, email_store: EmailStore): if not self.to.data: self.to.data = request.args.get('to', '') @@ -147,7 +147,7 @@ def _populate(self, email_store: EmailStore): class ReplyEmailForm(NewEmailForm): action_name = 'reply' - def _populate(self, email_store: EmailStore): + def _populate(self, user, email_store: EmailStore): email = self._get_reference_email(email_store) if not email: return @@ -165,13 +165,21 @@ def _populate(self, email_store: EmailStore): class ReplyAllEmailForm(NewEmailForm): action_name = 'reply_all' - def _populate(self, email_store: EmailStore): + def _populate(self, user, email_store: EmailStore): email = self._get_reference_email(email_store) if not email: return if not self.to.data: - self.to.data = _join_emails(email.get('from'), *email.get('cc', [])) + self.to.data = _join_emails(email.get('from')) + + if not self.cc.data: + self.cc.data = _join_emails(*[ + email_address for email_address in chain( + email.get('to', []), + email.get('cc', []), + ) if email_address != user.email + ]) if not self.subject.data: self.subject.data = 'Re: {}'.format(email.get('subject', '')) @@ -183,7 +191,7 @@ def _populate(self, email_store: EmailStore): class ForwardEmailForm(NewEmailForm): action_name = 'forward' - def _populate(self, email_store: EmailStore): + def _populate(self, user, email_store: EmailStore): email = self._get_reference_email(email_store) if not email: return diff --git a/opwen_email_client/webapp/views.py b/opwen_email_client/webapp/views.py index c1de0885..d020362e 100644 --- a/opwen_email_client/webapp/views.py +++ b/opwen_email_client/webapp/views.py @@ -149,8 +149,9 @@ def email_delete(email_uid: str) -> Response: @track_history def email_new() -> Response: email_store = app.ioc.email_store + user = current_user - form = NewEmailForm.from_request(email_store) + form = NewEmailForm.from_request(user, email_store) if form is None: return abort(404)