소스 검색

- update isyncmaxuid properly

Oswald Buddenhagen 22 년 전
부모
커밋
a4f2725bad
3개의 변경된 파일11개의 추가작업 그리고 8개의 파일을 삭제
  1. 0 2
      TODO
  2. 3 3
      src/maildir.c
  3. 8 3
      src/sync.c

+ 0 - 2
TODO

@@ -1,7 +1,5 @@
 add support for syncing with other: and shared: via NAMESPACE
 add support for syncing with other: and shared: via NAMESPACE
 
 
---fast downloads the last message again if no new messages have arrived
-
 isync gets confused when new mail is delivered while in the middle of an
 isync gets confused when new mail is delivered while in the middle of an
 IMAP session.  need to handled those asynchronous notifications properly.
 IMAP session.  need to handled those asynchronous notifications properly.
 
 

+ 3 - 3
src/maildir.c

@@ -198,9 +198,6 @@ maildir_open (const char *path, int flags)
     if (read_uid (m->path, "isyncmaxuid", &m->maxuid) == -1)
     if (read_uid (m->path, "isyncmaxuid", &m->maxuid) == -1)
 	goto err;
 	goto err;
 
 
-    if (flags & OPEN_FAST)
-	return m;
-
     snprintf (buf, sizeof (buf), "%s/isyncuidmap", m->path);
     snprintf (buf, sizeof (buf), "%s/isyncuidmap", m->path);
     m->db = dbm_open (buf, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
     m->db = dbm_open (buf, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
     if (m->db == NULL)
     if (m->db == NULL)
@@ -209,6 +206,9 @@ maildir_open (const char *path, int flags)
 	goto err;
 	goto err;
     }
     }
 
 
+    if (flags & OPEN_FAST)
+	return m;
+
     cur = &m->msgs;
     cur = &m->msgs;
     for (; count < 2; count++)
     for (; count < 2; count++)
     {
     {

+ 8 - 3
src/sync.c

@@ -94,8 +94,6 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags,
     if (mbox->maxuid == 0 || imap->maxuid > mbox->maxuid)
     if (mbox->maxuid == 0 || imap->maxuid > mbox->maxuid)
     {
     {
 	mbox->maxuid = imap->maxuid;
 	mbox->maxuid = imap->maxuid;
-	if (maildir_update_maxuid (mbox))
-	    return -1;
     }
     }
 
 
     /* if we are --fast mode, the mailbox wont have been loaded, so
     /* if we are --fast mode, the mailbox wont have been loaded, so
@@ -153,11 +151,13 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags,
 
 
 		cur->size = sb.st_size;
 		cur->size = sb.st_size;
 		cur->uid = imap_append_message (imap, fd, cur);
 		cur->uid = imap_append_message (imap, fd, cur);
-		/* if the server gave us back a uid, update the db */
 		if (cur->uid != (unsigned int) -1) {
 		if (cur->uid != (unsigned int) -1) {
+		    /* update the db */
 		    set_uid (mbox->db, cur->file, cur->uid);
 		    set_uid (mbox->db, cur->file, cur->uid);
 		    if (!cur->uid)
 		    if (!cur->uid)
 			printf("warning: no uid for new messge %s\n", cur->file);
 			printf("warning: no uid for new messge %s\n", cur->file);
+		    else if (cur->uid > mbox->maxuid)
+		    	mbox->maxuid = cur->uid;
 		}
 		}
 
 
 		close (fd);
 		close (fd);
@@ -373,6 +373,8 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags,
 		{
 		{
 		    /* update the db with the UID mapping for this file */
 		    /* update the db with the UID mapping for this file */
 		    set_uid (mbox->db, p + 1, cur->uid);
 		    set_uid (mbox->db, p + 1, cur->uid);
+		    if (cur->uid > mbox->maxuid)
+		    	mbox->maxuid = cur->uid;
 		}
 		}
 	    }
 	    }
 
 
@@ -383,5 +385,8 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags,
 
 
     info (" %d messages\n", fetched);
     info (" %d messages\n", fetched);
 
 
+    if (maildir_update_maxuid (mbox))
+	return -1;
+
     return 0;
     return 0;
 }
 }