1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-11-15 09:44:04 +00:00

fix imap message count updates

This commit is contained in:
Georg Hopp 2013-01-03 11:02:19 +01:00 committed by Brenden Matthews
parent bfaa84bd77
commit 36c3401a42

View File

@ -630,8 +630,17 @@ int imap_check_status(char *recvbuf, struct mail_s *mail)
void imap_unseen_command(struct mail_s *mail, unsigned long old_unseen, unsigned long old_messages) void imap_unseen_command(struct mail_s *mail, unsigned long old_unseen, unsigned long old_messages)
{ {
if (strlen(mail->command) > 1 && (mail->unseen > old_unseen /*
|| (mail->messages > old_messages && mail->unseen > 0))) { * Georg Hopp (2012-12-23):
* Well, i will read mails from time to time and i want the unseen
* count to be reduced when they are read...so, this seems wrong.
* Try a better one.... :)
*/
/*if (strlen(mail->command) > 1 && (mail->unseen > old_unseen
|| (mail->messages > old_messages && mail->unseen > 0))) {*/
if (strlen(mail->command) > 1
&& (mail->unseen != old_unseen
|| mail->messages != old_messages)) {
// new mail goodie // new mail goodie
if (system(mail->command) == -1) { if (system(mail->command) == -1) {
perror("system()"); perror("system()");
@ -813,7 +822,7 @@ static void *imap_thread(void *arg)
if (strlen(recvbuf) > 2) { if (strlen(recvbuf) > 2) {
unsigned long messages, recent = 0; unsigned long messages, recent = 0;
char *buf = recvbuf; char *buf = recvbuf;
char force_check = 0; char force_check = 1; // Booo, this whole thing is crap
buf = strstr(buf, "EXISTS"); buf = strstr(buf, "EXISTS");
while (buf && strlen(buf) > 1 && strstr(buf + 1, "EXISTS")) { while (buf && strlen(buf) > 1 && strstr(buf + 1, "EXISTS")) {
buf = strstr(buf + 1, "EXISTS"); buf = strstr(buf + 1, "EXISTS");
@ -825,9 +834,9 @@ static void *imap_thread(void *arg)
} }
if (sscanf(buf, "* %lu EXISTS\r\n", &messages) == 1) { if (sscanf(buf, "* %lu EXISTS\r\n", &messages) == 1) {
timed_thread_lock(mail->p_timed_thread); timed_thread_lock(mail->p_timed_thread);
if (mail->messages != messages) { //if (mail->messages != messages) {
force_check = 1; force_check = 1;
} //}
timed_thread_unlock(mail->p_timed_thread); timed_thread_unlock(mail->p_timed_thread);
} }
} }
@ -850,7 +859,10 @@ static void *imap_thread(void *arg)
* something other than 0, or we had a timeout * something other than 0, or we had a timeout
*/ */
buf = recvbuf; buf = recvbuf;
if (recent > 0 || (buf && strstr(buf, " FETCH ")) || fetchtimeout.tv_sec == 0 || force_check) { if (recent > 0
|| (buf && strstr(buf, " FETCH "))
|| (buf && strstr(buf, " EXPUNGE "))
|| fetchtimeout.tv_sec == 0 || force_check) {
// re-check messages and unseen // re-check messages and unseen
if (imap_command(sockfd, "DONE\r\n", recvbuf, "a5 OK")) { if (imap_command(sockfd, "DONE\r\n", recvbuf, "a5 OK")) {
fail++; fail++;
@ -868,6 +880,9 @@ static void *imap_thread(void *arg)
fail++; fail++;
break; break;
} }
imap_unseen_command(mail, old_unseen, old_messages);
old_unseen = mail->unseen;
old_messages = mail->messages;
strncpy(sendbuf, "a5 IDLE\r\n", MAXDATASIZE); strncpy(sendbuf, "a5 IDLE\r\n", MAXDATASIZE);
if (imap_command(sockfd, sendbuf, recvbuf, "+ idling")) { if (imap_command(sockfd, sendbuf, recvbuf, "+ idling")) {
fail++; fail++;
@ -886,10 +901,7 @@ static void *imap_thread(void *arg)
fail++; fail++;
break; break;
} }
imap_unseen_command(mail, old_unseen, old_messages);
fail = 0; fail = 0;
old_unseen = mail->unseen;
old_messages = mail->messages;
} }
if (fail) break; if (fail) break;
} else { } else {