diff options
Diffstat (limited to 'ctec/logic.py')
-rw-r--r-- | ctec/logic.py | 49 |
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) |