diff options
author | awy <awy@awy.one> | 2025-08-24 02:26:07 +0300 |
---|---|---|
committer | awy <awy@awy.one> | 2025-08-24 02:26:07 +0300 |
commit | 09a26825adf370314219424b4bff2c3f9a931ebb (patch) | |
tree | dfbc6f1919182ae1e9ca96f40bfef935aec88848 | |
parent | f88c78591b4211f80dc1ec5c5a5f620f383e21b8 (diff) |
stmail
-rwxr-xr-x | sb-mailbox | 24 | ||||
-rw-r--r-- | src/stmail.c | 88 |
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; +} |