/* Copyright (C) 2025 awy stmail is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. stmail is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with stmail. If not, see . */ #define _DEFAULT_SOURCE #include #include #include #include #include #include "../lib/util.h" void buttonhandler() { char *term; char *env; int button; button = 0; if ((env = getenv("BLOCK_BUTTON"))) button = getbtnint(env); if (!(term = getenv("TERMINAL"))) term = "footclient"; const char *neomutt[] = { "sh", "-c", \ "setsid -w -f \"$TERMINAL\" -e neomutt ; \ pkill -RTMIN+12 \"${STATUSBAR:-waybar}\"", NULL }; const char *mailup[] = { "mailup", NULL }; switch (button) { case 1: spawn(neomutt); break; case 2: spawn(mailup); break; case 3: sendnotif("stmail", " Mail module", "- Shows unread mail\n- Shows  if syncing mail\n\ - Left click opens neomutt\n\ - Middle click to mute."); break; default: break; } } int newmsg(char path[1024]) { DIR *dir; int count; struct dirent *entry; if (!(dir = opendir(path))) die("failed to open dir"); count = 0; while ((entry = readdir(dir)) != NULL) { if (entry->d_type == DT_REG) { if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) { count++; } } } return count; } int main(void) { DIR *dir; int count; char *env; char buf[1024]; char path[1024]; struct dirent *entry; buttonhandler(); if (!(env = getenv("XDG_DATA_HOME"))) die("XDG_DATA_HOME is not set"); snprintf(buf, sizeof(buf), "%s/mail/", env); if (!(dir = opendir(buf))) die("failed to open dir"); count = 0; while ((entry = readdir(dir)) != NULL) { if (entry->d_type == DT_DIR) { if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..") && strcmp(entry->d_name, ".notmuch")) { strcpy(path, buf); strcat(path, entry->d_name); strcat(path, "/INBOX/new/"); count += newmsg(path); } } } closedir(dir); if (access("/tmp/mailupdate", F_OK) != -1) { printf(""); if (count != 0) printf(" "); } if (count == 0) return 0; printf(" %d", count); return 0; }