#!@python@/bin/python import json import sys import subprocess from io import BytesIO from email.message import EmailMessage import configparser from os import environ from datetime import * from dateutil.tz import * from dateutil.parser import isoparse from html2text import html2text def main(): notmuchConfig = configparser.ConfigParser() notmuchConfig.read(environ.get('NOTMUCH_CONFIG')) callbackMessage = json.load(sys.stdin) msg = EmailMessage() authors = ', '.join(map(lambda author: author['name'], callbackMessage['feed_item']['authors'])) if authors: msg['From'] = f"{callbackMessage['feed_definition']['title']} ({authors}) " else: msg['From'] = f"{callbackMessage['feed_definition']['title']} " msg['To'] = f"{notmuchConfig['user']['name']} <{notmuchConfig['user']['primary_email']}>" msg['Subject'] = callbackMessage['feed_item']['title'] msg['Item-Identifier'] = f"{callbackMessage['feed_item']['identifier']}" for link in callbackMessage['feed_item']['links']: linkArgs={} if 'relation' in link: linkArgs['relation'] = link['relation'] if 'type' in link: linkArgs['type'] = link['type'] if 'title' in link and link['title']: linkArgs['title'] = link['title'] msg.add_header('Link', link['uri'], **linkArgs) date = None if 'date' in callbackMessage['feed_item']: date = isoparse(callbackMessage['feed_item']['date']) else: date = datetime.now(tzlocal()) msg['Date'] = date.strftime('%a, %e %b %Y %T %z') msg.set_content(html2text(callbackMessage['feed_item']['content'])) msg.add_alternative(callbackMessage['feed_item']['content'], subtype='html') subprocess.run( args=['notmuch', 'insert'], check=True, input=bytes(msg) ) if __name__ == '__main__': sys.exit(main())