1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-12-26 04:17:33 +00:00

Extended support for local Maildir patch sf.net id #2561323 (thanks Nicolas).

This commit is contained in:
Nicolas Sierro 2009-02-17 22:26:15 -07:00 committed by Brenden Matthews
parent f7aeae2c01
commit cf77d3f1f9
8 changed files with 592 additions and 66 deletions

View File

@ -17,6 +17,8 @@
Carpathia). Carpathia).
* Fix shown battery status when the battery is not charging any more but * Fix shown battery status when the battery is not charging any more but
is not full charged patch sf.net id #2556056 (thanks Martin) is not full charged patch sf.net id #2556056 (thanks Martin)
* Extended support for local Maildir patch sf.net id #2561323 (thanks
Nicolas)
2009-02-15 2009-02-15
* Added out_to_x * Added out_to_x

102
README
View File

@ -1100,10 +1100,75 @@ conky(1) conky(1)
your favourite protocol. See also new_mails. your favourite protocol. See also new_mails.
1mnew_mails (mailbox) (interval)0m
Unread mail count in the specified mailbox or mail spool if not.
Both mbox and maildir type mailboxes are supported.
1mseen_mails (maildir) (interval)0m
Number of mails marked as seen in the specified mailbox or mail
spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
1munseen_mails (maildir) (interval)0m
Number of new or unseen mails in the specified mailbox or mail
spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
1mflagged_mails (maildir) (interval)0m
Number of mails marked as flagged in the specified mailbox or
mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1munflagged_mails (maildir) (interval)0m
Number of mails not marked as flagged in the specified mailbox
or mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1mforwarded_mails (maildir) (interval)0m
Number of mails marked as forwarded in the specified mailbox or
mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1munforwarded_mails (maildir) (interval)0m
Number of mails not marked as forwarded in the specified mailbox
or mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1mreplied_mails (maildir) (interval)0m
Number of mails marked as replied in the specified mailbox or
mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1munreplied_mails (maildir) (interval)0m
Number of mails not marked as replied in the specified mailbox
or mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1mdraft_mails (maildir) (interval)0m
Number of mails marked as draft in the specified mailbox or mail
spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
1mtrashed_mails (maildir) (interval)0m
Number of mails marked as trashed in the specified mailbox or
mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
1mmboxscan (-n number of messages to print) (-fw from width) (-sw subject0m 1mmboxscan (-n number of messages to print) (-fw from width) (-sw subject0m
1mwidth) mbox0m 1mwidth) mbox0m
Print a summary of recent messages in an mbox format mailbox. Print a summary of recent messages in an mbox format mailbox.
mbox parameter is the filename of the mailbox (can be encapsu mbox parameter is the filename of the mailbox (can be encapsu
lated using ", ie. ${mboxscan -n 10 "/home/brenden/some box"} lated using ", ie. ${mboxscan -n 10 "/home/brenden/some box"}
@ -1114,14 +1179,14 @@ conky(1) conky(1)
Bar that shows amount of memory in use Bar that shows amount of memory in use
1mmemgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi0m 1mmemgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi0m
1ment colour 2) (scale)0m 1ment colour 2) (scale)0m
Memory usage graph. Uses a logarithmic scale (to see small num Memory usage graph. Uses a logarithmic scale (to see small num
bers) when you use "log" instead of "normal". bers) when you use "log" instead of "normal".
1mmemeasyfree0m 1mmemeasyfree0m
Amount of free memory including the memory that is very easily Amount of free memory including the memory that is very easily
freed (buffers/cache) freed (buffers/cache)
@ -1137,39 +1202,39 @@ conky(1) conky(1)
1mmixer (device)0m 1mmixer (device)0m
Prints the mixer value as reported by the OS. Default mixer is Prints the mixer value as reported by the OS. Default mixer is
"vol", but you can specify one of the following optional argu "vol", but you can specify one of the following optional argu
ments: "vol", "bass", "treble", "synth", "pcm", "speaker", ments: "vol", "bass", "treble", "synth", "pcm", "speaker",
"line", "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", "line", "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain",
"line1", "line2", "line3", "dig1", "dig2", "dig3", "phin", "line1", "line2", "line3", "dig1", "dig2", "dig3", "phin",
"phout", "video", "radio", "monitor". Refer to the definition of "phout", "video", "radio", "monitor". Refer to the definition of
SOUND_DEVICE_NAMES in <linux/soundcard.h> (on Linux), <sound SOUND_DEVICE_NAMES in <linux/soundcard.h> (on Linux), <sound
card.h> (on OpenBSD), or <sys/soundcard.h> to find the exact op card.h> (on OpenBSD), or <sys/soundcard.h> to find the exact op
tions available on your system. tions available on your system.
1mmixerbar (device)0m 1mmixerbar (device)0m
Displays mixer value in a bar as reported by the OS. See docs Displays mixer value in a bar as reported by the OS. See docs
for $mixer for details on arguments. for $mixer for details on arguments.
1mmixerr (device)0m 1mmixerr (device)0m
Prints the right channel mixer value as reported by the OS. See Prints the right channel mixer value as reported by the OS. See
docs for $mixer for details on arguments. docs for $mixer for details on arguments.
1mmixerrbar (device)0m 1mmixerrbar (device)0m
Displays the right channel mixer value in a bar as reported by Displays the right channel mixer value in a bar as reported by
the OS. See docs for $mixer for details on arguments. the OS. See docs for $mixer for details on arguments.
1mmixerl (device)0m 1mmixerl (device)0m
Prints the left channel mixer value as reported by the OS. See Prints the left channel mixer value as reported by the OS. See
docs for $mixer for details on arguments. docs for $mixer for details on arguments.
1mmixerlbar (device)0m 1mmixerlbar (device)0m
Displays the left channel mixer value in a bar as reported by Displays the left channel mixer value in a bar as reported by
the OS. See docs for $mixer for details on arguments. the OS. See docs for $mixer for details on arguments.
@ -1291,20 +1356,15 @@ conky(1) conky(1)
1mif_mpd_playing0m 1mif_mpd_playing0m
if mpd is playing or paused, display everything between if mpd is playing or paused, display everything between
$if_mpd_playing and the matching $endif $if_mpd_playing and the matching $endif
1mnameserver (index)0m 1mnameserver (index)0m
Print a nameserver from /etc/resolv.conf. Index starts at and Print a nameserver from /etc/resolv.conf. Index starts at and
defaults to 0. defaults to 0.
1mnew_mails (mailbox) (interval)0m
Unread mail count in the specified mailbox or mail spool if not.
Both mbox and maildir type mailboxes are supported.
1mnodename0m 1mnodename0m
Hostname Hostname

