statusbar

minimal utilities for displaying system status information
git clone https://git.awy.one/statusbar
Log | Files | Refs | LICENSE

stmail.c (2526B) - View raw


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
/* Copyright (C) 2025 awy <awy@awy.one>

   This file is part of stbar.

   stbar 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.

   stbar 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 stbar. If not, see
   <https://www.gnu.org/licenses/>. */

#define _DEFAULT_SOURCE
#include <sys/types.h>
#include <sys/wait.h>

#include "../util.h"
#include <dirent.h>
#include <notmuch.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static void buttonhandler(void)
{
  char *term;
  char *env;
  int button;
  pid_t pid;

  button = 0;
  if ((env = getenv("BLOCK_BUTTON")))
    button = getbtnint(env);

  if (!(term = getenv("TERMINAL")))
    term = "footclient";

  const char *mailclient[] = {"sh", "-c", "setsid -w -f \"$TERMINAL\" -e aerc",
                           NULL};
  const char *mailup[] = {"mailup", NULL};

  switch (button) {
  case 1:
    pid = spawn(mailclient);
    int status;
    waitpid(pid, &status, 0);
    updatebar(12);
    break;
  case 2:
    spawn(mailup);
    break;
  /* case 3:
    sendnotif ("stmail", " Mail module",
               "- Shows unread mail\n- Shows  if syncing mail\n\
- Left click opens mail client\n\
- Middle click to mute.");
    break; */
  default:
    break;
  }
}

int stmail(void)
{
  notmuch_database_t *db;
  notmuch_status_t status;
  notmuch_query_t *q;
  uint count = 0;

  buttonhandler();

  status = notmuch_database_open_with_config(
      NULL, NOTMUCH_DATABASE_MODE_READ_ONLY, NULL, NULL, &db, NULL);

  if (status != NOTMUCH_STATUS_SUCCESS)
    die("failed to open notmuch database");

  q = notmuch_query_create(db, "tag:unread");

  if (q == NULL) {
    notmuch_database_close(db);
    return -1;
  }

  status = notmuch_query_count_messages(q, &count);
  notmuch_query_destroy(q);
  notmuch_database_close(db);

  if (status != NOTMUCH_STATUS_SUCCESS)
    return -1;

  if (count == 0)
    return 0;

  if (access("/tmp/mailupdate", F_OK) != -1) {
    /* printf("<span color='#7F7F7F'>[updating]</span>\n"); */
    puts("🔃");
    return 0;
  }

  printf("%u\n", count);

  return 0;
}