aboutsummaryrefslogtreecommitdiff
path: root/ctec/logic.py
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2021-04-30 18:52:36 -0600
committerMelody Horn <melody@boringcactus.com>2021-04-30 18:52:36 -0600
commitbbf01ada6b2f748618db820624bf768989a11924 (patch)
tree6223527748664f52128adf824055fe3f3d384c9f /ctec/logic.py
parent1cf5e68c25c0505194f23d4018e29767d3b519dd (diff)
downloadctec-bbf01ada6b2f748618db820624bf768989a11924.tar.gz
ctec-bbf01ada6b2f748618db820624bf768989a11924.zip
fetch folders
Diffstat (limited to 'ctec/logic.py')
-rw-r--r--ctec/logic.py25
1 files changed, 19 insertions, 6 deletions
diff --git a/ctec/logic.py b/ctec/logic.py
index 7afd78a..57b553c 100644
--- a/ctec/logic.py
+++ b/ctec/logic.py
@@ -3,13 +3,17 @@ import mailbox
import pathlib
import pprint
import re
+from typing import List, Union, Tuple
-from . import import_or_install
+from . import import_or_install, imap_response
mailbox.Maildir.colon = '!'
FLAGS = re.compile(rb'FLAGS \(([^)]+?)\)')
+def clean_folder_name(folder_name: str, separator: str) -> str:
+ return folder_name.replace('.', '-').replace(separator, '.').replace('/', '-')
+
class Account:
def __init__(self, address: str, info: dict):
appdirs = import_or_install('appdirs')
@@ -18,21 +22,27 @@ class Account:
self.mailbox = mailbox.Maildir(data_dir / address)
self.info = info
+ def fetch_folders(self):
+ with imaplib.IMAP4_SSL(self.info['imap host']) as M:
+ M.login(self.address, self.info['password'])
+ folder_list: List[bytes]
+ typ, folder_list = M.list()
+ for folder in folder_list:
+ folder_info = imap_response.List.parse(folder)
+ self.mailbox.add_folder(clean_folder_name(folder_info.name, folder_info.delimiter))
+
def fetch_inbox(self):
with imaplib.IMAP4_SSL(self.info['imap host']) as M:
M.login(self.address, self.info['password'])
- try:
- inbox = self.mailbox.get_folder('Inbox')
- except mailbox.NoSuchMailboxError:
- inbox = self.mailbox.add_folder('Inbox')
+ inbox = self.mailbox.add_folder('Inbox')
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(FLAGS RFC822)')
for prefix, message in data[:-1]:
flags = FLAGS.search(prefix).group(1).split()
- print(flags)
message = mailbox.MaildirMessage(message)
+ print(message['Subject'], flags)
if rb'\Seen' in flags:
message.add_flag('S')
message.set_subdir('cur')
@@ -45,5 +55,8 @@ class Account:
inbox.add(message)
M.close()
+ def folders(self) -> List[Tuple[str, mailbox.Maildir]]:
+ return [(folder, self.mailbox.get_folder(folder)) for folder in self.mailbox.list_folders()]
+
def inbox(self) -> mailbox.Maildir:
return self.mailbox.add_folder('Inbox')