View File

@ -950,6 +950,61 @@ Both mbox and maildir type mailboxes are supported. You can
use a program like fetchmail to get mails from some server use a program like fetchmail to get mails from some server
using your favourite protocol. See also new_mails. using your favourite protocol. See also new_mails.
.TP
\fB\*(T<\fBnew_mails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Unread mail count in the specified mailbox or mail spool if
not. Both mbox and maildir type mailboxes are supported.
.TP
\fB\*(T<\fBseen_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as seen in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBunseen_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of new or unseen mails in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBflagged_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as flagged in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBunflagged_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails not marked as flagged in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBforwarded_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as forwarded in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBunforwarded_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails not marked as forwarded in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBreplied_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as replied in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBunreplied_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails not marked as replied in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBdraft_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as draft in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP
\fB\*(T<\fBtrashed_mails\fR\*(T>\fR \*(T<\fB(maildir)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Number of mails marked as trashed in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
.TP .TP
\fB\*(T<\fBmboxscan\fR\*(T>\fR \*(T<\fB(\-n number of messages to print) (\-fw from width) (\-sw subject width) mbox\fR\*(T> \fB\*(T<\fBmboxscan\fR\*(T>\fR \*(T<\fB(\-n number of messages to print) (\-fw from width) (\-sw subject width) mbox\fR\*(T>
Print a summary of recent messages in an mbox format mailbox. mbox parameter is the filename of the mailbox (can be encapsulated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"} Print a summary of recent messages in an mbox format mailbox. mbox parameter is the filename of the mailbox (can be encapsulated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"}
@ -1130,11 +1185,6 @@ if mpd is playing or paused, display everything between $if_mpd_playing and the
\fB\*(T<\fBnameserver\fR\*(T>\fR \*(T<\fB(index)\fR\*(T> \fB\*(T<\fBnameserver\fR\*(T>\fR \*(T<\fB(index)\fR\*(T>
Print a nameserver from /etc/resolv.conf. Index starts at and defaults to 0. Print a nameserver from /etc/resolv.conf. Index starts at and defaults to 0.
.TP
\fB\*(T<\fBnew_mails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T>
Unread mail count in the specified mailbox or mail spool if
not. Both mbox and maildir type mailboxes are supported.
.TP .TP
\fB\*(T<\fBnodename\fR\*(T>\fR \fB\*(T<\fBnodename\fR\*(T>\fR
Hostname Hostname

View File

@ -1216,6 +1216,138 @@
<para></para></listitem> <para></para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<command><option>new_mails</option></command>
<option>(mailbox)</option>
<option>(interval)</option>
</term>
<listitem>
Unread mail count in the specified mailbox or mail spool if
not. Both mbox and maildir type mailboxes are supported.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>seen_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as seen in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>unseen_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of new or unseen mails in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>flagged_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as flagged in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>unflagged_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails not marked as flagged in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>forwarded_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as forwarded in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>unforwarded_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails not marked as forwarded in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>replied_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as replied in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>unreplied_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails not marked as replied in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>draft_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as draft in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>trashed_mails</option></command>
<option>(maildir)</option>
<option>(interval)</option>
</term>
<listitem>
Number of mails marked as trashed in the specified mailbox or mail spool if
not. Only maildir type mailboxes are supported, mbox type will return -1.
<para></para></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<command><option>mboxscan</option></command> <command><option>mboxscan</option></command>
@ -1634,18 +1766,6 @@
<para></para></listitem> <para></para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<command><option>new_mails</option></command>
<option>(mailbox)</option>
<option>(interval)</option>
</term>
<listitem>
Unread mail count in the specified mailbox or mail spool if
not. Both mbox and maildir type mailboxes are supported.
<para></para></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<command><option>nodename</option></command> <command><option>nodename</option></command>

View File

@ -1252,6 +1252,16 @@ static void free_text_objects(struct text_object *root)
break; break;
case OBJ_mails: case OBJ_mails:
case OBJ_new_mails: case OBJ_new_mails:
case OBJ_seen_mails:
case OBJ_unseen_mails:
case OBJ_flagged_mails:
case OBJ_unflagged_mails:
case OBJ_forwarded_mails:
case OBJ_unforwarded_mails:
case OBJ_replied_mails:
case OBJ_unreplied_mails:
case OBJ_draft_mails:
case OBJ_trashed_mails:
free(data.local_mail.box); free(data.local_mail.box);
break; break;
case OBJ_imap: case OBJ_imap:
@ -2600,6 +2610,193 @@ static struct text_object *construct_text_object(const char *s,
} }
} }
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(new_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(seen_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(unseen_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(flagged_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(unflagged_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(forwarded_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(unforwarded_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(replied_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(unreplied_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(draft_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(trashed_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst)); variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size); obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1; obj->data.local_mail.interval = n1;
@ -2642,28 +2839,6 @@ static struct text_object *construct_text_object(const char *s,
END OBJ(monitor, INFO_X11) END OBJ(monitor, INFO_X11)
END OBJ(monitor_number, INFO_X11) END OBJ(monitor_number, INFO_X11)
#endif #endif
END OBJ(new_mails, 0)
float n1;
char box[256], dst[256];
if (!arg) {
n1 = 9.5;
/* Kapil: Changed from MAIL_FILE to
current_mail_spool since the latter
is a copy of the former if undefined
but the latter should take precedence
if defined */
strncpy(box, current_mail_spool, sizeof(box));
} else {
if (sscanf(arg, "%s %f", box, &n1) != 2) {
n1 = 9.5;
strncpy(box, arg, sizeof(box));
}
}
variable_substitute(box, dst, sizeof(dst));
obj->data.local_mail.box = strndup(dst, text_buffer_size);
obj->data.local_mail.interval = n1;
END OBJ(nodename, 0) END OBJ(nodename, 0)
END OBJ(processes, INFO_PROCS) END OBJ(processes, INFO_PROCS)
END OBJ(running_processes, INFO_RUN_PROCS) END OBJ(running_processes, INFO_RUN_PROCS)
@ -4725,16 +4900,66 @@ static void generate_text_internal(char *p, int p_max_size,
update_mail_count(&obj->data.local_mail); update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d", obj->data.local_mail.mail_count); snprintf(p, p_max_size, "%d", obj->data.local_mail.mail_count);
} }
OBJ(mboxscan) {
mbox_scan(obj->data.mboxscan.args, obj->data.mboxscan.output,
text_buffer_size);
snprintf(p, p_max_size, "%s", obj->data.mboxscan.output);
}
OBJ(new_mails) { OBJ(new_mails) {
update_mail_count(&obj->data.local_mail); update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d", snprintf(p, p_max_size, "%d",
obj->data.local_mail.new_mail_count); obj->data.local_mail.new_mail_count);
} }
OBJ(seen_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.seen_mail_count);
}
OBJ(unseen_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.unseen_mail_count);
}
OBJ(flagged_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.flagged_mail_count);
}
OBJ(unflagged_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.unflagged_mail_count);
}
OBJ(forwarded_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.forwarded_mail_count);
}
OBJ(unforwarded_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.unforwarded_mail_count);
}
OBJ(replied_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.replied_mail_count);
}
OBJ(unreplied_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.unreplied_mail_count);
}
OBJ(draft_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.draft_mail_count);
}
OBJ(trashed_mails) {
update_mail_count(&obj->data.local_mail);
snprintf(p, p_max_size, "%d",
obj->data.local_mail.trashed_mail_count);
}
OBJ(mboxscan) {
mbox_scan(obj->data.mboxscan.args, obj->data.mboxscan.output,
text_buffer_size);
snprintf(p, p_max_size, "%s", obj->data.mboxscan.output);
}
OBJ(nodename) { OBJ(nodename) {
snprintf(p, p_max_size, "%s", cur->uname_s.nodename); snprintf(p, p_max_size, "%s", cur->uname_s.nodename);
} }

View File

@ -87,8 +87,14 @@ void update_mail_count(struct local_mail_s *mail)
DIR *dir; DIR *dir;
char *dirname; char *dirname;
struct dirent *dirent; struct dirent *dirent;
char *mailflags;
mail->mail_count = mail->new_mail_count = 0; mail->mail_count = mail->new_mail_count = 0;
mail->seen_mail_count = mail->unseen_mail_count = 0;
mail->flagged_mail_count = mail->unflagged_mail_count = 0;
mail->forwarded_mail_count = mail->unforwarded_mail_count = 0;
mail->replied_mail_count = mail->unreplied_mail_count = 0;
mail->draft_mail_count = mail->trashed_mail_count = 0;
dirname = (char *) malloc(sizeof(char) * (strlen(mail->box) + 5)); dirname = (char *) malloc(sizeof(char) * (strlen(mail->box) + 5));
if (!dirname) { if (!dirname) {
ERR("malloc"); ERR("malloc");
@ -110,6 +116,41 @@ void update_mail_count(struct local_mail_s *mail)
/* . and .. are skipped */ /* . and .. are skipped */
if (dirent->d_name[0] != '.') { if (dirent->d_name[0] != '.') {
mail->mail_count++; mail->mail_count++;
mailflags = (char *) malloc(sizeof(char) * strlen(strrchr(dirent->d_name, ',')));
if (!mailflags) {
ERR("malloc");
free(dirname);
return;
}
strcpy(mailflags, strrchr(dirent->d_name, ','));
if (!strchr(mailflags, 'T')) { /* The message is not in the trash */
if (strchr(mailflags, 'S')) { /*The message has been seen */
mail->seen_mail_count++;
} else {
mail->unseen_mail_count++;
}
if (strchr(mailflags, 'F')) { /*The message was flagged */
mail->flagged_mail_count++;
} else {
mail->unflagged_mail_count++;
}
if (strchr(mailflags, 'P')) { /*The message was forwarded */
mail->forwarded_mail_count++;
} else {
mail->unforwarded_mail_count++;
}
if (strchr(mailflags, 'R')) { /*The message was replied */
mail->replied_mail_count++;
} else {
mail->unreplied_mail_count++;
}
if (strchr(mailflags, 'D')) { /*The message is a draft */
mail->draft_mail_count++;
}
} else {
mail->trashed_mail_count++;
}
free(mailflags);
} }
dirent = readdir(dir); dirent = readdir(dir);
} }
@ -130,6 +171,7 @@ void update_mail_count(struct local_mail_s *mail)
if (dirent->d_name[0] != '.') { if (dirent->d_name[0] != '.') {
mail->new_mail_count++; mail->new_mail_count++;
mail->mail_count++; mail->mail_count++;
mail->unseen_mail_count++; /* new messages cannot have been seen */
} }
dirent = readdir(dir); dirent = readdir(dir);
} }
@ -151,6 +193,13 @@ void update_mail_count(struct local_mail_s *mail)
mail->new_mail_count = mail->mail_count = 0; mail->new_mail_count = mail->mail_count = 0;
/* these flags are not supported for mbox */
mail->seen_mail_count = mail->unseen_mail_count = -1;
mail->flagged_mail_count = mail->unflagged_mail_count = -1;
mail->forwarded_mail_count = mail->unforwarded_mail_count = -1;
mail->replied_mail_count = mail->unreplied_mail_count = -1;
mail->draft_mail_count = mail->trashed_mail_count = -1;
fp = open_file(mail->box, &rep); fp = open_file(mail->box, &rep);
if (!fp) { if (!fp) {
return; return;

View File

@ -27,6 +27,16 @@ struct local_mail_s {
char *box; char *box;
int mail_count; int mail_count;
int new_mail_count; int new_mail_count;
int seen_mail_count;
int unseen_mail_count;
int flagged_mail_count;
int unflagged_mail_count;
int forwarded_mail_count;
int unforwarded_mail_count;
int replied_mail_count;
int unreplied_mail_count;
int draft_mail_count;
int trashed_mail_count;
float interval; float interval;
time_t last_mtime; time_t last_mtime;
double last_update; double last_update;

View File

@ -170,6 +170,17 @@ enum text_object_type {
OBJ_loadavg, OBJ_loadavg,
OBJ_machine, OBJ_machine,
OBJ_mails, OBJ_mails,
OBJ_new_mails,
OBJ_seen_mails,
OBJ_unseen_mails,
OBJ_flagged_mails,
OBJ_unflagged_mails,
OBJ_forwarded_mails,
OBJ_unforwarded_mails,
OBJ_replied_mails,
OBJ_unreplied_mails,
OBJ_draft_mails,
OBJ_trashed_mails,
OBJ_mboxscan, OBJ_mboxscan,
OBJ_mem, OBJ_mem,
OBJ_memeasyfree, OBJ_memeasyfree,
@ -191,7 +202,6 @@ enum text_object_type {
OBJ_monitor_number, OBJ_monitor_number,
#endif #endif
OBJ_nameserver, OBJ_nameserver,
OBJ_new_mails,
OBJ_nodename, OBJ_nodename,
OBJ_nvidia, OBJ_nvidia,
OBJ_pre_exec, OBJ_pre_exec,