[gnome-calendar] Added method to get events properties.



commit 8e35adf4a08c699dcd2275847867c5254f7f12d3
Author: Erick PÃrez Castellanos <erick red gmail com>
Date:   Thu Jun 21 08:17:19 2012 -0400

    Added method to get events properties.

 src/gcal-manager.c |  205 +++++++++++++++++++++++++++++++++++++++++++++++++---
 src/gcal-manager.h |   23 ++++++
 2 files changed, 218 insertions(+), 10 deletions(-)
---
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index d861dec..cbd2da8 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -18,7 +18,6 @@
  */
 
 #include "gcal-manager.h"
-
 #include "gcal-utils.h"
 
 #include <glib/gi18n.h>
@@ -568,7 +567,7 @@ gcal_manager_on_view_objects_added (ECalClientView *view,
 
   ECalClient *client;
   const gchar *source_uid;
-  gchar *event_uid;
+  gchar *event_uuid;
 
   priv = GCAL_MANAGER (user_data)->priv;
   events_data = NULL;
@@ -588,15 +587,15 @@ gcal_manager_on_view_objects_added (ECalClientView *view,
                                               NULL,
                                               NULL))
             {
-              component = e_cal_component_new_from_icalcomponent (l->data);
-
+              component = e_cal_component_new_from_icalcomponent (
+                  icalcomponent_new_clone (l->data));
               g_hash_table_insert (unit->events,
                                    g_strdup (icalcomponent_get_uid (l->data)),
                                    component);
-              event_uid = g_strdup_printf ("%s:%s",
+              event_uuid = g_strdup_printf ("%s:%s",
                                            source_uid,
                                            icalcomponent_get_uid (l->data));
-              events_data = g_slist_append (events_data, event_uid);
+              events_data = g_slist_append (events_data, event_uuid);
             }
         }
     }
