Implemented. (imap_sync): Added code to set flags on messages that have
authorJeffrey Stedfast <fejj@helixcode.com>
Tue, 20 Jun 2000 22:07:48 +0000 (22:07 +0000)
committerJeffrey Stedfast <fejj@src.gnome.org>
Tue, 20 Jun 2000 22:07:48 +0000 (22:07 +0000)
2000-06-20  Jeffrey Stedfast  <fejj@helixcode.com>

* providers/imap/camel-imap-folder.c (imap_set_message_flags):
Implemented.
(imap_sync): Added code to set flags on messages that have had
their flags changed (however I #if'd it out until we are more
confidant in the IMAP code :)

camel/ChangeLog
camel/providers/imap/camel-imap-folder.c

index baed02d..c078eb8 100644 (file)
@@ -6,6 +6,10 @@
        (imap_free_summary): Don't do anything here.
        (imap_finalize): Free the summary here instead of in
        imap_free_summary().
+       (imap_set_message_flags): Implemented
+       (imap_sync): Added code to set flags on messages that have had
+       their flags changed (however I #if'd it out until we are more
+       confidant in the IMAP code :)
 
        * camel-url.c (check_equal): No need to check s1 if s2 is NULL
        (camel_url_equal): Don't check the passwd component of the url.
index fd005f8..0323ecb 100644 (file)
@@ -135,7 +135,7 @@ camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class)
 
        camel_folder_class->get_permanent_flags = imap_get_permanent_flags;
        camel_folder_class->get_message_flags = imap_get_message_flags;
-       /*camel_folder_class->set_message_flags = imap_set_message_flags;*/
+       camel_folder_class->set_message_flags = imap_set_message_flags;
        /*camel_folder_class->get_message_user_flags = imap_get_message_user_flags;*/
        /*camel_folder_class->set_message_user_flags = imap_set_message_user_flags;*/
 
@@ -312,6 +312,55 @@ static void
 imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 {
        /* TODO: actually code this method */
+       CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
+       gint i, max;
+
+#if 0
+       /* uhhh...this is kinda unsafe so we'll leave it blocked out */
+       if (imap_folder->summary) {
+               max = imap_folder->summary->len;
+               for (i = 0; i < max; i++) {
+                       CamelMessageInfo *info;
+
+                       info = (CamelMessageInfo *) g_ptr_array_index (imap_folder->summary, i);
+                       if (info->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) {
+                               char *flags;
+                               
+                               flags = g_strconcat (info->flags & CAMEL_MESSAGE_SEEN ? "\\Seen " : "",
+                                                    info->flags & CAMEL_MESSAGE_DRAFT ? "\\Draft " : "",
+                                                    info->flags & CAMEL_MESSAGE_DELETED ? "\\Deleted " : "",
+                                                    info->flags & CAMEL_MESSAGE_DELETED ? "\\Answered " : "",
+                                                    NULL);
+                               if (*flags) {
+                                       gchar *result;
+                                       gint s;
+                                       
+                                       *(flags + strlen (flags) - 1) = '\0';
+                                       s = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store),
+                                                                        folder, &result,
+                                                                        "UID STORE %s FLAGS.SILENT (%s)",
+                                                                        info->uid, flags);
+                                       
+                                       if (s != CAMEL_IMAP_OK) {
+                                               CamelService *service = CAMEL_SERVICE (folder->parent_store);
+                                               camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+                                                                     "Could not set flags on message %s on IMAP "
+                                                                     "server %s: %s.", info->uid,
+                                                                     service->url->host,
+                                                                     status == CAMEL_IMAP_ERR ? result :
+                                                                     "Unknown error");
+                                               g_free (result);
+                                               return;
+                                       }
+                                       
+                                       g_free(result);
+                               }
+                               g_free (flags);
+                       }
+               }
+       }
+#endif
+       
        if (expunge)
                imap_expunge (folder, ex);
 }
@@ -520,7 +569,6 @@ imap_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelExcept
 static GPtrArray *
 imap_get_uids (CamelFolder *folder, CamelException *ex) 
 {
-       CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
        CamelMessageInfo *info;
        GPtrArray *array, *infolist;
        gint i, count;
@@ -1090,7 +1138,18 @@ imap_get_message_flags (CamelFolder *folder, const char *uid, CamelException *ex
 static void
 imap_set_message_flags (CamelFolder *folder, const char *uid, guint32 flags, guint32 set, CamelException *ex)
 {
-       return;
+       CamelMessageInfo *info;
+
+       if (!(info = (CamelMessageInfo *)imap_summary_get_by_uid (folder, uid))) {
+               CamelService *service = CAMEL_SERVICE (folder->parent_store);
+               
+               camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+                                     "Could not set flags for message %s on IMAP server %s: %s",
+                                     uid, service->url->host, "Unknown error");
+               return;
+       }
+
+       info->flags = (info->flags & ~flags) | (set & flags) | CAMEL_MESSAGE_FOLDER_FLAGGED;
 }
 
 static gboolean