|
|
|
@ -200,36 +200,43 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags,
|
|
|
|
|
mbox->deleted++; |
|
|
|
|
cur->flags |= (tmp->flags & ~(D_RECENT | D_DRAFT)); |
|
|
|
|
|
|
|
|
|
/* generate old path */ |
|
|
|
|
snprintf (path, sizeof (path), "%s/%s/%s", |
|
|
|
|
mbox->path, cur->new ? "new" : "cur", cur->file); |
|
|
|
|
|
|
|
|
|
/* truncate old flags (if present) */ |
|
|
|
|
p = strchr (cur->file, ':'); |
|
|
|
|
if (p) |
|
|
|
|
*p = 0; |
|
|
|
|
|
|
|
|
|
/* generate new path - always put this in the cur/ directory
|
|
|
|
|
* because its no longer new |
|
|
|
|
/* don't bother renaming the file if we are just going to
|
|
|
|
|
* remove it later. |
|
|
|
|
*/ |
|
|
|
|
snprintf (newpath, sizeof (newpath), "%s/cur/%s:2,%s%s%s%s", |
|
|
|
|
mbox->path, |
|
|
|
|
cur->file, (cur->flags & D_FLAGGED) ? "F" : "", |
|
|
|
|
(cur->flags & D_ANSWERED) ? "R" : "", |
|
|
|
|
(cur->flags & D_SEEN) ? "S" : "", |
|
|
|
|
(cur->flags & D_DELETED) ? "T" : ""); |
|
|
|
|
|
|
|
|
|
if (rename (path, newpath)) |
|
|
|
|
{ |
|
|
|
|
perror ("rename"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
if ((cur->flags & D_DELETED) == 0 || (flags & SYNC_EXPUNGE) == 0) |
|
|
|
|
{ |
|
|
|
|
/* update the filename in the msg struct */ |
|
|
|
|
p = strrchr (newpath, '/'); |
|
|
|
|
free (cur->file); |
|
|
|
|
cur->file = strdup (p + 1); |
|
|
|
|
/* generate old path */ |
|
|
|
|
snprintf (path, sizeof (path), "%s/%s/%s", |
|
|
|
|
mbox->path, cur->new ? "new" : "cur", cur->file); |
|
|
|
|
|
|
|
|
|
/* truncate old flags (if present) */ |
|
|
|
|
p = strchr (cur->file, ':'); |
|
|
|
|
if (p) |
|
|
|
|
*p = 0; |
|
|
|
|
|
|
|
|
|
/* generate new path - always put this in the cur/ directory
|
|
|
|
|
* because its no longer new |
|
|
|
|
*/ |
|
|
|
|
snprintf (newpath, sizeof (newpath), "%s/cur/%s:2,%s%s%s%s", |
|
|
|
|
mbox->path, |
|
|
|
|
cur->file, (cur->flags & D_FLAGGED) ? "F" : "", |
|
|
|
|
(cur->flags & D_ANSWERED) ? "R" : "", |
|
|
|
|
(cur->flags & D_SEEN) ? "S" : "", |
|
|
|
|
(cur->flags & D_DELETED) ? "T" : ""); |
|
|
|
|
|
|
|
|
|
if (rename (path, newpath)) |
|
|
|
|
{ |
|
|
|
|
perror ("rename"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
/* update the filename in the msg struct */ |
|
|
|
|
p = strrchr (newpath, '/'); |
|
|
|
|
free (cur->file); |
|
|
|
|
cur->file = strdup (p + 1); |
|
|
|
|
cur->new = 0; /* not any more */ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|