[gnome-calendar/calendar-management] source-manager: properly sort sources



commit 39e226b73bc0260e4b84c2674060dabaf42baeba
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Tue Feb 3 15:27:23 2015 -0200

    source-manager: properly sort sources

 src/gcal-source-manager-dialog.c |   54 +++++++++++++++++++++----------------
 1 files changed, 31 insertions(+), 23 deletions(-)
---
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index 9f25536..86c47fc 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -50,7 +50,7 @@ enum {
 };
 
 enum {
-  SOURCE_GOA,
+  SOURCE_GOOGLE,
   SOURCE_OWNCLOUD,
   SOURCE_OTHER
 };
@@ -304,42 +304,50 @@ sort_func_cb (GtkListBoxRow *current,
 {
   GcalSourceManagerDialogPrivate *priv;
   ESource *current_source, *prev_source;
+  GcalSourceOrigin *current_origin, *prev_origin;
   gint current_ext, prev_ext;
 
   priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
 
   current_source = g_hash_table_lookup (priv->row_to_source, current);
-  prev_source = g_hash_table_lookup (priv->row_to_source, before);
+  current_origin = g_hash_table_lookup (priv->source_origin, current_source);
 
-  /* TODO: improve code to select the extension source */
+  prev_source = g_hash_table_lookup (priv->row_to_source, before);
+  prev_origin = g_hash_table_lookup (priv->source_origin, prev_source);
 
-  /* online accounts */
-  if (e_source_has_extension (current_source, E_SOURCE_EXTENSION_GOA))
-    {
-      current_ext = SOURCE_GOA;
-      goto previous_row;
-    }
+  /* current row */
+  if (g_strcmp0 (current_origin->name, "Google") == 0)
+    current_ext = SOURCE_GOOGLE;
+  else if (g_strcmp0 (current_origin->name, "ownCloud") == 0)
+    current_ext = SOURCE_OWNCLOUD;
   else
-    {
-      current_ext = SOURCE_OTHER;
-    }
+    current_ext = SOURCE_OTHER;
 
-previous_row:
+  /* previous row */
+  if (g_strcmp0 (prev_origin->name, "Google") == 0)
+    prev_ext = SOURCE_GOOGLE;
+  else if (g_strcmp0 (prev_origin->name, "ownCloud") == 0)
+    prev_ext = SOURCE_OWNCLOUD;
+  else
+    prev_ext = SOURCE_OTHER;
 
-  /* online accounts */
-  if (e_source_has_extension (prev_source, E_SOURCE_EXTENSION_GOA))
+  if (current_ext == prev_ext)
     {
-      prev_ext = SOURCE_GOA;
+      /**
+       * If they are GOA sources, we must first check
+       * the account. Only if the accounts mismatch is
+       * when we compare by the source name.
+       */
+      if (current_ext != SOURCE_OTHER)
+        {
+          if (g_strcmp0 (current_origin->account, prev_origin->account) != 0)
+            return g_strcmp0 (current_origin->account, prev_origin->account);
+        }
+
+      return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name (prev_source));
     }
   else
-    {
-      prev_ext = SOURCE_OTHER;
-    }
-
-  if (current_ext != prev_ext)
     return (current_ext > prev_ext ? 1 : -1);
-  else
-    return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name (prev_source));
 }
 
 /**


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