remove message_number_capability and require uid capatibility.
authorDan Winship <danw@src.gnome.org>
Fri, 19 May 2000 00:47:36 +0000 (00:47 +0000)
committerDan Winship <danw@src.gnome.org>
Fri, 19 May 2000 00:47:36 +0000 (00:47 +0000)
* camel-folder.c: remove message_number_capability and require uid
capatibility.
(camel_folder_list_subfolders, camel_folder_get_uid_list,
camel_folder_get_subfolder_info, camel_folder_get_message_info):
removed
(camel_folder_get_subfolder_names,
camel_folder_free_subfolder_names): new subfolder interfaces.
(camel_folder_get_uids, camel_folder_free_uids): new uid
interfaces
(camel_folder_get_summary, camel_folder_free_summary): new summary
interfaces

* providers/mbox/camel-mbox-folder.c,
* providers/nntp/camel-nntp-folder.c:
* providers/vee/camel-vee-folder.c: Update for changes

* providers/pop3/camel-pop3-folder.c: Implement get_uids, update
for other changes.

camel/ChangeLog
camel/camel-folder.c
camel/camel-folder.h
camel/providers/mbox/camel-mbox-folder.c
camel/providers/nntp/camel-nntp-folder.c
camel/providers/pop3/camel-pop3-folder.c
camel/providers/pop3/camel-pop3-folder.h
camel/providers/vee/camel-vee-folder.c

index 1b7d573..a2a09c9 100644 (file)
@@ -1,3 +1,24 @@
+2000-05-18  Dan Winship  <danw@helixcode.com>
+
+       * camel-folder.c: remove message_number_capability and require uid
+       capatibility.
+       (camel_folder_list_subfolders, camel_folder_get_uid_list,
+       camel_folder_get_subfolder_info, camel_folder_get_message_info):
+       removed
+       (camel_folder_get_subfolder_names,
+       camel_folder_free_subfolder_names): new subfolder interfaces.
+       (camel_folder_get_uids, camel_folder_free_uids): new uid
+       interfaces
+       (camel_folder_get_summary, camel_folder_free_summary): new summary
+       interfaces
+
+       * providers/mbox/camel-mbox-folder.c,
+       * providers/nntp/camel-nntp-folder.c:
+       * providers/vee/camel-vee-folder.c: Update for changes
+
+       * providers/pop3/camel-pop3-folder.c: Implement get_uids, update
+       for other changes.
+
 2000-05-18  NotZed  <NotZed@HelixCode.com>
 
        * providers/vee/camel-vee-folder.c: Guess!
index e7d5187..2c6e04d 100644 (file)
@@ -73,7 +73,7 @@ static gboolean delete (CamelFolder *folder, gboolean recurse,
                        CamelException *ex);
 
 
