From d97754876a287c9d5569efe51e6573001d081853 Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Thu, 12 Dec 2019 20:41:42 +0000 Subject: [PATCH] Always reply with list of active reminders --- remindme.py | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/remindme.py b/remindme.py index f2ad48b..e11bcd5 100755 --- a/remindme.py +++ b/remindme.py @@ -27,6 +27,19 @@ def empty_reply(msg): return reply +def list_reminders(person, client): + persons_messages = client.fetch( + client.search(["FROM", person]), "RFC822" + ) + reminders = [] + for uid, reminder in persons_messages.items(): + reminder = email.message_from_bytes(reminder[b"RFC822"]) + reminders.append( + f"({uid}) {reminder['Subject']}: {reminder.get_payload().strip()}" + ) + return "\n".join(reminders) + + def ack_message(uid, message, client): msg = email.message_from_bytes(message[b"RFC822"]) if msg.is_multipart(): @@ -40,23 +53,22 @@ def ack_message(uid, message, client): reply.set_content(help_text) return reply, True - if payload.startswith("list"): - persons_messages = client.fetch( - client.search(["FROM", msg["From"]]), "RFC822" - ) - reminders = [] - for uid, reminder in persons_messages.items(): - reminder = email.message_from_bytes(reminder[b"RFC822"]) - reminders.append( - (reminder["Subject"], reminder.get_payload().strip()) - ) - reply = empty_reply(msg) - reply.set_content("\n".join( - [f"({i}) {r[0]}: {r[1]}" for i, r in enumerate(reminders)] - )) - return reply, True + reply = empty_reply(msg) + reply.set_content(list_reminders(msg["From"], client)) - if payload.startswith("repeat"): + if payload.startswith("list"): + reply["Subject"] = ( + f"List of active reminders (was: {reply['Subject']})" + ) + return reply, True + else: + msg.replace_header("Subject", f"Set reminder: {reply['Subject']}") + prefix = (f"Successfully set reminder: {payload}.\n\n" + "Your reminders are:") + reply.set_content(f"{prefix}\n{reply.get_content()}") + return reply, False + + if payload.startswith("repeat"): try: print(get_description(payload)) it = croniter(payload, datetime.now()) @@ -65,11 +77,6 @@ def ack_message(uid, message, client): print("Invalid Cron: ", e) return None, False - date = d_parse(payload) - print(date) - - return None, False - def main(): mhost = "mail.friedersdorff.com"