62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
from subprocess import Popen, PIPE
|
|
import sys
|
|
|
|
# Command line arguments are a list of maildirs.
|
|
# The output is a list of items in the form '((P1 A1) (P2 A2))' where P is the node path for a maildir
|
|
# node, and A is the mail count annotation text
|
|
# Exmaple: '(((treemacs-mu4e "/web/") " (176)")((treemacs-mu4e "/web/" "/web/Inbox") " (161)"))'
|
|
|
|
UNREAD_CMD = "mu find maildir:'{}' --fields 'i' flag:'unread' 2> /dev/null | wc -l"
|
|
PATH_PREFIX = "treemacs-mu4e"
|
|
LOCAL_PREFIX = "/" + sys.argv[1]
|
|
|
|
def main():
|
|
maildirs = sys.argv[2:]
|
|
|
|
output = ["("]
|
|
for maildir in maildirs:
|
|
|
|
mu_dir = maildir
|
|
is_local = False
|
|
is_leaf = not maildir.endswith("/")
|
|
# "Local Folders" is an artificial maildir that is used to group
|
|
# otherwise free standing folders under a single header like
|
|
# in thunderbird
|
|
if mu_dir.startswith(LOCAL_PREFIX):
|
|
is_local = True
|
|
mu_dir = mu_dir.replace(LOCAL_PREFIX, "")
|
|
if mu_dir == "/":
|
|
continue
|
|
|
|
unread = Popen(UNREAD_CMD.format(mu_dir.replace(" ", "\ ")),
|
|
shell=True,
|
|
stdout=PIPE,
|
|
bufsize=100,
|
|
encoding='utf-8'
|
|
).communicate()[0][:-1]
|
|
|
|
if unread == "0":
|
|
continue
|
|
|
|
node_path = []
|
|
path_item = "/"
|
|
split_path = maildir.split("/")[1:] if is_leaf else maildir.split("/")[1:-1]
|
|
|
|
# it makes difference for mu whether a maildir ends in a slash or not
|
|
for i in range(0, len(split_path) - 1):
|
|
path_item = path_item + split_path[i] + "/"
|
|
node_path.append("\"" + path_item + "\"")
|
|
final_item = "" if is_leaf else "/"
|
|
node_path.append("\"" + path_item + split_path[-1] + final_item + "\"")
|
|
|
|
suffix = '" ({})"'.format(unread)
|
|
|
|
output.append('(({} {}) {})'.format(
|
|
PATH_PREFIX, " ".join(node_path), suffix
|
|
))
|
|
|
|
output.append(")")
|
|
print("".join(output))
|
|
|
|
main()
|