[gnome-calendar] event: Receive and operate on GcalCalendar



commit 1118c7488165a72e2d4286e6a497f95cd1f9ac88
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Fri May 3 20:46:32 2019 -0300

    event: Receive and operate on GcalCalendar
    
    Instead of receiving an ESource, receive a GcalCalendar
    and operate on it. Many places needed to be adjusted for
    that.
    
    Tests need to be rethinked.

 src/gcal-edit-dialog.c             | 18 ++++----
 src/gcal-event-widget.c            |  3 --
 src/gcal-event.c                   | 93 ++++++++++++++++++--------------------
 src/gcal-event.h                   |  9 ++--
 src/gcal-manager.c                 | 72 ++++++++++++++++++++---------
 src/gcal-manager.h                 |  3 ++
 src/gcal-quick-add-popover.c       |  4 +-
 src/gcal-window.c                  | 10 +++-
 src/search/gcal-search-hit-event.c | 10 ++--
 src/search/gcal-search-model.c     |  9 +++-
 src/utils/gcal-utils.c             |  6 +--
 src/views/gcal-month-cell.c        |  4 +-
 src/views/gcal-month-view.c        | 10 +++-
 src/views/gcal-week-grid.c         |  4 +-
 src/views/gcal-week-view.c         |  5 +-
 src/views/gcal-year-view.c         | 15 ++++--
 16 files changed, 168 insertions(+), 107 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index 0d014976..10d2fcba 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -751,6 +751,7 @@ on_action_button_clicked_cb (GtkWidget *widget,
     {
       GcalRecurrenceFrequency freq;
       GcalRecurrence *old_recur;
+      GcalCalendar *calendar;
       GDateTime *start_date, *end_date;
       gboolean was_all_day;
       gboolean all_day;
@@ -870,12 +871,15 @@ on_action_button_clicked_cb (GtkWidget *widget,
         }
 
       /* Update the source if needed */
+      calendar = gcal_event_get_calendar (self->event);
       if (self->selected_source &&
-          gcal_event_get_source (self->event) != self->selected_source)
+          gcal_calendar_get_source (calendar) != self->selected_source)
         {
           if (self->event_is_new)
             {
-              gcal_event_set_source (self->event, self->selected_source);
+              calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (self->context),
+                                                                self->selected_source);
+              gcal_event_set_calendar (self->event, calendar);
             }
           else
             {
@@ -1404,11 +1408,10 @@ gcal_edit_dialog_set_event (GcalEditDialog *self,
   GcalRecurrenceFrequency frequency;
   GcalRecurrence *recur;
   GtkAdjustment *count_adjustment;
-  GcalManager *manager;
+  GcalCalendar *calendar;
   GDateTime *date_start;
   GDateTime *date_end;
   cairo_surface_t *surface;
-  ESource *source;
   const gchar *summary;
   gboolean all_day;
 
@@ -1464,7 +1467,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *self,
     }
 
   all_day = gcal_event_get_all_day (event);
-  source = gcal_event_get_source (event);
+  calendar = gcal_event_get_calendar (event);
 
   /* Clear event data */
   gcal_edit_dialog_clear_data (self);
@@ -1489,7 +1492,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *self,
   gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
   g_clear_pointer (&surface, cairo_surface_destroy);
 
-  gtk_label_set_label (GTK_LABEL (self->subtitle_label), e_source_get_display_name (source));
+  gtk_label_set_label (GTK_LABEL (self->subtitle_label), gcal_calendar_get_name (calendar));
 
   /* retrieve start and end dates */
   date_start = gcal_event_get_date_start (event);
@@ -1536,8 +1539,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *self,
                             gcal_event_get_description (event),
                             -1);
 
-  manager = gcal_context_get_manager (self->context);
-  set_writable (self, gcal_manager_is_client_writable (manager, source));
+  set_writable (self, !gcal_calendar_is_read_only (calendar));
 
   g_clear_pointer (&date_start, g_date_time_unref);
   g_clear_pointer (&date_end, g_date_time_unref);
diff --git a/src/gcal-event-widget.c b/src/gcal-event-widget.c
index 4ea899ad..246daa62 100644
--- a/src/gcal-event-widget.c
+++ b/src/gcal-event-widget.c
@@ -1162,9 +1162,6 @@ gboolean
 gcal_event_widget_equal (GcalEventWidget *widget1,
                          GcalEventWidget *widget2)
 {
-  if (!e_source_equal (gcal_event_get_source (widget1->event), gcal_event_get_source (widget2->event)))
-    return FALSE;
-
   return g_strcmp0 (gcal_event_get_uid (widget1->event), gcal_event_get_uid (widget2->event)) == 0;
 }
 
diff --git a/src/gcal-event.c b/src/gcal-event.c
index 1712a169..32c7495f 100644
--- a/src/gcal-event.c
+++ b/src/gcal-event.c
@@ -55,7 +55,7 @@
  * GError *error;
  *
  * error = NULL;
- * event = gcal_event_new (source, component, &error);
+ * event = gcal_event_new (calendar, component, &error);
  *
  * if (error)
  *   {
@@ -94,7 +94,7 @@ struct _GcalEvent
   GHashTable         *alarms;
 
   ECalComponent      *component;
-  ESource            *source;
+  GcalCalendar       *calendar;
 
   GcalRecurrence     *recurrence;
 
@@ -118,7 +118,7 @@ enum {
   PROP_DATE_END,
   PROP_DATE_START,
   PROP_LOCATION,
-  PROP_SOURCE,
+  PROP_CALENDAR,
   PROP_SUMMARY,
   PROP_TIMEZONE,
   PROP_UID,
@@ -264,7 +264,7 @@ gcal_event_update_uid_internal (GcalEvent *self)
   const gchar *source_id;
 
   /* Setup event uid */
-  source_id = self->source ? e_source_get_uid (self->source) : "";
+  source_id = self->calendar ? gcal_calendar_get_id (self->calendar) : "";
   id = e_cal_component_get_id (self->component);
 
   /* Clear the previous uid */
@@ -470,7 +470,7 @@ gcal_event_finalize (GObject *object)
   g_clear_pointer (&self->uid, g_free);
   g_clear_pointer (&self->color, gdk_rgba_free);
   g_clear_object (&self->component);
-  g_clear_object (&self->source);
+  g_clear_object (&self->calendar);
   g_clear_pointer (&self->recurrence, gcal_recurrence_unref);
 
   G_OBJECT_CLASS (gcal_event_parent_class)->finalize (object);
@@ -494,6 +494,10 @@ gcal_event_get_property (GObject    *object,
       g_value_set_boxed (value, self->color);
       break;
 
+    case PROP_CALENDAR:
+      g_value_set_object (value, self->calendar);
+      break;
+
     case PROP_COMPONENT:
       g_value_set_object (value, self->component);
       break;
@@ -514,10 +518,6 @@ gcal_event_get_property (GObject    *object,
       g_value_set_string (value, gcal_event_get_location (self));
       break;
 
-    case PROP_SOURCE:
-      g_value_set_object (value, self->source);
-      break;
-
     case PROP_SUMMARY:
       g_value_set_string (value, gcal_event_get_summary (self));
       break;
@@ -553,6 +553,10 @@ gcal_event_set_property (GObject      *object,
       gcal_event_set_all_day (self, g_value_get_boolean (value));
       break;
 
+    case PROP_CALENDAR:
+      gcal_event_set_calendar (self, g_value_get_object (value));
+      break;
+
     case PROP_COLOR:
       gcal_event_set_color (self, g_value_get_boxed (value));
       break;
@@ -577,10 +581,6 @@ gcal_event_set_property (GObject      *object,
       gcal_event_set_location (self, g_value_get_string (value));
       break;
 
-    case PROP_SOURCE:
-      gcal_event_set_source (self, g_value_get_object (value));
-      break;
-
     case PROP_SUMMARY:
       gcal_event_set_summary (self, g_value_get_string (value));
       break;
@@ -704,15 +704,15 @@ gcal_event_class_init (GcalEventClass *klass)
                                                     G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | 
G_PARAM_STATIC_STRINGS);
 
   /**
-   * GcalEvent::source:
+   * GcalEvent::calendar:
    *
-   * The #ESource this event belongs to.
+   * The #GcalCalendar this event belongs to.
    */
-  properties[PROP_SOURCE] = g_param_spec_object ("source",
-                                                 "ESource",
-                                                 "The ESource this event belongs to",
-                                                 E_TYPE_SOURCE,
-                                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT | 
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+  properties[PROP_CALENDAR] = g_param_spec_object ("calendar",
+                                                   "Calendar",
+                                                   "The calendar this event belongs to",
+                                                   GCAL_TYPE_CALENDAR,
+                                                   G_PARAM_READWRITE | G_PARAM_CONSTRUCT | 
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
 
   /**
    * GcalEvent::summary:
@@ -767,25 +767,25 @@ gcal_event_init (GcalEvent *self)
 
 /**
  * gcal_event_new:
- * @source: (nullable): an #ESource
+ * @calendar: (nullable): a #GcalCalendar
  * @component: a #ECalComponent
  * @error: (nullable): return location for a #GError
  *
- * Creates a new event which belongs to @source and
+ * Creates a new event which belongs to @calendar and
  * is represented by @component. New events will have
- * a %NULL @source.
+ * a %NULL @calendar.
  *
  * Returns: (transfer full)(nullable): a #GcalEvent
  */
 GcalEvent*
-gcal_event_new (ESource        *source,
+gcal_event_new (GcalCalendar   *calendar,
                 ECalComponent  *component,
                 GError        **error)
 {
   GcalEvent *event;
   g_autofree gchar *uuid;
 
-  uuid = get_uuid_from_component (source, component);
+  uuid = get_uuid_from_component (gcal_calendar_get_source (calendar), component);
 
   if (g_hash_table_contains (event_cache, uuid))
     {
@@ -800,7 +800,7 @@ gcal_event_new (ESource        *source,
       event = g_initable_new (GCAL_TYPE_EVENT,
                               NULL,
                               error,
-                              "source", source,
+                              "calendar", calendar,
                               "component", component,
                               NULL);
 
@@ -1274,57 +1274,54 @@ gcal_event_set_location (GcalEvent   *self,
 }
 
 /**
- * gcal_event_get_source:
+ * gcal_event_get_calendar:
  * @self: a #GcalEvent
  *
  * Retrieves the source of the event.
  *
- * Returns: (nullable): an #ESource.
+ * Returns: (nullable): a #GcalCalendar.
  */
-ESource*
-gcal_event_get_source (GcalEvent *self)
+GcalCalendar*
+gcal_event_get_calendar (GcalEvent *self)
 {
   g_return_val_if_fail (GCAL_IS_EVENT (self), NULL);
 
-  return self->source;
+  return self->calendar;
 }
 
 /**
- * gcal_event_set_source:
+ * gcal_event_set_calendar:
  * @self: a #GcalEvent
- * @source: an #ESource
+ * @calendar: a #GcalCalendar
  *
- * Sets the source of this event. The color of the
+ * Sets the calendar of this event. The color of the
  * event is automatically tied with the source's
  * color.
  *
  * The source should only be set once.
  */
 void
-gcal_event_set_source (GcalEvent *self,
-                       ESource   *source)
+gcal_event_set_calendar (GcalEvent    *self,
+                         GcalCalendar *calendar)
 {
   g_return_if_fail (GCAL_IS_EVENT (self));
 
-  if (self->source != source)
+  if (g_set_object (&self->calendar, calendar))
     {
       /* Remove previous binding */
       g_clear_pointer (&self->color_binding, g_binding_unbind);
 
-      g_set_object (&self->source, source);
-
-      if (source)
+      if (calendar)
         {
           ESourceSelectable *extension;
-          GdkRGBA color;
-
-          extension = E_SOURCE_SELECTABLE (e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR));
+          const GdkRGBA *color;
+          ESource *source;
 
-          /* calendar default color */
-          if (!gdk_rgba_parse (&color, e_source_selectable_get_color (extension)))
-            gdk_rgba_parse (&color, "#ffffff");
+          color = gcal_calendar_get_color (calendar);
+          gcal_event_set_color (self, (GdkRGBA*) color);
 
-          gcal_event_set_color (self, &color);
+          source = gcal_calendar_get_source (calendar);
+          extension = e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR);
 
           /* Bind the source's color with this event's color */
           self->color_binding = g_object_bind_property_full (extension, "color",
@@ -1336,7 +1333,7 @@ gcal_event_set_source (GcalEvent *self,
                                                              NULL);
         }
 
-      g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SOURCE]);
+      g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CALENDAR]);
 
       gcal_event_update_uid_internal (self);
     }
diff --git a/src/gcal-event.h b/src/gcal-event.h
index 276f46d1..37339096 100644
--- a/src/gcal-event.h
+++ b/src/gcal-event.h
@@ -19,6 +19,7 @@
 #ifndef GCAL_EVENT_H
 #define GCAL_EVENT_H
 
+#include "gcal-calendar.h"
 #include "gcal-recurrence.h"
 
 #include <glib-object.h>
@@ -47,7 +48,7 @@ G_DECLARE_FINAL_TYPE (GcalEvent, gcal_event, GCAL, EVENT, GObject)
 
 GQuark               gcal_event_error_quark                      (void);
 
-GcalEvent*           gcal_event_new                              (ESource            *source,
+GcalEvent*           gcal_event_new                              (GcalCalendar       *calendar,
                                                                   ECalComponent      *component,
                                                                   GError            **error);
 
@@ -96,10 +97,10 @@ const gchar*         gcal_event_get_location                     (GcalEvent
 void                 gcal_event_set_location                     (GcalEvent          *self,
                                                                   const gchar        *location);
 
-ESource*             gcal_event_get_source                       (GcalEvent          *self);
+GcalCalendar*        gcal_event_get_calendar                     (GcalEvent          *self);
 
-void                 gcal_event_set_source                       (GcalEvent          *self,
-                                                                  ESource            *source);
+void                 gcal_event_set_calendar                     (GcalEvent          *self,
+                                                                  GcalCalendar       *calendar);
 
 const gchar*         gcal_event_get_summary                      (GcalEvent          *self);
 
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index 751b3dc1..7daefabe 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -60,6 +60,12 @@ typedef struct
   GcalManager        *manager;
 } MoveEventData;
 
+typedef struct
+{
+  GcalManager        *manager;
+  GList              *events;
+} GatherEventData;
+
 struct _GcalManager
 {
   GObject             parent;
@@ -124,13 +130,14 @@ gather_events (ECalDataModel         *data_model,
                time_t                 instance_end,
                gpointer               user_data)
 {
+  GatherEventData *data = user_data;
+  GcalCalendar *calendar;
   GcalEvent *event;
   GError *error;
-  GList **result;
 
   error = NULL;
-  result = user_data;
-  event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, &error);
+  calendar = g_hash_table_lookup (data->manager->clients, e_client_get_source (E_CLIENT (client)));
+  event = gcal_event_new (calendar, comp, &error);
 
   if (error)
     {
@@ -139,7 +146,7 @@ gather_events (ECalDataModel         *data_model,
       return TRUE;
     }
 
-  *result = g_list_append (*result, event);/* FIXME: add me sorted */
+  data->events = g_list_append (data->events, event);/* FIXME: add me sorted */
 
   return TRUE;
 }
@@ -309,8 +316,12 @@ on_event_created (GObject      *source_object,
     }
   else
     {
+      GcalCalendar *calendar;
+
       g_object_ref (data->event);
-      gcal_manager_set_default_source (data->manager, gcal_event_get_source (data->event));
+
+      calendar = gcal_event_get_calendar (data->event);
+      gcal_manager_set_default_source (data->manager, gcal_calendar_get_source (calendar));
       g_debug ("Event: %s created successfully", new_uid);
     }
 
@@ -781,6 +792,15 @@ gcal_manager_get_calendars (GcalManager *self)
   return g_hash_table_get_values (self->clients);
 }
 
+GcalCalendar*
+gcal_manager_get_calendar_from_source (GcalManager *self,
+                                       ESource     *source)
+{
+  g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
+
+  return g_hash_table_lookup (self->clients, source);
+}
+
 /**
  * gcal_manager_get_default_source:
  * @self: a #GcalManager
@@ -917,7 +937,10 @@ GList*
 gcal_manager_get_shell_search_events (GcalManager *self)
 {
   time_t range_start, range_end;
-  GList *list = NULL;
+  GatherEventData data = {
+    .manager = self,
+    .events = NULL,
+  };
 
   GCAL_ENTRY;
 
@@ -930,9 +953,9 @@ gcal_manager_get_shell_search_events (GcalManager *self)
                                       range_start,
                                       range_end,
                                       gather_events,
-                                      &list);
+                                      &data);
 
-  GCAL_RETURN (list);
+  GCAL_RETURN (data.events);
 }
 
 /**
@@ -1251,16 +1274,14 @@ gcal_manager_create_event (GcalManager *self,
   ECalComponent *component;
   GcalCalendar *calendar;
   AsyncOpsData *data;
-  ESource *source;
 
   GCAL_ENTRY;
 
   g_return_if_fail (GCAL_IS_MANAGER (self));
   g_return_if_fail (GCAL_IS_EVENT (event));
 
-  source = gcal_event_get_source (event);
   component = gcal_event_get_component (event);
-  calendar = g_hash_table_lookup (self->clients, source);
+  calendar = gcal_event_get_calendar (event);
 
   new_event_icalcomp = e_cal_component_get_icalcomponent (component);
 
@@ -1298,7 +1319,7 @@ gcal_manager_update_event (GcalManager           *self,
   g_return_if_fail (GCAL_IS_MANAGER (self));
   g_return_if_fail (GCAL_IS_EVENT (event));
 
-  calendar = g_hash_table_lookup (self->clients, gcal_event_get_source (event));
+  calendar = gcal_event_get_calendar (event);
   component = gcal_event_get_component (event);
 
   /*
@@ -1351,7 +1372,7 @@ gcal_manager_remove_event (GcalManager           *self,
   g_return_if_fail (GCAL_IS_EVENT (event));
 
   component = gcal_event_get_component (event);
-  calendar = g_hash_table_lookup (self->clients, gcal_event_get_source (event));
+  calendar = gcal_event_get_calendar (event);
   rid = NULL;
 
   e_cal_component_get_uid (component, &uid);
@@ -1428,7 +1449,7 @@ gcal_manager_move_event_to_source (GcalManager *self,
    * created, try to remove the old component. Data loss it the last
    * thing we want to happen here.
    */
-  calendar = g_hash_table_lookup (self->clients, gcal_event_get_source (event));
+  calendar = gcal_event_get_calendar (event);
 
   id = e_cal_component_get_id (ecomponent);
 
@@ -1470,7 +1491,10 @@ gcal_manager_get_events (GcalManager  *self,
                          icaltimetype *end_date)
 {
   time_t range_start, range_end;
-  GList *list = NULL;
+  GatherEventData data = {
+    .manager = self,
+    .events = NULL,
+  };
 
   GCAL_ENTRY;
 
@@ -1483,9 +1507,9 @@ gcal_manager_get_events (GcalManager  *self,
                                       range_start,
                                       range_end,
                                       gather_events,
-                                      &list);
+                                      &data);
 
-  GCAL_RETURN (list);
+  GCAL_RETURN (data.events);
 }
 
 /**
@@ -1520,14 +1544,18 @@ gcal_manager_get_event_from_shell_search (GcalManager *self,
                                           const gchar *uuid)
 {
   GcalEvent *new_event;
-  GList *l, *list;
+  GList *l;
   time_t range_start, range_end;
+  GatherEventData data = {
+    .manager = self,
+    .events = NULL,
+  };
+
 
   GCAL_ENTRY;
 
   g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
 
-  list = NULL;
   new_event = NULL;
 
   e_cal_data_model_get_subscriber_range (self->shell_search_data_model,
@@ -1539,9 +1567,9 @@ gcal_manager_get_event_from_shell_search (GcalManager *self,
                                       range_start,
                                       range_end,
                                       gather_events,
-                                      &list);
+                                      &data);
 
-  for (l = list; l != NULL; l = g_list_next (l))
+  for (l = data.events; l != NULL; l = g_list_next (l))
     {
       GcalEvent *event;
 
@@ -1554,7 +1582,7 @@ gcal_manager_get_event_from_shell_search (GcalManager *self,
         g_object_unref (event);
     }
 
-  g_list_free (list);
+  g_list_free (data.events);
 
   GCAL_RETURN (new_event);
 }
diff --git a/src/gcal-manager.h b/src/gcal-manager.h
index 2e1b68d8..cb76863b 100644
--- a/src/gcal-manager.h
+++ b/src/gcal-manager.h
@@ -35,6 +35,9 @@ GcalManager*         gcal_manager_new                            (void);
 ESource*             gcal_manager_get_source                     (GcalManager        *self,
                                                                   const gchar        *uid);
 
+GcalCalendar*        gcal_manager_get_calendar_from_source       (GcalManager        *self,
+                                                                  ESource            *source);
+
 GList*               gcal_manager_get_calendars                  (GcalManager        *self);
 
 ESource*             gcal_manager_get_default_source             (GcalManager        *self);
diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c
index c7569073..9d66cd88 100644
--- a/src/gcal-quick-add-popover.c
+++ b/src/gcal-quick-add-popover.c
@@ -639,6 +639,7 @@ edit_or_create_event (GcalQuickAddPopover *self,
                       GtkWidget           *button)
 {
   ECalComponent *component;
+  GcalCalendar *calendar;
   GcalManager *manager;
   GDateTime *date_start, *date_end;
   GTimeZone *tz;
@@ -652,6 +653,7 @@ edit_or_create_event (GcalQuickAddPopover *self,
 
   manager = gcal_context_get_manager (self->context);
   source = g_object_get_data (G_OBJECT (self->selected_row), "source");
+  calendar = gcal_manager_get_calendar_from_source (manager, source);
 
   single_day = gcal_date_time_compare_date (self->date_end, self->date_start) == 0;
   all_day = gcal_date_time_compare_date (self->date_end, self->date_start) > 1 ||
@@ -692,7 +694,7 @@ edit_or_create_event (GcalQuickAddPopover *self,
   /* Create an ECalComponent from the data above */
   component = build_component_from_details (summary, date_start, date_end);
 
-  event = gcal_event_new (source, component, NULL);
+  event = gcal_event_new (calendar, component, NULL);
   gcal_event_set_all_day (event, all_day);
 
   /* If we clicked edit button, send a signal; otherwise, create the event */
diff --git a/src/gcal-window.c b/src/gcal-window.c
index e2138221..3e03bbe8 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -891,14 +891,18 @@ create_event_detailed_cb (GcalView *view,
                           gpointer  end_span,
                           gpointer  user_data)
 {
+  g_autoptr (ESource) default_source = NULL;
   GcalWindow *window = GCAL_WINDOW (user_data);
+  GcalCalendar *default_calendar;
   GcalManager *manager;
   ECalComponent *comp;
   GcalEvent *event;
 
   manager = gcal_context_get_manager (window->context);
   comp = build_component_from_details ("", start_span, end_span);
-  event = gcal_event_new (gcal_manager_get_default_source (manager), comp, NULL);
+  default_source = gcal_manager_get_default_source (manager);
+  default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
+  event = gcal_event_new (default_calendar, comp, NULL);
 
   gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);
   gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
@@ -929,6 +933,7 @@ edit_dialog_closed (GtkDialog *dialog,
                     gpointer   user_data)
 {
   GcalRecurrenceModType mod;
+  GcalCalendar *calendar;
   GcalManager *manager;
   GcalWindow *window;
   GcalEditDialog *edit_dialog;
@@ -945,7 +950,8 @@ edit_dialog_closed (GtkDialog *dialog,
   event = gcal_edit_dialog_get_event (edit_dialog);
   view = GCAL_VIEW (window->views[window->active_view]);
   mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
-  source = gcal_event_get_source (event);
+  calendar = gcal_event_get_calendar (event);
+  source = gcal_calendar_get_source (calendar);
 
   if (!gcal_edit_dialog_get_recurrence_changed (edit_dialog) &&
       gcal_event_has_recurrence (event) &&
diff --git a/src/search/gcal-search-hit-event.c b/src/search/gcal-search-hit-event.c
index 9b1699d6..f4304f43 100644
--- a/src/search/gcal-search-hit-event.c
+++ b/src/search/gcal-search-hit-event.c
@@ -77,14 +77,14 @@ gcal_search_hit_event_get_icon_surface (DzlSuggestion *suggestion,
 {
   GcalSearchHitEvent *self;
   cairo_surface_t *surface;
-  ESource *source;
-  GdkRGBA color;
+  const GdkRGBA *color;
+  GcalCalendar *calendar;
 
   self = GCAL_SEARCH_HIT_EVENT (suggestion);
-  source = gcal_event_get_source (self->event);
+  calendar = gcal_event_get_calendar (self->event);
 
-  get_color_name_from_source (source, &color);
-  surface = get_circle_surface_from_color (&color, 16);
+  color = gcal_calendar_get_color (calendar);
+  surface = get_circle_surface_from_color (color, 16);
 
   /* Inject our custom style class into the given widget */
   gtk_style_context_add_class (gtk_widget_get_style_context (widget), "calendar-color-image");
diff --git a/src/search/gcal-search-model.c b/src/search/gcal-search-model.c
index d8871017..b8442068 100644
--- a/src/search/gcal-search-model.c
+++ b/src/search/gcal-search-model.c
@@ -21,6 +21,8 @@
 #define G_LOG_DOMAIN "GcalSearchModel"
 
 #include "e-cal-data-model.h"
+#include "gcal-application.h"
+#include "gcal-context.h"
 #include "gcal-debug.h"
 #include "gcal-search-hit.h"
 #include "gcal-search-hit-event.h"
@@ -98,6 +100,8 @@ gcal_search_model_component_added (ECalDataModelSubscriber *subscriber,
   g_autoptr (GcalEvent) event = NULL;
   g_autoptr (GError) error = NULL;
   GcalSearchModel *self;
+  GcalCalendar *calendar;
+  GcalContext *context;
   ESource *source;
 
   self = GCAL_SEARCH_MODEL (subscriber);
@@ -105,8 +109,11 @@ gcal_search_model_component_added (ECalDataModelSubscriber *subscriber,
   if (g_list_model_get_n_items (self->model) > self->max_results)
     return;
 
+  /* FIXME: propagate context to the model properly */
+  context = gcal_application_get_context (GCAL_APPLICATION (g_application_get_default ()));
   source = e_client_get_source (E_CLIENT (client));
-  event = gcal_event_new (source, component, &error);
+  calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (context), source);
+  event = gcal_event_new (calendar, component, &error);
 
   if (error)
     {
diff --git a/src/utils/gcal-utils.c b/src/utils/gcal-utils.c
index efcdd58e..ed0b5480 100644
--- a/src/utils/gcal-utils.c
+++ b/src/utils/gcal-utils.c
@@ -1102,13 +1102,13 @@ filter_event_list_by_uid_and_modtype (GList                 *widgets,
     {
       ECalComponentId *id;
       ECalComponent *component;
-      ESource *source;
+      GcalCalendar *calendar;
       g_autofree gchar *id_prefix;
 
       component = gcal_event_get_component (event);
-      source = gcal_event_get_source (event);
+      calendar = gcal_event_get_calendar (event);
       id = e_cal_component_get_id (component);
-      id_prefix = g_strdup_printf ("%s:%s", e_source_get_uid (source), id->uid);
+      id_prefix = g_strdup_printf ("%s:%s", gcal_calendar_get_id (calendar), id->uid);
 
       for (l = widgets; l != NULL; l = l->next)
         {
diff --git a/src/views/gcal-month-cell.c b/src/views/gcal-month-cell.c
index d58fbfb8..2503d50f 100644
--- a/src/views/gcal-month-cell.c
+++ b/src/views/gcal-month-cell.c
@@ -205,6 +205,7 @@ gcal_month_cell_drag_drop (GtkWidget      *widget,
 {
   GcalRecurrenceModType mod;
   GcalMonthCell *self;
+  GcalCalendar *calendar;
   GtkWidget *event_widget;
   GDateTime *start_dt, *end_dt;
   GcalEvent *event;
@@ -225,7 +226,8 @@ gcal_month_cell_drag_drop (GtkWidget      *widget,
     return FALSE;
 
   event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
-  source = gcal_event_get_source (event);
+  calendar = gcal_event_get_calendar (event);
+  source = gcal_calendar_get_source (calendar);
 
   if (gcal_event_has_recurrence (event) &&
       !ask_recurrence_modification_type (widget, &mod, source))
diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c
index 7f67ed93..f9b7a946 100644
--- a/src/views/gcal-month-view.c
+++ b/src/views/gcal-month-view.c
@@ -1242,6 +1242,7 @@ gcal_month_view_component_added (ECalDataModelSubscriber *subscriber,
 {
   g_autoptr (GcalEvent) event = NULL;
   GcalMonthView *self;
+  GcalCalendar *calendar;
   GtkWidget *event_widget;
   GError *error;
 
@@ -1249,7 +1250,9 @@ gcal_month_view_component_added (ECalDataModelSubscriber *subscriber,
 
   error = NULL;
   self = GCAL_MONTH_VIEW (subscriber);
-  event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, &error);
+  calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (self->context),
+                                                    e_client_get_source (E_CLIENT (client)));
+  event = gcal_event_new (calendar, comp, &error);
 
   if (error)
     {
@@ -1276,6 +1279,7 @@ gcal_month_view_component_modified (ECalDataModelSubscriber *subscriber,
 {
   g_autoptr (GcalEvent) event = NULL;
   GcalMonthView *self;
+  GcalCalendar *calendar;
   GtkWidget *new_widget;
   GError *error;
   GList *l;
@@ -1284,7 +1288,9 @@ gcal_month_view_component_modified (ECalDataModelSubscriber *subscriber,
 
   error = NULL;
   self = GCAL_MONTH_VIEW (subscriber);
-  event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, &error);
+  calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (self->context),
+                                                    e_client_get_source (E_CLIENT (client)));
+  event = gcal_event_new (calendar, comp, &error);
 
   if (error)
     {
diff --git a/src/views/gcal-week-grid.c b/src/views/gcal-week-grid.c
index adc8b4ae..2c4944f1 100644
--- a/src/views/gcal-week-grid.c
+++ b/src/views/gcal-week-grid.c
@@ -978,6 +978,7 @@ gcal_week_grid_drag_drop (GtkWidget      *widget,
   g_autoptr (GDateTime) week_start;
   g_autoptr (GDateTime) dnd_date;
   g_autoptr (GDateTime) new_end;
+  GcalCalendar *calendar;
   GtkWidget *event_widget;
   GcalEvent *event;
   ESource *source;
@@ -1010,7 +1011,8 @@ gcal_week_grid_drag_drop (GtkWidget      *widget,
     }
 
   event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
-  source = gcal_event_get_source (event);
+  calendar = gcal_event_get_calendar (event);
+  source = gcal_calendar_get_source (calendar);
 
   if (gcal_event_has_recurrence (event) &&
       !ask_recurrence_modification_type (widget, &mod, source))
diff --git a/src/views/gcal-week-view.c b/src/views/gcal-week-view.c
index 3e72d81d..03b3ddda 100644
--- a/src/views/gcal-week-view.c
+++ b/src/views/gcal-week-view.c
@@ -298,10 +298,13 @@ gcal_week_view_component_added (ECalDataModelSubscriber *subscriber,
 {
   GcalWeekView *self = GCAL_WEEK_VIEW (subscriber);
   g_autoptr (GcalEvent) event = NULL;
+  GcalCalendar *calendar;
 
   GCAL_ENTRY;
 
-  event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, NULL);
+  calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (self->context),
+                                                    e_client_get_source (E_CLIENT (client)));
+  event = gcal_event_new (calendar, comp, NULL);
 
   if (gcal_event_is_multiday (event) || gcal_event_get_all_day (event))
     gcal_week_header_add_event (GCAL_WEEK_HEADER (self->header), event);
diff --git a/src/views/gcal-year-view.c b/src/views/gcal-year-view.c
index c64f6010..7e11e260 100644
--- a/src/views/gcal-year-view.c
+++ b/src/views/gcal-year-view.c
@@ -308,14 +308,14 @@ add_event_to_day_array (GcalYearView  *year_view,
 {
   g_autoptr (GDateTime) second_date = NULL;
   g_autoptr (GDateTime) date = NULL;
-  GcalManager *manager;
+  GcalCalendar *calendar;
   GtkWidget *child_widget;
   GDateTime *dt_start, *dt_end;
   gboolean is_readonly;
   gint i;
 
-  manager = gcal_context_get_manager (year_view->context);
-  is_readonly = !gcal_manager_is_client_writable (manager, gcal_event_get_source (event));
+  calendar = gcal_event_get_calendar (event);
+  is_readonly = gcal_calendar_is_read_only (calendar);
 
   child_widget = gcal_event_widget_new (year_view->context, event);
   gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (child_widget), is_readonly);
@@ -1469,6 +1469,7 @@ navigator_drag_drop_cb (GcalYearView   *self,
         {
           GcalRecurrenceModType mod;
           GcalEventWidget *event_widget;
+          GcalCalendar *calendar;
           GcalEvent *event;
           GDateTime *start_dt, *end_dt;
           GDateTime *drop_date;
@@ -1476,7 +1477,8 @@ navigator_drag_drop_cb (GcalYearView   *self,
 
           event_widget = GCAL_EVENT_WIDGET (gtk_drag_get_source_widget (context));
           event = gcal_event_widget_get_event (event_widget);
-          source = gcal_event_get_source (event);
+          calendar = gcal_event_get_calendar (event);
+          source = gcal_calendar_get_source (calendar);
           mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
 
           if (gcal_event_has_recurrence (event) &&
@@ -1798,6 +1800,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
                                 ECalComponent           *comp)
 {
   g_autoptr (GcalEvent) event = NULL;
+  GcalCalendar *calendar;
   GcalYearView *self;
   GDateTime *event_start, *event_end;
   GError *error;
@@ -1807,7 +1810,9 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
 
   error = NULL;
   self = GCAL_YEAR_VIEW (subscriber);
-  event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, &error);
+  calendar = gcal_manager_get_calendar_from_source (gcal_context_get_manager (self->context),
+                                                    e_client_get_source (E_CLIENT (client)));
+  event = gcal_event_new (calendar, comp, &error);
 
   if (error)
     {


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