diff options
author | Kali Kaneko <kali@leap.se> | 2016-04-26 21:35:21 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2016-04-26 21:35:21 -0400 |
commit | 63a3b1355a5c7cf031ddfa58736e83908c539cdb (patch) | |
tree | 4ee952b7d1d5a2f7b1bd2f622989ae913c19eb8d /src/pixelated/support/replier.py | |
parent | 0868bc168ee5286f1842bde41a4a984497e6885e (diff) | |
parent | 3b3731d873664db00c02603363f61d34c41a3990 (diff) |
Merge branch 'debian/experimental-pix' into debian/experimental
Diffstat (limited to 'src/pixelated/support/replier.py')
-rw-r--r-- | src/pixelated/support/replier.py | 35 |
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 |