From 1118c7488165a72e2d4286e6a497f95cd1f9ac88 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 3 May 2019 20:46:32 -0300 Subject: [PATCH] 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; + const GdkRGBA *color; + ESource *source; - extension = E_SOURCE_SELECTABLE (e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR)); + color = gcal_calendar_get_color (calendar); + gcal_event_set_color (self, (GdkRGBA*) color); - /* calendar default color */ - if (!gdk_rgba_parse (&color, e_source_selectable_get_color (extension))) - gdk_rgba_parse (&color, "#ffffff"); - - 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 @@ -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) {