summaryrefslogtreecommitdiff
path: root/src/pixelated/support/replier.py
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2016-04-26 21:35:21 -0400
committerKali Kaneko <kali@leap.se>2016-04-26 21:35:21 -0400
commit63a3b1355a5c7cf031ddfa58736e83908c539cdb (patch)
tree4ee952b7d1d5a2f7b1bd2f622989ae913c19eb8d /src/pixelated/support/replier.py
parent0868bc168ee5286f1842bde41a4a984497e6885e (diff)
parent3b3731d873664db00c02603363f61d34c41a3990 (diff)
Merge branch 'debian/experimental-pix' into debian/experimental
Diffstat (limited to 'src/pixelated/support/replier.py')
-rw-r--r--src/pixelated/support/replier.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pixelated/support/replier.py b/src/pixelated/support/replier.py
new file mode 100644
index 00000000..83324eae
--- /dev/null
+++ b/src/pixelated/support/replier.py
@@ -0,0 +1,35 @@
+from email.utils import parseaddr
+
+
+def generate_recipients(sender, to, ccs, current_user):
+ result = {'single': None, 'all': {'to-field': [], 'cc-field': []}}
+
+ to.append(sender)
+ to = remove_duplicates(to)
+ ccs = remove_duplicates(ccs)
+
+ result['single'] = swap_recipient_if_needed(
+ sender, remove_address(to, current_user), current_user)
+ result['all'][
+ 'to-field'] = remove_address(to, current_user) if len(to) > 1 else to
+ result['all'][
+ 'cc-field'] = remove_address(ccs, current_user) if len(ccs) > 1 else ccs
+ return result
+
+
+def remove_duplicates(recipients):
+ return list(set(recipients))
+
+
+def remove_address(recipients, current_user):
+ return [recipient for recipient in recipients if not parsed_mail_matches(recipient, current_user)]
+
+
+def parsed_mail_matches(to_parse, expected):
+ return parseaddr(to_parse)[1] == expected
+
+
+def swap_recipient_if_needed(sender, recipients, current_user):
+ if len(recipients) == 1 and parsed_mail_matches(sender, current_user):
+ return recipients[0]
+ return sender