@@ -713,6 +712,7 @@ gcal_manager_add_source (GcalManager *manager,
   gpointer value;
   ESource *source;
 
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
   priv = manager->priv;
   g_return_val_if_fail (GCAL_IS_MANAGER (manager), FALSE);
 
@@ -757,6 +757,20 @@ gcal_manager_add_source (GcalManager *manager,
   return g_strdup (e_source_peek_uid (source));
 }
 
+const gchar*
+gcal_manager_get_source_name (GcalManager *manager,
+                              const gchar *source_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  return e_source_peek_name (unit->source);
+}
+
 /**
  * gcal_manager_set_new_range:
  * @manager: a #GcalManager
@@ -784,10 +798,7 @@ gcal_manager_set_new_range (GcalManager        *manager,
   GcalManagerPrivate *priv;
   gboolean refresh_events;
 
-  g_return_if_fail (manager != NULL);
-  g_return_if_fail (initial_date != NULL);
-  g_return_if_fail (final_date != NULL);
-
+  g_return_if_fail (GCAL_IS_MANAGER (manager));
   priv = manager->priv;
   refresh_events = FALSE;
 
@@ -829,6 +840,22 @@ gcal_manager_set_new_range (GcalManager        *manager,
     }
 }
 
+gboolean
+gcal_manager_exists_event (GcalManager *manager,
+                           const gchar *source_uid,
+                           const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), FALSE);
+  priv = manager->priv;
+
+  if ((unit = g_hash_table_lookup (priv->clients, source_uid)) != NULL)
+    return g_hash_table_lookup (unit->events, event_uid) != NULL;
+  return FALSE;
+}
+
 icaltimetype*
 gcal_manager_get_event_start_date (GcalManager *manager,
                                    const gchar *source_uid,
@@ -840,6 +867,7 @@ gcal_manager_get_event_start_date (GcalManager *manager,
   ECalComponentDateTime dt;
   icaltimetype *dtstart;
 
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
   priv = manager->priv;
 
   unit = g_hash_table_lookup (priv->clients, source_uid);
@@ -862,6 +890,7 @@ gcal_manager_get_event_summary (GcalManager *manager,
   ECalComponentText e_summary;
   gchar *summary;
 
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
   priv = manager->priv;
 
   unit = g_hash_table_lookup (priv->clients, source_uid);
@@ -872,6 +901,161 @@ gcal_manager_get_event_summary (GcalManager *manager,
   return summary;
 }
 
+gchar**
+gcal_manager_get_event_organizer (GcalManager *manager,
+                                  const gchar *source_uid,
+                                  const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+  ECalComponent *event;
+  ECalComponentOrganizer e_organizer;
+  gchar** values;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  event = g_hash_table_lookup (unit->events, event_uid);
+  e_cal_component_get_organizer (event, &e_organizer);
+
+  if (e_organizer.cn == NULL)
+    return NULL;
+
+  values = g_new (gchar*, 3);
+  values[2] = NULL;
+  values[0] = g_strdup (e_organizer.cn);
+  values[1] = g_strdup (e_organizer.value);
+
+  return values;
+}
+
+gchar*
+gcal_manager_get_event_date (GcalManager *manager,
+                             const gchar *source_uid,
+                             const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+  ECalComponent *event;
+  ECalComponentDateTime dt;
+  icaltimetype *dtstart;
+  icaltimetype *dtend;
+  struct tm tm_date;
+  gchar *date;
+  gchar since [128];
+  gchar until [128];
+  gchar *all_day;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  event = g_hash_table_lookup (unit->events, event_uid);
+
+  e_cal_component_get_dtstart (event, &dt);
+  dtstart = gcal_dup_icaltime (dt.value);
+  e_cal_component_free_datetime (&dt);
+
+  e_cal_component_get_dtend (event, &dt);
+  dtend = gcal_dup_icaltime (dt.value);
+  e_cal_component_free_datetime (&dt);
+
+  if (dtstart->is_date == 1 && dtend->is_date == 1)
+    {
+      all_day = g_strdup (_(" (All day)"));
+
+      tm_date = icaltimetype_to_tm (dtstart);
+      e_utf8_strftime_fix_am_pm (since, 128, "%b, %d", &tm_date);
+      tm_date = icaltimetype_to_tm (dtstart);
+      e_utf8_strftime_fix_am_pm (until, 128, "%b, %d", &tm_date);
+    }
+  else
+    {
+      all_day = NULL;
+
+      tm_date = icaltimetype_to_tm (dtstart);
+      e_utf8_strftime_fix_am_pm (since, 128, "%b, %d, %l:%M %p", &tm_date);
+      tm_date = icaltimetype_to_tm (dtstart);
+      e_utf8_strftime_fix_am_pm (until, 128, "%b, %d, %l:%M %p", &tm_date);
+    }
+
+  date = g_strdup_printf ("%s - %s%s",
+                          since,
+                          until,
+                          all_day == NULL ? "": all_day);
+
+  g_free (all_day);
+  g_free (dtstart);
+  g_free (dtend);
+  return date;
+}
+
+const gchar*
+gcal_manager_get_event_location (GcalManager *manager,
+                                 const gchar *source_uid,
+                                 const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+  ECalComponent *event;
+  const gchar* location;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  event = g_hash_table_lookup (unit->events, event_uid);
+  e_cal_component_get_location (event, &location);
+  return location;
+}
+
+gchar*
+gcal_manager_get_event_description (GcalManager *manager,
+                                    const gchar *source_uid,
+                                    const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+  ECalComponent *event;
+  GSList *text_list;
+  GSList *l;
+
+  gchar *desc;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+  desc = NULL;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  event = g_hash_table_lookup (unit->events, event_uid);
+  e_cal_component_get_description_list (event, &text_list);
+
+  for (l = text_list; l != NULL; l = l->next)
+    {
+      if (l->data != NULL)
+        {
+          ECalComponentText *text;
+          gchar *carrier;
+          text = l->data;
+
+          if (desc != NULL)
+            {
+              carrier = g_strconcat (desc, text->value, NULL);
+              g_free (desc);
+              desc = carrier;
+            }
+          else
+            {
+              desc = g_strdup (text->value);
+            }
+        }
+    }
+
+  e_cal_component_free_text_list (text_list);
+  return desc;
+}
+
 GdkRGBA*
 gcal_manager_get_event_color (GcalManager *manager,
                               const gchar *source_uid,
@@ -882,6 +1066,7 @@ gcal_manager_get_event_color (GcalManager *manager,
   GdkRGBA *color;
   GdkColor gdk_color;
 
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
   priv = manager->priv;
   color = g_new0 (GdkRGBA, 1);
 
diff --git a/src/gcal-manager.h b/src/gcal-manager.h
index 00f74ef..cec794b 100644
--- a/src/gcal-manager.h
+++ b/src/gcal-manager.h
@@ -69,10 +69,17 @@ gchar*         gcal_manager_add_source              (GcalManager        *manager
                                                      const gchar        *relative_uri,
                                                      const gchar        *color);
 
+const gchar*   gcal_manager_get_source_name         (GcalManager        *manager,
+                                                     const gchar        *source_uid);
+
 void           gcal_manager_set_new_range           (GcalManager        *manager,
                                                      const icaltimetype *initial_date,
                                                      const icaltimetype *final_date);
 
+gboolean       gcal_manager_exists_event            (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
 icaltimetype*  gcal_manager_get_event_start_date    (GcalManager        *manager,
                                                      const gchar        *source_uid,
                                                      const gchar        *event_uid);
@@ -81,6 +88,22 @@ gchar*         gcal_manager_get_event_summary       (GcalManager        *manager
                                                      const gchar        *source_uid,
                                                      const gchar        *event_uid);
 
+gchar**        gcal_manager_get_event_organizer     (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
+gchar*         gcal_manager_get_event_date          (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
+const gchar*   gcal_manager_get_event_location      (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
+gchar*         gcal_manager_get_event_description   (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
 GdkRGBA*       gcal_manager_get_event_color         (GcalManager        *manager,
                                                      const gchar        *source_uid,
                                                      const gchar        *event_uid);



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