summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorawy <awy@awy.one>2025-08-24 02:26:07 +0300
committerawy <awy@awy.one>2025-08-24 02:26:07 +0300
commit09a26825adf370314219424b4bff2c3f9a931ebb (patch)
treedfbc6f1919182ae1e9ca96f40bfef935aec88848
parentf88c78591b4211f80dc1ec5c5a5f620f383e21b8 (diff)
stmail
-rwxr-xr-xsb-mailbox24
-rw-r--r--src/stmail.c88
2 files changed, 88 insertions, 24 deletions
diff --git a/sb-mailbox b/sb-mailbox
deleted file mode 100755
index 19478e8..0000000
--- a/sb-mailbox
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-# Displays number of unread mail and an loading icon if updating.
-# When clicked, brings up `neomutt`.
-
-case $BLOCK_BUTTON in
- 1) setsid -w -f "$TERMINAL" -e neomutt ; pkill -RTMIN+12 "${STATUSBAR:-waybar}" ;;
- 2) setsid -f mailup >/dev/null && exit ;;
- 3) notify-send " Mail module" "\- Shows unread mail
-- Shows  if syncing mail
-- Left click opens neomutt
-- Middle click syncs mail" ;;
- 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
-esac
-
-unread="$(fd . "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/ -t f | wc -l 2>/dev/null)"
-
-icon=$(bat /tmp/mailupdate 2>/dev/null)
-
-if [ "$unread" -eq 0 ]; then
- [ -n "$icon" ] && echo "$icon" || exit 0
-else
- echo " $unread$icon"
-fi
diff --git a/src/stmail.c b/src/stmail.c
new file mode 100644
index 0000000..d4c23eb
--- /dev/null
+++ b/src/stmail.c
@@ -0,0 +1,88 @@
+/* Copyright (C) 2025 awy <awy@awy.one>
+
+ 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
+ <https://www.gnu.org/licenses/>. */
+
+#define _DEFAULT_SOURCE
+#include <stdlib.h>
+#include <dirent.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+
+int
+newmsg(char path[1024])
+{
+ DIR *dir;
+ int count;
+ struct dirent *entry;
+
+ count = 0;
+
+ dir = opendir(path);
+ if (!dir) { return 1; }
+
+ 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 *path;
+ char fullpath[1024];
+ struct dirent *entry;
+
+ path = getenv("XDG_DATA_HOME");
+ if (!path) { puts("XDG_DATA_HOME is not set"); return 1; }
+
+ strcat(path, "/mail");
+
+ dir = opendir(path);
+ if (!dir) { return 1; }
+
+ 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(fullpath, path);
+ strcat(fullpath, "/");
+ strcat(fullpath, entry->d_name);
+ strcat(fullpath, "/INBOX/new/");
+ count += newmsg(fullpath);
+ }
+ }
+ }
+
+ if (access("/tmp/mailupdate", F_OK) != -1) {
+ printf("");
+ if (count != 0) { printf(" "); }
+ }
+
+ if (count == 0) { return 0; }
+ printf(" %d", count);
+
+ closedir(dir);
+ return 0;
+}