aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/notmuch/.local/bin
diff options
context:
space:
mode:
Diffstat (limited to 'notmuch/.local/bin')
-rwxr-xr-xnotmuch/.local/bin/notmuch-notify64
1 files changed, 64 insertions, 0 deletions
diff --git a/notmuch/.local/bin/notmuch-notify b/notmuch/.local/bin/notmuch-notify
new file mode 100755
index 0000000..18c6c83
--- /dev/null
+++ b/notmuch/.local/bin/notmuch-notify
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+import os
+
+import notmuch
+from jeepney import DBusAddress, new_method_call
+from jeepney.io.blocking import open_dbus_connection
+
+
+DBUS_ADDRESS = DBusAddress(
+ "/org/freedesktop/Notifications",
+ bus_name="org.freedesktop.Notifications",
+ interface="org.freedesktop.Notifications",
+)
+
+
+def default_config() -> str:
+ return os.path.join(
+ os.environ.get(
+ "XDG_CONFIG_HOME", os.path.join(os.path.expanduser("~"), ".config")
+ ),
+ "notmuch",
+ os.environ.get("NOTMUCH_PROFILE", "default"),
+ "config",
+ )
+
+
+def notify(summary: str, body: str) -> int | None:
+ msg = new_method_call(
+ DBUS_ADDRESS,
+ "Notify",
+ "susssasa{sv}i",
+ (
+ "notmuch-notify",
+ 0,
+ "mail-unread",
+ summary,
+ body,
+ [],
+ {},
+ -1,
+ ),
+ )
+
+ id = open_dbus_connection(bus="SESSION").send_and_get_reply(msg)
+ if isinstance(id, int):
+ return id
+
+
+def main():
+ if os.environ.get("NOTMUCH_CONFIG") is None:
+ os.environ["NOTMUCH_CONFIG"] = default_config()
+
+ database = notmuch.Database(mode=notmuch.Database.MODE.READ_WRITE)
+
+ for message in database.create_query("tag:notify").search_messages():
+ notify(message.get_header("From"), message.get_header("Subject"))
+ print(message)
+ message.remove_tag("notify")
+ del message
+
+
+if __name__ == "__main__":
+ main()