mirror of
https://github.com/Llewellynvdm/conky.git
synced 2025-01-14 03:23:29 +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)) {
|
if (stat(mail->box, &st)) {
|
||||||
static int rep;
|
static int rep = 0;
|
||||||
|
|
||||||
if (!rep) {
|
if (!rep) {
|
||||||
ERR("can't stat %s: %s", mail->box, strerror(errno));
|
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)) {
|
while (!feof(fp)) {
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
int was_new = 0;
|
||||||
|
|
||||||
if (fgets(buf, 128, fp) == NULL) {
|
if (fgets(buf, 128, fp) == NULL) {
|
||||||
break;
|
break;
|
||||||
@ -219,28 +220,53 @@ void update_mail_count(struct local_mail_s *mail)
|
|||||||
/* ignore MAILER-DAEMON */
|
/* ignore MAILER-DAEMON */
|
||||||
if (strncmp(buf + 5, "MAILER-DAEMON ", 14) != 0) {
|
if (strncmp(buf + 5, "MAILER-DAEMON ", 14) != 0) {
|
||||||
mail->mail_count++;
|
mail->mail_count++;
|
||||||
|
was_new = 0;
|
||||||
|
|
||||||
if (reading_status) {
|
if (reading_status == 1) {
|
||||||
mail->new_mail_count++;
|
mail->new_mail_count++;
|
||||||
} else {
|
} else {
|
||||||
reading_status = 1;
|
reading_status = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (reading_status
|
if (reading_status == 1
|
||||||
&& strncmp(buf, "X-Mozilla-Status:", 17) == 0) {
|
&& 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 */
|
/* check that mail isn't already read */
|
||||||
if (strchr(buf + 21, '0')) {
|
if (!(xms & 0x0001)) {
|
||||||
mail->new_mail_count++;
|
mail->new_mail_count++;
|
||||||
|
was_new = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
reading_status = 0;
|
/* check for an additional X-Status header */
|
||||||
|
reading_status = 2;
|
||||||
continue;
|
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 */
|
/* check that mail isn't already read */
|
||||||
if (strchr(buf + 7, 'R') == NULL) {
|
if (strchr(buf + 7, 'R') == NULL) {
|
||||||
mail->new_mail_count++;
|
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;
|
reading_status = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user