mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-12-27 20:44:56 +00:00
Check for deleted and not expunged emails
This should fix bug #2802529. I've also revamped the X-Mozilla-Status header handling which was kind of fishy till now. Disclaimer: I have no mbox folders around to test it. Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr> Signed-off-by: Brenden Matthews <brenden@rty.ca>
This commit is contained in:
parent
8476bb08b5
commit
d934d11e48
38
src/mail.c
38
src/mail.c
@ -74,7 +74,7 @@ void update_mail_count(struct local_mail_s *mail)
|
||||
}
|
||||
|
||||
if (stat(mail->box, &st)) {
|
||||
static int rep;
|
||||
static int rep = 0;
|
||||
|
||||
if (!rep) {
|
||||
ERR("can't stat %s: %s", mail->box, strerror(errno));
|
||||
@ -210,6 +210,7 @@ void update_mail_count(struct local_mail_s *mail)
|
||||
|
||||
while (!feof(fp)) {
|
||||
char buf[128];
|
||||
int was_new = 0;
|
||||
|
||||
if (fgets(buf, 128, fp) == NULL) {
|
||||
break;
|
||||
@ -219,28 +220,53 @@ void update_mail_count(struct local_mail_s *mail)
|
||||
/* ignore MAILER-DAEMON */
|
||||
if (strncmp(buf + 5, "MAILER-DAEMON ", 14) != 0) {
|
||||
mail->mail_count++;
|
||||
was_new = 0;
|
||||
|
||||
if (reading_status) {
|
||||
if (reading_status == 1) {
|
||||
mail->new_mail_count++;
|
||||
} else {
|
||||
reading_status = 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (reading_status
|
||||
if (reading_status == 1
|
||||
&& strncmp(buf, "X-Mozilla-Status:", 17) == 0) {
|
||||
int xms = strtol(buf + 17, NULL, 16);
|
||||
/* check that mail isn't marked for deletion */
|
||||
if (xms & 0x0008) {
|
||||
mail->trashed_mail_count++;
|
||||
reading_status = 0;
|
||||
/* Don't check whether the trashed email is unread */
|
||||
continue;
|
||||
}
|
||||
/* check that mail isn't already read */
|
||||
if (strchr(buf + 21, '0')) {
|
||||
if (!(xms & 0x0001)) {
|
||||
mail->new_mail_count++;
|
||||
was_new = 1;
|
||||
}
|
||||
|
||||
reading_status = 0;
|
||||
/* check for an additional X-Status header */
|
||||
reading_status = 2;
|
||||
continue;
|
||||
}
|
||||
if (reading_status && strncmp(buf, "Status:", 7) == 0) {
|
||||
if (reading_status == 1 && strncmp(buf, "Status:", 7) == 0) {
|
||||
/* check that mail isn't already read */
|
||||
if (strchr(buf + 7, 'R') == NULL) {
|
||||
mail->new_mail_count++;
|
||||
was_new = 1;
|
||||
}
|
||||
|
||||
reading_status = 2;
|
||||
continue;
|
||||
}
|
||||
if (reading_status >= 1 && strncmp(buf, "X-Status:", 9) == 0) {
|
||||
/* check that mail isn't marked for deletion */
|
||||
if (strchr(buf + 9, 'D') != NULL) {
|
||||
mail->trashed_mail_count++;
|
||||
/* If the mail was previously detected as new,
|
||||
subtract it from the new mail count */
|
||||
if (was_new)
|
||||
mail->new_mail_count--;
|
||||
}
|
||||
|
||||
reading_status = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user