evolution-data-server r9081 - trunk/camel



Author: fejj
Date: Thu Jul  3 03:13:35 2008
New Revision: 9081
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9081&view=rev

Log:
2008-07-02  Jeffrey Stedfast  <fejj novell com>

	* camel-folder.c (camel_folder_sort_uids): New method to sort an
	array of uids.



Modified:
   trunk/camel/ChangeLog
   trunk/camel/camel-folder.c
   trunk/camel/camel-folder.h

Modified: trunk/camel/camel-folder.c
==============================================================================
--- trunk/camel/camel-folder.c	(original)
+++ trunk/camel/camel-folder.c	Thu Jul  3 03:13:35 2008
@@ -88,6 +88,8 @@
 static GPtrArray        *get_uids            (CamelFolder *folder);
 static void              free_uids           (CamelFolder *folder,
 					      GPtrArray *array);
+static void              sort_uids           (CamelFolder *folder,
+					      GPtrArray *uids);
 static GPtrArray        *get_summary         (CamelFolder *folder);
 static void              free_summary        (CamelFolder *folder,
 					      GPtrArray *array);
@@ -143,6 +145,7 @@
 	camel_folder_class->get_message = get_message;
 	camel_folder_class->get_uids = get_uids;
 	camel_folder_class->free_uids = free_uids;
+	camel_folder_class->sort_uids = sort_uids;
 	camel_folder_class->get_summary = get_summary;
 	camel_folder_class->free_summary = free_summary;
 	camel_folder_class->search_by_expression = search_by_expression;
@@ -1170,6 +1173,46 @@
 	CF_CLASS (folder)->free_uids (folder, array);
 }
 
+
+static int
+uidcmp (const void *v0, const void *v1)
+{
+	const char *str0 = *(const char **) v0;
+	const char *str1 = *(const char **) v1;
+	guint32 uid0 = strtoul (str0, NULL, 10);
+	guint32 uid1 = strtoul (str1, NULL, 10);
+	
+	if (uid0 < uid1)
+		return -1;
+	else if (uid0 == uid1)
+		return 0;
+	else
+		return 1;
+}
+
+static void
+sort_uids (CamelFolder *folder, GPtrArray *uids)
+{
+	qsort (uids->pdata, uids->len, sizeof (void *), uidcmp);
+}
+
+
+/**
+ * camel_folder_sort_uids:
+ * @folder: a #CamelFolder object
+ * @uids: array of uids
+ *
+ * Sorts the array of UIDs.
+ **/
+void
+camel_folder_sort_uids (CamelFolder *folder, GPtrArray *uids)
+{
+	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+	
+	CF_CLASS (folder)->sort_uids (folder, uids);
+}
+
+
 static GPtrArray *
 get_summary(CamelFolder *folder)
 {

Modified: trunk/camel/camel-folder.h
==============================================================================
--- trunk/camel/camel-folder.h	(original)
+++ trunk/camel/camel-folder.h	Thu Jul  3 03:13:35 2008
@@ -174,7 +174,9 @@
 	GPtrArray * (*get_uids)       (CamelFolder *folder);
 	void (*free_uids)             (CamelFolder *folder,
 				       GPtrArray *array);
-
+	
+	void (* sort_uids) (CamelFolder *folder, GPtrArray *uids);
+	
 	GPtrArray * (*get_summary)    (CamelFolder *folder);
 	void (*free_summary)          (CamelFolder *folder,
 				       GPtrArray *summary);
@@ -203,7 +205,7 @@
 	void     (*freeze)    (CamelFolder *folder);
 	void     (*thaw)      (CamelFolder *folder);
 	gboolean (*is_frozen) (CamelFolder *folder);
-
+	
 	CamelFolderQuotaInfo * (*get_quota_info) (CamelFolder *folder);
 } CamelFolderClass;
 
@@ -303,6 +305,8 @@
 GPtrArray *        camel_folder_get_uids              (CamelFolder *folder);
 void               camel_folder_free_uids             (CamelFolder *folder,
 						       GPtrArray *array);
+void               camel_folder_sort_uids             (CamelFolder *folder,
+						       GPtrArray *uids);
 
 /* search api */
 gboolean           camel_folder_has_search_capability (CamelFolder *folder);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]