aboutsummaryrefslogtreecommitdiff
path: root/ctec/logic.py
diff options
context:
space:
mode:
Diffstat (limited to 'ctec/logic.py')
-rw-r--r--ctec/logic.py49
1 files changed, 25 insertions, 24 deletions
diff --git a/ctec/logic.py b/ctec/logic.py
index d151a0f..d2767bc 100644
--- a/ctec/logic.py
+++ b/ctec/logic.py
@@ -9,19 +9,20 @@ mailbox.Maildir.colon = '!'
MESSAGE_DOWNLOAD_BATCH = 1
-def percent_encode(c: str) -> str:
- return '%' + hex(ord(c))[2:]
+def percent_encode(c: bytes) -> bytes:
+ return b'%' + c.hex().encode()
-def clean_folder_name(folder_name: str, separator: str) -> str:
- folder_name = folder_name.replace('%', percent_encode('%'))
- folder_name = folder_name.replace('.', percent_encode('.'))
- folder_name = folder_name.replace(separator, '.')
- return folder_name
+def clean_folder_name(folder_name: bytes, separator: bytes) -> str:
+ folder_name = folder_name.replace(b'%', percent_encode(b'%'))
+ folder_name = folder_name.replace(b'.', percent_encode(b'.'))
+ folder_name = folder_name.replace(separator, b'.')
+ return folder_name.decode()
-def dirty_folder_name(folder_name: str, separator: str = '/') -> str:
- folder_name = folder_name.replace('.', separator)
- folder_name = folder_name.replace(percent_encode('.'), '.')
- folder_name = folder_name.replace(percent_encode('%'), '%')
+def dirty_folder_name(folder_name_str: str, separator: bytes = b'/') -> bytes:
+ folder_name = folder_name_str.encode()
+ folder_name = folder_name.replace(b'.', separator)
+ folder_name = folder_name.replace(percent_encode(b'.'), b'.')
+ folder_name = folder_name.replace(percent_encode(b'%'), b'%')
return folder_name
class Account:
@@ -42,13 +43,13 @@ class Account:
typ, folder_list = self.connection.list()
for folder in folder_list:
folder_info = imap_response.List.parse(folder)
- if folder_info.delimiter != '/':
+ if folder_info.delimiter != b'/':
raise NotImplementedError(f'who the hell uses {repr(folder_info.delimiter)} as a delimiter')
self.mailbox.add_folder(clean_folder_name(folder_info.name, folder_info.delimiter))
def fetch_folder(self, folder_name: str):
folder = self.mailbox.add_folder(folder_name)
- message_id_to_key = dict((message['Message-ID'], key) for key, message in folder.iteritems() if 'Message-ID' in message)
+ message_id_to_key = dict((message['Message-ID'].encode(), key) for key, message in folder.iteritems() if 'Message-ID' in message)
typ, count_data = self.connection.select(dirty_folder_name(folder_name))
if typ != 'OK':
print(typ, count_data)
@@ -72,22 +73,22 @@ class Account:
if parsed_data.envelope is None:
print('hold the fuck up where did that envelope go', parsed_data)
else:
- message_id = parsed_data.envelope.get('message_id', None)
+ message_id = parsed_data.envelope.get(b'message_id', None)
if message_id is None:
print('no message ID for', parsed_data)
elif message_id in message_id_to_key:
message: mailbox.MaildirMessage = folder[message_id_to_key[message_id]]
flags_list = parsed_data.flags or []
flags = ''
- if r'\Seen' in flags_list:
+ if rb'\Seen' in flags_list:
flags += 'S'
- if r'\Answered' in flags_list:
+ if rb'\Answered' in flags_list:
flags += 'R' # Replied to
- if r'\Flagged' in flags_list:
+ if rb'\Flagged' in flags_list:
flags += 'F'
- if r'\Deleted' in flags_list:
+ if rb'\Deleted' in flags_list:
flags += 'T' # Trashed
- if r'\Draft' in flags_list:
+ if rb'\Draft' in flags_list:
flags += 'D'
message.set_flags(flags)
else:
@@ -119,15 +120,15 @@ class Account:
message = mailbox.MaildirMessage(parsed_data.body_all_sections)
flags_list = parsed_data.flags or []
flags = ''
- if r'\Seen' in flags_list:
+ if rb'\Seen' in flags_list:
flags += 'S'
- if r'\Answered' in flags_list:
+ if rb'\Answered' in flags_list:
flags += 'R' # Replied to
- if r'\Flagged' in flags_list:
+ if rb'\Flagged' in flags_list:
flags += 'F'
- if r'\Deleted' in flags_list:
+ if rb'\Deleted' in flags_list:
flags += 'T' # Trashed
- if r'\Draft' in flags_list:
+ if rb'\Draft' in flags_list:
flags += 'D'
message.set_flags(flags)
folder.add(message)