mail_counter.c - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       mail_counter.c (1771B)
       ---
            1 //  Fichier: dwmstatus.c                   
            2 //  Crée le 10 déc. 2012 22:28:11
            3 //  Dernière modification: 21 déc. 2012 16:25:16
            4 
            5 #define _BSD_SOURCE
            6 #define _GNU_SOURCE
            7 #include <unistd.h>
            8 #include <stdio.h>
            9 #include <stdlib.h>
           10 #include <stdarg.h>
           11 #include <string.h>
           12 #include <strings.h>
           13 #include <sys/time.h>
           14 #include <time.h>
           15 #include <sys/types.h>
           16 #include <sys/wait.h>
           17 #include <dirent.h>
           18 
           19 #include <X11/Xlib.h>
           20 
           21 static Display *dpy;
           22 
           23 char *
           24 smprintf(char *fmt, ...)
           25 {
           26         va_list fmtargs;
           27         char *buf = NULL;
           28 
           29         va_start(fmtargs, fmt);
           30         if (vasprintf(&buf, fmt, fmtargs) == -1){
           31                 fprintf(stderr, "malloc vasprintf\n");
           32                 exit(1);
           33     }
           34         va_end(fmtargs);
           35 
           36         return buf;
           37 }
           38 
           39 void
           40 setstatus(char *str)
           41 {
           42         XStoreName(dpy, DefaultRootWindow(dpy), str);
           43         XSync(dpy, False);
           44 }
           45 
           46 char *get_nmail(char *directory, char *label)
           47 {
           48     /* directory : Maildir path 
           49     * return label : number_of_new_mails
           50     */
           51     
           52     int n = 0;
           53     DIR* dir = NULL;
           54     struct dirent* rf = NULL;
           55 
           56     dir = opendir(directory); /* try to open directory */
           57     if (dir == NULL)
           58         perror("");
           59 
           60     while ((rf = readdir(dir)) != NULL) /*count number of file*/
           61     {
           62         if (strcmp(rf->d_name, ".") != 0 &&
           63             strcmp(rf->d_name, "..") != 0)
           64             n++;
           65     }
           66     closedir(dir);
           67 
           68     if (n == 0) 
           69        return smprintf("");
           70     else 
           71        return smprintf("%s%d",label, n);
           72 
           73 }
           74 
           75 int
           76 main(void)
           77 {
           78         char *status;
           79     char *newmails;
           80     
           81         if (!(dpy = XOpenDisplay(NULL))) {
           82                 fprintf(stderr, "dwmstatus: cannot open display.\n");
           83                 return 1;
           84         }
           85 
           86         for (;;sleep(60)) {
           87         newmails = get_nmail("/home/xavier/Maildir/laposte/new", "Mails:");
           88 
           89 
           90                 status = smprintf("%s",newmails);
           91                 setstatus(status);
           92                 free(newmails);
           93                 free(status);
           94         }
           95 
           96         XCloseDisplay(dpy);
           97 
           98         return 0;
           99 }
          100