-static GList *list_subfolders         (CamelFolder *folder,
+static GPtrArray *get_subfolder_names (CamelFolder *folder,
                                       CamelException *ex);
 static CamelFolder *get_subfolder     (CamelFolder *folder,
                                       const gchar *folder_name,
@@ -84,15 +84,7 @@ static CamelStore *get_parent_store   (CamelFolder *folder,
                                       CamelException *ex);
 
 
-static gboolean has_message_number_capability  (CamelFolder *folder);
-static CamelMimeMessage *get_message_by_number (CamelFolder *folder,
-                                               gint number,
-                                               CamelException *ex);
-static void delete_message_by_number           (CamelFolder *folder,
-                                               gint number,
-                                               CamelException *ex);
-static gint get_message_count                  (CamelFolder *folder,
-                                               CamelException *ex);
+static gint get_message_count (CamelFolder *folder, CamelException *ex);
 
 
 static gboolean delete_messages (CamelFolder *folder,
@@ -105,8 +97,14 @@ static void append_message (CamelFolder *folder, CamelMimeMessage *message,
                            CamelException *ex);
 
 
-static GList            *get_uid_list        (CamelFolder *folder,
+static GPtrArray        *get_uids            (CamelFolder *folder,
                                              CamelException *ex);
+static void              free_uids           (CamelFolder *folder,
+                                             GPtrArray *array);
+static GPtrArray        *get_summary         (CamelFolder *folder,
+                                             CamelException *ex);
+static void              free_summary        (CamelFolder *folder,
+                                             GPtrArray *array);
 static const gchar      *get_message_uid     (CamelFolder *folder,
                                              CamelMimeMessage *message,
                                              CamelException *ex);
@@ -117,11 +115,6 @@ static void delete_message_by_uid            (CamelFolder *folder,
                                              const gchar *uid,
                                              CamelException *ex);
 
-static GPtrArray *get_message_info   (CamelFolder *folder,
-                                     int first, int count);
-static GPtrArray *get_subfolder_info (CamelFolder *folder,
-                                     int first, int count);
-
 static const CamelMessageInfo *summary_get_by_uid (CamelFolder *folder,
                                                   const char *uid);
 
@@ -153,23 +146,20 @@ camel_folder_class_init (CamelFolderClass *camel_folder_class)
        camel_folder_class->get_parent_folder = get_parent_folder;
        camel_folder_class->get_parent_store = get_parent_store;
        camel_folder_class->get_mode = get_mode;
-       camel_folder_class->list_subfolders = list_subfolders;
+       camel_folder_class->get_subfolder_names = get_subfolder_names;
+       camel_folder_class->free_subfolder_names = free_uids;
        camel_folder_class->expunge = expunge;
-       camel_folder_class->has_message_number_capability =
-               has_message_number_capability;
-       camel_folder_class->get_message_by_number = get_message_by_number;
-       camel_folder_class->delete_message_by_number =
-               delete_message_by_number;
        camel_folder_class->get_message_count = get_message_count;
        camel_folder_class->append_message = append_message;
        camel_folder_class->get_permanent_flags = get_permanent_flags;
        camel_folder_class->get_message_uid = get_message_uid;
        camel_folder_class->get_message_by_uid = get_message_by_uid;
        camel_folder_class->delete_message_by_uid = delete_message_by_uid;
-       camel_folder_class->get_uid_list = get_uid_list;
+       camel_folder_class->get_uids = get_uids;
+       camel_folder_class->free_uids = free_uids;
+       camel_folder_class->get_summary = get_summary;
+       camel_folder_class->free_summary = free_summary;
        camel_folder_class->search_by_expression = search_by_expression;
-       camel_folder_class->get_subfolder_info = get_subfolder_info;
-       camel_folder_class->get_message_info = get_message_info;
        camel_folder_class->summary_get_by_uid = summary_get_by_uid;
 
        /* virtual method overload */
@@ -603,28 +593,30 @@ camel_folder_create (CamelFolder *folder, CamelException *ex)
 static gboolean
 delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
 {
-       GList *subfolders=NULL;
-       GList *sf;
+       GPtrArray *subfolders;
+       int i;
        gboolean ok;
 
        /* delete all messages in the folder */
        CF_CLASS (folder)->delete_messages (folder, ex);
-       if (camel_exception_get_id (ex)) return FALSE;
+       if (camel_exception_get_id (ex))
+               return FALSE;
 
-       subfolders = CF_CLASS (folder)->list_subfolders (folder, ex);
-       if (camel_exception_get_id (ex)) {
-               if (subfolders) g_list_free (subfolders);
+       subfolders = camel_folder_get_subfolder_names (folder, ex);
+       if (camel_exception_get_id (ex))
                return FALSE;
-       }
 
         ok = TRUE;
        if (recurse) { /* delete subfolders */
                if (subfolders) {
-                       sf = subfolders;
-                       do {
-                               CF_CLASS (sf->data)->delete (CAMEL_FOLDER (sf->data), TRUE, ex);
-                               if (camel_exception_get_id (ex)) ok = FALSE;
-                       } while (ok && (sf = sf->next));
+                       for (i = 0; ok && i < subfolders->len; i++) {
+                               CamelFolder *sf;
+
+                               sf = camel_folder_get_subfolder (folder, subfolders->pdata[i], ex);
+                               camel_folder_delete (sf, TRUE, ex);
+                               if (camel_exception_get_id (ex))
+                                       ok = FALSE;
+                       }
                }
        } else if (subfolders) {
                camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
@@ -632,7 +624,8 @@ delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
                ok = FALSE;
        }
 
-       if (subfolders) g_list_free (subfolders);
+       if (subfolders)
+               camel_folder_free_subfolder_names (folder, subfolders);
 
        return ok;
 }
@@ -753,144 +746,72 @@ camel_folder_get_mode (CamelFolder *folder, CamelException *ex)
 }
 
 
-static GList *
-list_subfolders (CamelFolder *folder, CamelException *ex)
+static GPtrArray *
+get_subfolder_names (CamelFolder *folder, CamelException *ex)
 {
-       g_warning ("CamelFolder::list_folders not implemented for `%s'",
+       g_warning ("CamelFolder::get_subfolder_names not implemented for `%s'",
                   gtk_type_name (GTK_OBJECT_TYPE (folder)));
        return NULL;
 }
 
 /**
- * camel_folder_list_subfolders:
+ * camel_folder_get_subfolder_names:
  * @folder: the folder
  * @ex: a CamelException
  *
- * List subfolders in a folder.
- *
- * Return value: list of subfolder names
+ * Return value: an array containing the names of the folder's
+ * subfolders. The array should not be modified and must be freed with
+ * camel_folder_free_subfolder_names().
  **/
-GList *
-camel_folder_list_subfolders (CamelFolder *folder, CamelException *ex)
+GPtrArray *
+camel_folder_get_subfolder_names (CamelFolder *folder, CamelException *ex)
 {
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
        g_return_val_if_fail (camel_folder_is_open (folder), NULL);
 
-       return CF_CLASS (folder)->list_subfolders (folder, ex);
-}
-
-
-static void
-expunge (CamelFolder *folder, CamelException *ex)
-{
-       g_warning ("CamelFolder::expunge not implemented for `%s'",
-                  gtk_type_name (GTK_OBJECT_TYPE (folder)));
+       return CF_CLASS (folder)->get_subfolder_names (folder, ex);
 }
 
 
 /**
- * camel_folder_expunge:
- * @folder: the folder
- * @ex: a CamelException
+ * camel_folder_free_subfolder_names:
+ * @folder: folder object
+ * @array: the array of subfolder names to free
  *
- * Delete messages which have been marked as "DELETED"
+ * Frees the array of names returned by camel_folder_get_subfolder_names().
  **/
 void
-camel_folder_expunge (CamelFolder *folder, CamelException *ex)
+camel_folder_free_subfolder_names (CamelFolder *folder, GPtrArray *array)
 {
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
        g_return_if_fail (camel_folder_is_open (folder));
 
-       return CF_CLASS (folder)->expunge (folder, ex);
+       CF_CLASS (folder)->free_subfolder_names (folder, array);
 }
 
 
-static gboolean
-has_message_number_capability (CamelFolder *folder)
+static void
+expunge (CamelFolder *folder, CamelException *ex)
 {
-       g_warning ("CamelFolder::has_message_number_capability not "
-                  "implemented for `%s'",
+       g_warning ("CamelFolder::expunge not implemented for `%s'",
                   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-       return FALSE;
-}
-
-/**
- * camel_folder_has_message_number_capability:
- * @folder: folder to test
- *
- * Test if the message in this folder can be obtained via the
- * get_by_number method. Usually, when the folder has the UID
- * capability, messages should be referred to by their UID rather than
- * by their number as the UID is more reliable.
- *
- * Return value: whether or not the folder supports message numbers
- **/
-gboolean
-camel_folder_has_message_number_capability (CamelFolder *folder)
-{
-       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
-       return CF_CLASS (folder)->has_message_number_capability (folder);
-}
-
-
-static CamelMimeMessage *
-get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-       g_warning ("CamelFolder::get_message_by_number not implemented "
-                  "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-       return NULL;
 }
 
-/**
- * camel_folder_get_message_by_number:
- * @folder: a CamelFolder object
- * @number: the number of the message within the folder.
- * @ex: a CamelException
- *
- * Return the message corresponding to that number within the folder.
- *
- * Return value: A pointer on the corresponding message, or %NULL if
- * no corresponding message exists
- **/
-CamelMimeMessage *
-camel_folder_get_message_by_number (CamelFolder *folder, gint number,
-                                   CamelException *ex)
-{
-       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-       g_return_val_if_fail (camel_folder_is_open (folder), NULL);
-       g_return_val_if_fail (camel_folder_has_message_number_capability (folder), NULL);
-
-       return CF_CLASS (folder)->get_message_by_number (folder, number, ex);
-}
-
-
-static void
-delete_message_by_number (CamelFolder *folder, gint number,
-                         CamelException *ex)
-{
-       g_warning ("CamelFolder::delete_message_by_number not implemented "
-                  "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-}
 
 /**
- * camel_folder_delete_message_by_number:
- * @folder: a CamelFolder object
- * @number: the number of the message within the folder.
+ * camel_folder_expunge:
+ * @folder: the folder
  * @ex: a CamelException
  *
- * Delete the message corresponding to that number within the folder.
+ * Delete messages which have been marked as "DELETED"
  **/
 void
-camel_folder_delete_message_by_number (CamelFolder *folder, gint number,
-                                      CamelException *ex)
+camel_folder_expunge (CamelFolder *folder, CamelException *ex)
 {
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
        g_return_if_fail (camel_folder_is_open (folder));
-       g_return_if_fail (camel_folder_has_message_number_capability (folder));
 
-       return CF_CLASS (folder)->delete_message_by_number (folder, number,
-                                                           ex);
+       return CF_CLASS (folder)->expunge (folder, ex);
 }
 
 
@@ -964,66 +885,6 @@ camel_folder_get_permanent_flags (CamelFolder *folder, CamelException *ex)
 }
 
 
-static GPtrArray *
-get_subfolder_info (CamelFolder *folder, int first, int count)
-{
-       g_warning ("CamelFolder::get_subfolder_info not implemented for `%s'",
-                  gtk_type_name (GTK_OBJECT_TYPE (folder)));
-       return NULL;
-}
-
-/**
- * camel_folder_summary_get_subfolder_info:
- * @summary: a summary
- * @first: the index of the first subfolder to return information for
- * (starting from 0)
- * @count: the number of subfolders to return information for
- *
- * Returns an array of pointers to CamelFolderInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the subfolders.
- **/
-GPtrArray *
-camel_folder_summary_get_subfolder_info (CamelFolder *folder,
-                                        int first, int count)
-{
-       g_assert (folder != NULL);
-       return CF_CLASS (folder)->get_subfolder_info (folder, first, count);
-}
-
-
-static GPtrArray *
-get_message_info (CamelFolder *folder, int first, int count)
-{
-       g_warning ("CamelFolder::get_message_info not implemented for `%s'",
-                  gtk_type_name (GTK_OBJECT_TYPE (folder)));
-       return NULL;
-}
-
-/**
- * camel_folder_summary_get_message_info:
- * @folder: a camel folder
- * @first: the index of the first message to return information for
- * (starting from 0)
- * @count: the number of messages to return information for
- *
- * Returns an array of pointers to CamelMessageInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the messages.
- **/
-GPtrArray *
-camel_folder_summary_get_message_info (CamelFolder *folder,
-                                      int first, int count)
-{
-       g_assert (folder != NULL);
-       return CF_CLASS (folder)->get_message_info (folder, first, count);
-}
-
-
 static const CamelMessageInfo *
 summary_get_by_uid (CamelFolder *folder, const char *uid)
 {
@@ -1061,24 +922,6 @@ camel_folder_has_summary_capability (CamelFolder *folder)
 
 /* UIDs stuff */
 
-/**
- * camel_folder_has_uid_capability: detect if the folder support UIDs
- * @folder: Folder object
- *
- * Detects if a folder supports UID operations, that is reference
- * messages by a Unique IDentifier instead of by message number.
- *
- * Return value: %TRUE if the folder supports UIDs
- **/
-gboolean
-camel_folder_has_uid_capability (CamelFolder *folder)
-{
-       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
-       return folder->has_uid_capability;
-}
-
-
 static const gchar *
 get_message_uid (CamelFolder *folder, CamelMimeMessage *message,
                 CamelException *ex)
@@ -1107,7 +950,6 @@ camel_folder_get_message_uid (CamelFolder *folder, CamelMimeMessage *message,
 {
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
        g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
-       g_return_val_if_fail (folder->has_uid_capability, NULL);
        g_return_val_if_fail (camel_folder_is_open (folder), NULL);
 
        return CF_CLASS (folder)->get_message_uid (folder, message, ex);
@@ -1139,7 +981,6 @@ camel_folder_get_message_by_uid (CamelFolder *folder, const gchar *uid,
                                 CamelException *ex)
 {
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-       g_return_val_if_fail (folder->has_uid_capability, NULL);
        g_return_val_if_fail (camel_folder_is_open (folder), NULL);
 
        return CF_CLASS (folder)->get_message_by_uid (folder, uid, ex);
@@ -1167,44 +1008,127 @@ camel_folder_delete_message_by_uid (CamelFolder *folder, const gchar *uid,
                                    CamelException *ex)
 {
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
-       g_return_if_fail (folder->has_uid_capability);
        g_return_if_fail (camel_folder_is_open (folder));
 
        return CF_CLASS (folder)->delete_message_by_uid (folder, uid, ex);
 }
 
 
-static GList *
-get_uid_list (CamelFolder *folder, CamelException *ex)
+static GPtrArray *
+get_uids (CamelFolder *folder, CamelException *ex)
 {
-       g_warning ("CamelFolder::get_uid_list not implemented for `%s'",
+       g_warning ("CamelFolder::get_uids not implemented for `%s'",
                   gtk_type_name (GTK_OBJECT_TYPE (folder)));
        return NULL;
 }
 
 /**
- * camel_folder_get_uid_list:
+ * camel_folder_get_uids:
  * @folder: folder object
  * @ex: a CamelException
  *
  * Get the list of UIDs available in a folder. This routine is useful
  * for finding what messages are available when the folder does not
- * support summaries. The UIDs in the list must not be freed, the
- * folder object caches them.
+ * support summaries. The returned array shoudl not be modified, and
+ * must be freed by passing it to camel_folder_free_uids().
+ *
+ * Return value: GPtrArray of UIDs corresponding to the messages
+ * available in the folder.
+ **/
+GPtrArray *
+camel_folder_get_uids (CamelFolder *folder, CamelException *ex)
+{
+       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
+       g_return_val_if_fail (camel_folder_is_open (folder), NULL);
+
+       return CF_CLASS (folder)->get_uids (folder, ex);
+}
+
+
+/* This is also the default implementation of free_subfolder_names. */
+static void
+free_uids (CamelFolder *folder, GPtrArray *array)
+{
+       int i;
+
+       /* Default implementation: free all of the strings and
+        * the array itself.
+        */
+       for (i = 0; i < array->len; i++)
+               g_free (array->pdata[i]);
+       g_ptr_array_free (array, TRUE);
+}
+
+/**
+ * camel_folder_free_uids:
+ * @folder: folder object
+ * @array: the array of uids to free
+ *
+ * Frees the array of UIDs returned by camel_folder_get_uids().
+ **/
+void
+camel_folder_free_uids (CamelFolder *folder, GPtrArray *array)
+{
+       g_return_if_fail (CAMEL_IS_FOLDER (folder));
+       g_return_if_fail (camel_folder_is_open (folder));
+
+       CF_CLASS (folder)->free_uids (folder, array);
+}
+
+
+static GPtrArray *
+get_summary (CamelFolder *folder, CamelException *ex)
+{
+       g_warning ("CamelFolder::get_summary not implemented for `%s'",
+                  gtk_type_name (GTK_OBJECT_TYPE (folder)));
+       return NULL;
+}
+
+/**
+ * camel_folder_get_summary:
+ * @folder: a folder object
+ * @ex: a CamelException
+ *
+ * This returns the summary information for the folder. This array
+ * should not be modified, and must be freed with
+ * camel_folder_free_summary().
  *
- * Return value: GList of UIDs corresponding to the messages available
- * in the folder.
+ * Return value: an array of CamelMessageInfo
  **/
-GList *
-camel_folder_get_uid_list (CamelFolder *folder, CamelException *ex)
+GPtrArray *
+camel_folder_get_summary (CamelFolder *folder, CamelException *ex)
 {
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-       g_return_val_if_fail (folder->has_uid_capability, NULL);
        g_return_val_if_fail (camel_folder_is_open (folder), NULL);
 
-       return CF_CLASS (folder)->get_uid_list (folder, ex);
+       return CF_CLASS (folder)->get_summary (folder, ex);
 }
 
+
+static void
+free_summary (CamelFolder *folder, GPtrArray *array)
+{
+       g_warning ("CamelFolder::free_summary not implemented for `%s'",
+                  gtk_type_name (GTK_OBJECT_TYPE (folder)));
+}
+
+/**
+ * camel_folder_free_summary:
+ * @folder: folder object
+ * @array: the summary array to free
+ *
+ * Frees the summary array returned by camel_folder_get_summary().
+ **/
+void
+camel_folder_free_summary (CamelFolder *folder, GPtrArray *array)
+{
+       g_return_if_fail (CAMEL_IS_FOLDER (folder));
+       g_return_if_fail (camel_folder_is_open (folder));
+
+       CF_CLASS (folder)->free_summary (folder, array);
+}
+
+
 /**
  * camel_folder_has_search_capability:
  * @folder: Folder object
index 1bd617a..c90802c 100644 (file)
@@ -1,9 +1,8 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelFolder.h : Abstract class for an email folder */
+/* camel-folder.h: Abstract class for an email folder */
 
 /* 
- *
- * Author : 
+ * Author: 
  *  Bertrand Guiheneuf <bertrand@helixcode.com>
  *
  * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
@@ -70,7 +69,6 @@ struct _CamelFolder
        gboolean can_hold_folders:1;
        gboolean can_hold_messages:1;
        gboolean has_summary_capability:1;
-       gboolean has_uid_capability:1;
        gboolean has_search_capability:1;
 };
 
@@ -129,22 +127,9 @@ typedef struct {
        CamelFolderOpenMode (*get_mode)   (CamelFolder *folder, 
                                           CamelException *ex);
 
-       GList *  (*list_subfolders)   (CamelFolder *folder, 
-                                      CamelException *ex);
-
        void (*expunge)  (CamelFolder *folder, 
                          CamelException *ex);
 
-       gboolean (*has_message_number_capability) (CamelFolder *folder);
-
-       CamelMimeMessage * (*get_message_by_number) (CamelFolder *folder, 
-                                                    gint number, 
-                                                    CamelException *ex);
-       
-       void (*delete_message_by_number) (CamelFolder *folder, 
-                                         gint number, 
-                                         CamelException *ex);
-       
        gint   (*get_message_count)   (CamelFolder *folder, 
                                       CamelException *ex);
 
@@ -155,8 +140,6 @@ typedef struct {
        guint32 (*get_permanent_flags) (CamelFolder *folder,
                                        CamelException *ex);
 
-       gboolean (*has_uid_capability) (CamelFolder *folder);
-
        const gchar * (*get_message_uid)  (CamelFolder *folder, 
                                           CamelMimeMessage *message, 
                                           CamelException *ex);
@@ -169,17 +152,25 @@ typedef struct {
                                        const gchar *uid, 
                                        CamelException *ex);
 
-       GList * (*get_uid_list)  (CamelFolder *folder, 
-                                 CamelException *ex);
+       GPtrArray * (*get_uids)       (CamelFolder *folder,
+                                      CamelException *ex);
+       void (*free_uids)             (CamelFolder *folder,
+                                      GPtrArray *array);
+
+       GPtrArray * (*get_summary)    (CamelFolder *folder,
+                                      CamelException *ex);
+       void (*free_summary)          (CamelFolder *folder,
+                                      GPtrArray *summary);
+
+       GPtrArray * (*get_subfolder_names) (CamelFolder *folder,
+                                           CamelException *ex);
+       void (*free_subfolder_names)       (CamelFolder *folder,
+                                           GPtrArray *subfolders);
 
        gboolean (*has_search_capability) (CamelFolder *folder);
 
        GList * (*search_by_expression) (CamelFolder *folder, const char *expression, CamelException *ex);
 
-       /* moved the old summary stuff from camel-folder-summary.h here */
-       GPtrArray * (*get_subfolder_info) (CamelFolder *, int first, int count);
-       GPtrArray * (*get_message_info) (CamelFolder *, int first, int count);
-
        const CamelMessageInfo * (*summary_get_by_uid) (CamelFolder *, const char *uid);
 } CamelFolderClass;
 
@@ -253,20 +244,21 @@ void               camel_folder_append_message         (CamelFolder *folder,
 gboolean           camel_folder_has_summary_capability (CamelFolder *folder);
 
 
-/* number based access operations */
-gboolean           camel_folder_has_message_number_capability (CamelFolder *folder);
-CamelMimeMessage * camel_folder_get_message_by_number (CamelFolder *folder, 
-                                                      gint number, 
-                                                      CamelException *ex);
-void               camel_folder_delete_message_by_number (CamelFolder *folder, 
-                                                         gint number, 
-                                                         CamelException *ex);
 gint               camel_folder_get_message_count     (CamelFolder *folder, 
                                                       CamelException *ex);
 
+GPtrArray *        camel_folder_get_summary           (CamelFolder *folder, 
+                                                      CamelException *ex);
+void               camel_folder_free_summary          (CamelFolder *folder,
+                                                      GPtrArray *array);
+
+GPtrArray *        camel_folder_get_subfolder_names   (CamelFolder *folder, 
+                                                      CamelException *ex);
+void               camel_folder_free_subfolder_names  (CamelFolder *folder,
+                                                      GPtrArray *array);
+
 
 /* uid based access operations */
-gboolean           camel_folder_has_uid_capability    (CamelFolder *folder);
 const gchar *      camel_folder_get_message_uid       (CamelFolder *folder, 
                                                       CamelMimeMessage *message, 
                                                       CamelException *ex);
@@ -276,19 +268,16 @@ CamelMimeMessage * camel_folder_get_message_by_uid    (CamelFolder *folder,
 void               camel_folder_delete_message_by_uid (CamelFolder *folder, 
                                                       const gchar *uid, 
                                                       CamelException *ex);
-GList *            camel_folder_get_uid_list          (CamelFolder *folder, 
+GPtrArray *        camel_folder_get_uids              (CamelFolder *folder, 
                                                       CamelException *ex);
+void               camel_folder_free_uids             (CamelFolder *folder,
+                                                      GPtrArray *array);
 
 /* search api */
 gboolean           camel_folder_has_search_capability (CamelFolder *folder);
 GList *                   camel_folder_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex);
 
-/* summary info, from the old camel-folder-summary
-   FIXME: rename these slightly? */
-GPtrArray *camel_folder_summary_get_subfolder_info (CamelFolder *summary,
-                                                   int first, int count);
-GPtrArray *camel_folder_summary_get_message_info (CamelFolder *summary,
-                                                 int first, int count);
+/* summary info. FIXME: rename this slightly? */
 const CamelMessageInfo *camel_folder_summary_get_by_uid (CamelFolder *summary,
                                                         const char *uid);
 
index a67d2ee..707fea1 100644 (file)
@@ -66,11 +66,12 @@ static gboolean mbox_exists (CamelFolder *folder, CamelException *ex);
 static gboolean mbox_create(CamelFolder *folder, CamelException *ex);
 static gboolean mbox_delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
 static gboolean mbox_delete_messages (CamelFolder *folder, CamelException *ex);
-static GList *mbox_list_subfolders (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *mbox_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex);
 static gint mbox_get_message_count (CamelFolder *folder, CamelException *ex);
 static void mbox_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static GList *mbox_get_uid_list  (CamelFolder *folder, CamelException *ex);
+static GPtrArray *mbox_get_uids (CamelFolder *folder, CamelException *ex);
+static GPtrArray *mbox_get_subfolder_names (CamelFolder *folder, CamelException *ex);
+static GPtrArray *mbox_get_summary (CamelFolder *folder, CamelException *ex);
+static void mbox_free_summary (CamelFolder *folder, GPtrArray *array);
 static CamelMimeMessage *mbox_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
 static void mbox_expunge (CamelFolder *folder, CamelException *ex);
@@ -81,7 +82,6 @@ static const gchar *_get_message_uid (CamelFolder *folder, CamelMimeMessage *mes
 
 static void mbox_delete_message_by_uid(CamelFolder *folder, const gchar *uid, CamelException *ex);
 
-GPtrArray *summary_get_message_info (CamelFolder *folder, int first, int count);
 static const CamelMessageInfo *mbox_summary_get_by_uid(CamelFolder *f, const char *uid);
 
 static GList *mbox_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex);
@@ -106,11 +106,12 @@ camel_mbox_folder_class_init (CamelMboxFolderClass *camel_mbox_folder_class)
        camel_folder_class->create = mbox_create;
        camel_folder_class->delete = mbox_delete;
        camel_folder_class->delete_messages = mbox_delete_messages;
-       camel_folder_class->list_subfolders = mbox_list_subfolders;
-       camel_folder_class->get_message_by_number = mbox_get_message_by_number;
        camel_folder_class->get_message_count = mbox_get_message_count;
        camel_folder_class->append_message = mbox_append_message;
-       camel_folder_class->get_uid_list = mbox_get_uid_list;
+       camel_folder_class->get_uids = mbox_get_uids;
+       camel_folder_class->get_subfolder_names = mbox_get_subfolder_names;
+       camel_folder_class->get_summary = mbox_get_summary;
+       camel_folder_class->free_summary = mbox_free_summary;
        camel_folder_class->expunge = mbox_expunge;
 
        camel_folder_class->get_message_by_uid = mbox_get_message_by_uid;
@@ -118,7 +119,6 @@ camel_mbox_folder_class_init (CamelMboxFolderClass *camel_mbox_folder_class)
 
        camel_folder_class->search_by_expression = mbox_search_by_expression;
 
-       camel_folder_class->get_message_info = summary_get_message_info;
        camel_folder_class->summary_get_by_uid = mbox_summary_get_by_uid;
 
        gtk_object_class->finalize = mbox_finalize;
@@ -179,7 +179,6 @@ mbox_init (CamelFolder *folder, CamelStore *parent_store,
        folder->can_hold_messages = TRUE;
        folder->can_hold_folders = TRUE;
        folder->has_summary_capability = TRUE;
-       folder->has_uid_capability = TRUE;
        folder->has_search_capability = TRUE;
 
        folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
@@ -577,125 +576,6 @@ mbox_delete_messages (CamelFolder *folder, CamelException *ex)
 
 }
 
-/* FIXME: cleanup */
-static GList *
-mbox_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-       GList *subfolder_name_list = NULL;
-
-       CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-       const gchar *folder_dir_path;
-       gboolean folder_exists;
-
-       struct stat stat_buf;
-       gint stat_error = 0;
-       gchar *entry_name;
-       gchar *full_entry_name;
-       gchar *real_folder_name;
-       struct dirent *dir_entry;
-       DIR *dir_handle;
-       gboolean folder_suffix_found;
-       
-
-       /* check if the folder object exists */
-       if (!folder) {
-               camel_exception_set (ex, 
-                                    CAMEL_EXCEPTION_FOLDER_NULL,
-                                    "folder object is NULL");
-               return FALSE;
-       }
-
-
-       /* in the case the folder does not exist, 
-          raise an exception */
-       folder_exists = camel_folder_exists (folder, ex);
-       if (camel_exception_get_id (ex)) return FALSE;
-
-       if (!folder_exists) {
-               camel_exception_set (ex, 
-                                    CAMEL_EXCEPTION_FOLDER_INVALID,
-                                    "Inexistant folder.");
-               return FALSE;
-       }
-
-
-       /* get the mbox subfolders directories */
-       folder_dir_path = mbox_folder->folder_file_path;
-       if (!folder_dir_path) {
-               camel_exception_set (ex, 
-                                    CAMEL_EXCEPTION_FOLDER_INVALID,
-                                    "Invalid folder path. Use set_name ?");
-               return FALSE;
-       }
-
-               
-       dir_handle = opendir (folder_dir_path);
-       
-       /* read the first entry in the directory */
-       dir_entry = readdir (dir_handle);
-       while ((stat_error != -1) && (dir_entry != NULL)) {
-
-               /* get the name of the next entry in the dir */
-               entry_name = dir_entry->d_name;
-               full_entry_name = g_strdup_printf ("%s/%s", folder_dir_path, entry_name);
-               stat_error = stat (full_entry_name, &stat_buf);
-               g_free (full_entry_name);
-
-               /* is it a directory ? */
-               if ((stat_error != -1) && S_ISDIR (stat_buf.st_mode)) {
-                       /* yes, add it to the list */
-                       if (entry_name[0] != '.') {
-                               /* if the folder is a netscape folder, remove the  
-                                  ".sdb" from the name */
-                               real_folder_name = string_prefix (entry_name, ".sdb", &folder_suffix_found);
-                               /* stick here the tests for other folder suffixes if any */
-                               
-                               if (!folder_suffix_found) real_folder_name = g_strdup (entry_name);
-                               
-                               /* add the folder name to the list */
-                               subfolder_name_list = g_list_append (subfolder_name_list, 
-                                                                    real_folder_name);
-                       }
-               }
-               /* read next entry */
-               dir_entry = readdir (dir_handle);
-       }
-
-       closedir (dir_handle);
-
-       return subfolder_name_list;
-
-       
-
-       /* io exception handling */
-               switch (errno) { 
-               case EACCES :
-                       
-                       camel_exception_setv (ex, 
-                                             CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-                                             "Unable to list the directory. Full Error text is : %s ", 
-                                             strerror (errno));
-                       break;
-                       
-               case ENOENT :
-               case ENOTDIR :
-                       camel_exception_setv (ex, 
-                                             CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-                                             "Invalid mbox folder path. Full Error text is : %s ", 
-                                             strerror (errno));
-                       break;
-                       
-               default :
-                       camel_exception_set (ex, 
-                                            CAMEL_EXCEPTION_SYSTEM,
-                                            "Unable to delete the mbox folder.");
-                       
-               }
-       
-       g_list_free (subfolder_name_list);
-       return NULL;
-}
-
 static gint
 mbox_get_message_count (CamelFolder *folder, CamelException *ex)
 {
@@ -789,40 +669,29 @@ fail:
        }
 }
 
-static GList *
-mbox_get_uid_list (CamelFolder *folder, CamelException *ex) 
+static GPtrArray *
+mbox_get_uids (CamelFolder *folder, CamelException *ex) 
 {
-       GList *uid_list = NULL;
+       GPtrArray *array;
        CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
        int i, count;
 
-       /* FIXME: how are these allocated strings ever free'd? */
        count = camel_folder_summary_count((CamelFolderSummary *)mbox_folder->summary);
+       array = g_ptr_array_new ();
+       g_ptr_array_set_size (array, count);
        for (i=0;i<count;i++) {
                CamelMboxMessageInfo *info = (CamelMboxMessageInfo *)camel_folder_summary_index((CamelFolderSummary *)mbox_folder->summary, i);
-               uid_list = g_list_prepend(uid_list, g_strdup(info->info.uid));
+               array->pdata[i] = g_strdup(info->info.uid);
        }
        
-       return uid_list;
+       return array;
 }
 
-static CamelMimeMessage *
-mbox_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
+static GPtrArray *
+mbox_get_subfolder_names (CamelFolder *folder, CamelException *ex)
 {
-       CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-       CamelMboxMessageInfo *info;
-
-       g_warning("YOUR CODE SHOULD NOT BE GETTING MESSAGES BY NUMBER, CHANGE IT");
-
-       info = (CamelMboxMessageInfo *)camel_folder_summary_index((CamelFolderSummary *)mbox_folder->summary, number);
-       if (info == NULL) {
-               camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-                                     "No such message %d in folder `%s'.",
-                                     number, folder->name);
-               return NULL;
-       }
-
-       return mbox_get_message_by_uid (folder, info->info.uid, ex);
+       /* No subfolders. */
+       return g_ptr_array_new ();
 }
 
 static void
@@ -948,19 +817,18 @@ fail:
        return NULL;
 }
 
-/* get message info for a range of messages */
-GPtrArray *summary_get_message_info (CamelFolder *folder, int first, int count)
+GPtrArray *
+mbox_get_summary (CamelFolder *folder, CamelException *ex)
 {
-       GPtrArray *array = g_ptr_array_new();
-       int i, maxcount;
        CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
 
-        maxcount = camel_folder_summary_count((CamelFolderSummary *)mbox_folder->summary);
-       maxcount = MIN(count, maxcount);
-       for (i=first;i<maxcount;i++)
-               g_ptr_array_add(array, camel_folder_summary_index((CamelFolderSummary *)mbox_folder->summary, i));
+       return ((CamelFolderSummary *)mbox_folder->summary)->messages;
+}
 
-       return array;
+void
+mbox_free_summary (CamelFolder *folder, GPtrArray *array)
+{
+       /* no-op */
 }
 
 /* get a single message info, by uid */
index 0678497..8bc623a 100644 (file)
@@ -71,7 +71,7 @@ static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
 static CamelMimeMessage *_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex);
 static gint _get_message_count (CamelFolder *folder, CamelException *ex);
 static void _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static GList *_get_uid_list  (CamelFolder *folder, CamelException *ex);
+static GPtrArray *_get_uid_array  (CamelFolder *folder, CamelException *ex);
 static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
 #if 0
 static void _expunge (CamelFolder *folder, CamelException *ex);
@@ -101,7 +101,7 @@ camel_nntp_folder_class_init (CamelNNTPFolderClass *camel_nntp_folder_class)
        camel_folder_class->delete_messages = _delete_messages;
        camel_folder_class->list_subfolders = _list_subfolders;
        camel_folder_class->get_message_count = _get_message_count;
-       camel_folder_class->get_uid_list = _get_uid_list;
+       camel_folder_class->get_uid_array = _get_uid_array;
        camel_folder_class->get_message_by_uid = _get_message_by_uid;
 #if 0 
        camel_folder_class->append_message = _append_message;
@@ -487,23 +487,25 @@ _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException
 
 
 
-static GList *
-_get_uid_list (CamelFolder *folder, CamelException *ex) 
+static GPtrArray *
+_get_uid_array (CamelFolder *folder, CamelException *ex) 
 {
        CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-       GPtrArray *message_info_array;
+       GPtrArray *message_info_array, *out;
        CamelMessageInfo *message_info;
-       GList *uid_list = NULL;
        int i;
 
        message_info_array = nntp_folder->summary->messages;
+
+       out = g_ptr_array_new ();
+       g_ptr_array_set_size (out, message_info_array->len);
        
        for (i=0; i<message_info_array->len; i++) {
                message_info = (CamelMessageInfo *)(message_info_array->pdata) + i;
-               uid_list = g_list_prepend (uid_list, g_strdup (message_info->uid));
+               out->pdata[i] = g_strdup (message_info->uid);
        }
        
-       return uid_list;
+       return out;
 }
 
 static CamelMimeMessage *
index 838f247..45687e4 100644 (file)
@@ -30,6 +30,7 @@
 #include "camel-mime-message.h"
 
 #include <stdlib.h>
+#include <string.h>
 
 #define CF_CLASS(o) (CAMEL_FOLDER_CLASS (GTK_OBJECT (o)->klass))
 static CamelFolderClass *parent_class;
@@ -39,13 +40,14 @@ static void pop3_open (CamelFolder *folder, CamelFolderOpenMode mode,
 static void pop3_close (CamelFolder *folder, gboolean expunge,
                        CamelException *ex);
 static gboolean delete_messages (CamelFolder *folder, CamelException *ex);
-static gboolean has_message_number_capability (CamelFolder *folder);
-static CamelMimeMessage *get_message_by_number (CamelFolder *folder, 
-                                               gint number, 
-                                               CamelException *ex);
-static void delete_message_by_number (CamelFolder *folder, gint number, 
-                                     CamelException *ex);
+
 static gint get_message_count (CamelFolder *folder, CamelException *ex);
+static GPtrArray *get_uids (CamelFolder *folder, CamelException *ex);
+static CamelMimeMessage *get_message_by_uid (CamelFolder *folder, 
+                                            const char *uid,
+                                            CamelException *ex);
+static void delete_message_by_uid (CamelFolder *folder, const char *uid,
+                                  CamelException *ex);
 
 
 static void
@@ -60,33 +62,28 @@ camel_pop3_folder_class_init (CamelPop3FolderClass *camel_pop3_folder_class)
        camel_folder_class->open = pop3_open;
        camel_folder_class->close = pop3_close;
        camel_folder_class->delete_messages = delete_messages;
-       camel_folder_class->has_message_number_capability =
-               has_message_number_capability;
-       camel_folder_class->get_message_by_number =
-               get_message_by_number;
-       camel_folder_class->delete_message_by_number =
-               delete_message_by_number;
-       camel_folder_class->get_message_count =
-               get_message_count;
-}
 
+       camel_folder_class->get_message_count = get_message_count;
+       camel_folder_class->get_uids = get_uids;
+
+       camel_folder_class->get_message_by_uid = get_message_by_uid;
+       camel_folder_class->delete_message_by_uid = delete_message_by_uid;
+}
 
 
 static void
 camel_pop3_folder_init (gpointer object, gpointer klass)
 {
+       CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (object);
        CamelFolder *folder = CAMEL_FOLDER (object);
 
        folder->can_hold_messages = TRUE;
        folder->can_hold_folders = FALSE;
-
-       /* Hi. I'm CamelPop3Folder. I'm useless. */
        folder->has_summary_capability = FALSE;
-       folder->has_uid_capability = FALSE;
        folder->has_search_capability = FALSE;
-}
-
 
+       pop3_folder->count = -1;
+}
 
 
 GtkType
@@ -168,14 +165,8 @@ delete_messages (CamelFolder *folder, CamelException *ex)
 }
 
 
-static gboolean
-has_message_number_capability (CamelFolder *folder)
-{
-       return TRUE;
-}
-
 static CamelMimeMessage *
-get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
+get_message_by_uid (CamelFolder *folder, const char *uid, CamelException *ex)
 {
        int status;
        char *result, *body;
@@ -183,7 +174,7 @@ get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
        CamelMimeMessage *msg;
 
        status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-                                    &result, "RETR %d", number);
+                                    &result, "RETR %d", atoi (uid));
        if (status != CAMEL_POP3_OK) {
                CamelService *service = CAMEL_SERVICE (folder->parent_store);
                camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
@@ -216,17 +207,18 @@ get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
 }
 
 static void
-delete_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
+delete_message_by_uid (CamelFolder *folder, const char *uid,
+                      CamelException *ex)
 {
        int status;
        char *resp;
 
        status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-                                    &resp, "DELE %d", number);
+                                    &resp, "DELE %d", atoi (uid));
        if (status != CAMEL_POP3_OK) {
                camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-                                     "Unable to delete message %d%s%s",
-                                     number, resp ? ": " : "",
+                                     "Unable to delete message %s%s%s",
+                                     uid, resp ? ": " : "",
                                      resp ? resp : "");
        }
        g_free (resp);
@@ -235,9 +227,13 @@ delete_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
 static gint
 get_message_count (CamelFolder *folder, CamelException *ex)
 {
-       int status, count;
+       CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (folder);
+       int status;
        char *result;
 
+       if (pop3_folder->count != -1)
+               return pop3_folder->count;
+
        status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
                                     &result, "STAT");
        if (status != CAMEL_POP3_OK) {
@@ -251,7 +247,25 @@ get_message_count (CamelFolder *folder, CamelException *ex)
                return -1;
        }
 
-       count = atoi (result);
+       pop3_folder->count = atoi (result);
        g_free (result);
-       return count;
+       return pop3_folder->count;
+}
+
+static GPtrArray *
+get_uids (CamelFolder *folder, CamelException *ex)
+{
+       int count, i;
+       GPtrArray *array;
+
+       count = get_message_count (folder, ex);
+       if (count == -1)
+               return NULL;
+
+       array = g_ptr_array_new ();
+       g_ptr_array_set_size (array, count);
+       for (i = 0; i < count; i++)
+               array->pdata[i] = g_strdup_printf ("%d", i + 1);
+
+       return array;
 }
index 4199e30..2a478dc 100644 (file)
@@ -45,6 +45,9 @@ extern "C" {
 typedef struct {
        CamelFolder parent_object;
 
+       CamelMessageInfo *msg_info;
+       int count;
+
 } CamelPop3Folder;
 
 
index d759fd3..88e4813 100644 (file)
@@ -46,12 +46,13 @@ static void vee_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelExcept
 static void vee_close (CamelFolder *folder, gboolean expunge, CamelException *ex);
 static gboolean vee_exists (CamelFolder *folder, CamelException *ex);
 
-static GList *vee_get_uid_list  (CamelFolder *folder, CamelException *ex);
+static GPtrArray *vee_get_uids  (CamelFolder *folder, CamelException *ex);
+GPtrArray *vee_get_summary (CamelFolder *folder, CamelException *ex);
+void vee_free_summary (CamelFolder *folder, GPtrArray *array);
 
 static gint vee_get_message_count (CamelFolder *folder, CamelException *ex);
 static CamelMimeMessage *vee_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
-GPtrArray *vee_summary_get_message_info (CamelFolder *folder, int first, int count);
 static const CamelMessageInfo *vee_summary_get_by_uid(CamelFolder *f, const char *uid);
 
 
@@ -106,10 +107,11 @@ camel_vee_folder_class_init (CamelVeeFolderClass *klass)
        folder_class->close = vee_close;
        folder_class->exists = vee_exists;
 
-       folder_class->get_uid_list = vee_get_uid_list;
+       folder_class->get_uids = vee_get_uids;
+       folder_class->get_summary = vee_get_summary;
+       folder_class->free_summary = vee_free_summary;
        folder_class->get_message_by_uid = vee_get_message_by_uid;
 
-       folder_class->get_message_info = vee_summary_get_message_info;
        folder_class->summary_get_by_uid = vee_summary_get_by_uid;
 
        folder_class->get_message_count = vee_get_message_count;
@@ -163,7 +165,6 @@ static void vee_init (CamelFolder *folder, CamelStore *parent_store,
        folder->can_hold_messages = TRUE;
        folder->can_hold_folders = FALSE;
        folder->has_summary_capability = TRUE;
-       folder->has_uid_capability = TRUE;
        folder->has_search_capability = TRUE;
 
        /* FIXME: what to do about user flags if the subfolder doesn't support them? */
@@ -223,18 +224,16 @@ static CamelMimeMessage *vee_get_message_by_uid (CamelFolder *folder, const gcha
        return camel_folder_get_message_by_uid(mi->folder, strchr(mi->info.uid, ':')+1, ex);
 }
 
-GPtrArray *vee_summary_get_message_info (CamelFolder *folder, int first, int count)
+GPtrArray *vee_get_summary (CamelFolder *folder, CamelException *ex)
 {
-       GPtrArray *result;
-       int i, max;
        CamelVeeFolder *vf = (CamelVeeFolder *)folder;
 
-       result = g_ptr_array_new();
-       max = MIN(vf->messages->len, count+first);
-       for (i=first;i<max;i++) {
-               g_ptr_array_add(result, g_ptr_array_index(vf->messages, i));
-       }
-       return result;
+       return vf->messages;
+}
+
+void vee_free_summary (CamelFolder *folder, GPtrArray *array)
+{
+       /* no op */
 }
 
 static const CamelMessageInfo *vee_summary_get_by_uid(CamelFolder *f, const char *uid)
@@ -244,15 +243,17 @@ static const CamelMessageInfo *vee_summary_get_by_uid(CamelFolder *f, const char
        return g_hash_table_lookup(vf->messages_uid, uid);
 }
 
-static GList *vee_get_uid_list  (CamelFolder *folder, CamelException *ex)
+static GPtrArray *vee_get_uids (CamelFolder *folder, CamelException *ex)
 {
-       GList *result = NULL;
+       GPtrArray *result;
        int i;
        CamelVeeFolder *vf = (CamelVeeFolder *)folder;
 
+       result = g_ptr_array_new ();
+       g_ptr_array_set_size (result, vf->messages->len);
        for (i=0;i<vf->messages->len;i++) {
                CamelMessageInfo *mi = g_ptr_array_index(vf->messages, i);
-               result = g_list_prepend(result, g_strdup(mi->uid));
+               result->pdata[i] = g_strdup(mi->uid);
        }
 
        return result;