diff options
author | Dan Winship <danw@src.gnome.org> | 2000-09-15 14:05:46 +0000 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-09-15 14:05:46 +0000 |
commit | 3731a29d75fce1f3692a1f2fa647814c926d77b1 (patch) | |
tree | 4893e7e3b956549545e85c2d811c638b04bf2a5c | |
parent | 9e1a8a6d72284da2b217838f0da24307466305ad (diff) | |
download | evolution-data-server-3731a29d75fce1f3692a1f2fa647814c926d77b1.tar.gz |
pull up fixes
-rw-r--r-- | camel/ChangeLog | 7 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 82 |
2 files changed, 9 insertions, 80 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 56fd149a0..d51706fa7 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,10 @@ +2000-09-13 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_expunge): Don't look at + the response of the command. camel_imap_command_extended() + processes EXPUNGE responses itself, so if we do it here too we + remove twice as many summary items as we should. + 2000-09-12 Jeffrey Stedfast <fejj@helixcode.com> * camel-mime-parser.c (folder_scan_step): Make sure *datalength is diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index 5b55f6bf9..1025f94e2 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -361,92 +361,14 @@ static void imap_expunge (CamelFolder *folder, CamelException *ex) { CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); - gchar *node, *result; - gint i, status, recent = -1; - - g_return_if_fail (folder != NULL); + gchar *result; + gint status; imap_sync (folder, FALSE, ex); status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder, &result, ex, "EXPUNGE"); - - if (status != CAMEL_IMAP_OK) - return; - - /* determine which messages were successfully expunged */ - node = result; - for (i = 0; node; i++) { - char *word; - - if (*node != '*') - break; - - word = imap_next_word (node); - - if (!strncmp (word, "NO", 2)) { - /* Something failed, probably a Read-Only mailbox? */ - CamelService *service = CAMEL_SERVICE (folder->parent_store); - char *reason, *ep; - - word = imap_next_word (word); - for (ep = word; *ep && *ep != '\n'; ep++); - reason = g_strndup (word, (gint)(ep - word)); - - camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, - "Could not EXPUNGE from IMAP server %s: %s.", - service->url->host, reason ? reason : - "Unknown error"); - - g_free (reason); - break; - } - - /* else we have a message id? */ - if (*word >= '0' && *word <= '9' && !strncmp ("EXPUNGE", imap_next_word (word), 7)) { - int id; - - id = atoi (word); - - d(fprintf (stderr, "Expunging message %d from the summary (i = %d)\n", id + i, i)); - - if (id <= imap_folder->summary->len) { - CamelMessageInfo *info; - - info = (CamelMessageInfo *) imap_folder->summary->pdata[id - 1]; - - /* remove from the lookup table and summary */ - g_hash_table_remove (imap_folder->summary_hash, info->uid); - g_ptr_array_remove_index (imap_folder->summary, id - 1); - - /* free the info data */ - g_free (info->subject); - g_free (info->from); - g_free (info->to); - g_free (info->cc); - g_free (info->uid); - g_free (info->message_id); - header_references_list_clear (&info->references); - g_free (info); - info = NULL; - } else { - /* Hopefully this should never happen */ - d(fprintf (stderr, "imap expunge-error: message %d is out of range\n", id)); - } - } else if (*word >= '0' && *word <= '9' && !strncmp ("RECENT", imap_next_word (word), 6)) { - recent = atoi (word); - if (!recent) - recent = -1; - } - - for ( ; *node && *node != '\n'; node++); - if (*node) - node++; - } - g_free (result); - - camel_imap_folder_changed (folder, recent, NULL, ex); } static gint |