From 399b9d8d007f4dba7313eb62dc95a3222c812735 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 27 Mar 2020 12:53:04 -0300 Subject: [PATCH] Simplify calendar views We don't need a split subscription update step in GcalView anymore, since subscribers communicate range directly to the timeline now. --- src/core/gcal-manager.c | 25 ++++++++----------------- src/core/gcal-manager.h | 5 +---- src/gui/gcal-window.c | 29 +++++++++++++++++++++++------ src/views/gcal-month-view.c | 27 --------------------------- src/views/gcal-view.c | 19 ------------------- src/views/gcal-view.h | 4 ---- src/views/gcal-week-view.c | 23 ----------------------- src/views/gcal-year-view.c | 24 ------------------------ 8 files changed, 32 insertions(+), 124 deletions(-) diff --git a/src/core/gcal-manager.c b/src/core/gcal-manager.c index e9729c81..1be90450 100644 --- a/src/core/gcal-manager.c +++ b/src/core/gcal-manager.c @@ -788,28 +788,19 @@ gcal_manager_set_default_calendar (GcalManager *self, } /** - * gcal_manager_set_subscriber: + * gcal_manager_get_timeline: * @self: a #GcalManager - * @subscriber: a #ECalDataModelSubscriber - * @range_start: the start of the range - * @range_end: the end of the range * - * Sets the @subscriber to show events between @range_start - * and @range_end. + * Retrieves the default timeline of GNOME Calendar. + * + * Returns: (transfer none): a #GcalTimeline */ -void -gcal_manager_set_subscriber (GcalManager *self, - ECalDataModelSubscriber *subscriber, - time_t range_start, - time_t range_end) +GcalTimeline* +gcal_manager_get_timeline (GcalManager *self) { - GCAL_ENTRY; + g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL); - g_return_if_fail (GCAL_IS_MANAGER (self)); - - gcal_timeline_add_subscriber (self->timeline, GCAL_TIMELINE_SUBSCRIBER (subscriber)); - - GCAL_EXIT; + return self->timeline; } /** diff --git a/src/core/gcal-manager.h b/src/core/gcal-manager.h index f59add2d..79ba9105 100644 --- a/src/core/gcal-manager.h +++ b/src/core/gcal-manager.h @@ -43,10 +43,7 @@ GcalCalendar* gcal_manager_get_default_calendar (GcalManager void gcal_manager_set_default_calendar (GcalManager *self, GcalCalendar *calendar); -void gcal_manager_set_subscriber (GcalManager *self, - ECalDataModelSubscriber *subscriber, - time_t range_start, - time_t range_end); +GcalTimeline* gcal_manager_get_timeline (GcalManager *self); void gcal_manager_set_query (GcalManager *self, const gchar *query); diff --git a/src/gui/gcal-window.c b/src/gui/gcal-window.c index 0ebfab27..7f1a646d 100644 --- a/src/gui/gcal-window.c +++ b/src/gui/gcal-window.c @@ -30,6 +30,8 @@ #include "gcal-month-view.h" #include "gcal-quick-add-popover.h" #include "gcal-search-button.h" +#include "gcal-timeline.h" +#include "gcal-timeline-subscriber.h" #include "gcal-view.h" #include "gcal-weather-settings.h" #include "gcal-week-view.h" @@ -121,6 +123,7 @@ struct _GcalWindow /* day, week, month, year, list */ GtkWidget *views [6]; GtkWidget *edit_dialog; + gboolean subscribed; GcalContext *context; GcalWindowView active_view; @@ -233,6 +236,23 @@ update_today_button_sensitive (GcalWindow *window) GCAL_EXIT; } +static void +maybe_add_subscribers_to_timeline (GcalWindow *self) +{ + GcalTimeline *timeline; + + if (self->subscribed) + return; + + + timeline = gcal_manager_get_timeline (gcal_context_get_manager (self->context)); + gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->week_view)); + gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->month_view)); + gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->year_view)); + + self->subscribed = TRUE; +} + static void update_active_date (GcalWindow *window, GDateTime *new_date) @@ -248,15 +268,12 @@ update_active_date (GcalWindow *window, gcal_set_date_time (&window->active_date, new_date); for (i = GCAL_WINDOW_VIEW_WEEK; i <= GCAL_WINDOW_VIEW_YEAR; i++) - { - GcalView *view = GCAL_VIEW (window->views[i]); - - gcal_view_set_date (view, new_date); - gcal_view_update_subscription (view); - } + gcal_view_set_date (GCAL_VIEW (window->views[i]), new_date); update_today_button_sensitive (window); + maybe_add_subscribers_to_timeline (window); + GCAL_EXIT; } diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c index 7c575917..e4418106 100644 --- a/src/views/gcal-month-view.c +++ b/src/views/gcal-month-view.c @@ -1202,32 +1202,6 @@ gcal_month_view_get_children_by_uuid (GcalView *view, return filter_event_list_by_uid_and_modtype (children, mod, uuid); } -static void -gcal_month_view_update_subscription (GcalView *view) -{ - g_autoptr (GDateTime) date_start = NULL; - g_autoptr (GDateTime) date_end = NULL; - GcalMonthView *self; - time_t range_start; - time_t range_end; - - self = GCAL_MONTH_VIEW (view); - - g_assert (self->date != NULL); - date_start = g_date_time_new_local (g_date_time_get_year (self->date), - g_date_time_get_month (self->date), - 1, 0, 0, 0); - range_start = g_date_time_to_unix (date_start); - - date_end = g_date_time_add_months (date_start, 1); - range_end = g_date_time_to_unix (date_end); - - gcal_manager_set_subscriber (gcal_context_get_manager (self->context), - E_CAL_DATA_MODEL_SUBSCRIBER (self), - range_start, - range_end); -} - static GDateTime* gcal_month_view_get_next_date (GcalView *view) { @@ -1254,7 +1228,6 @@ gcal_view_interface_init (GcalViewInterface *iface) iface->set_date = gcal_month_view_set_date; iface->clear_marks = gcal_month_view_clear_marks; iface->get_children_by_uuid = gcal_month_view_get_children_by_uuid; - iface->update_subscription = gcal_month_view_update_subscription; iface->get_next_date = gcal_month_view_get_next_date; iface->get_previous_date = gcal_month_view_get_previous_date; } diff --git a/src/views/gcal-view.c b/src/views/gcal-view.c index 8894c53a..5defdbab 100644 --- a/src/views/gcal-view.c +++ b/src/views/gcal-view.c @@ -192,25 +192,6 @@ gcal_view_get_children_by_uuid (GcalView *view, return GCAL_VIEW_GET_IFACE (view)->get_children_by_uuid (view, mod, uuid); } -/** - * gcal_view_update_subscription: - * @self: a #GcalView - * - * Asks @self to update its #ECalDataModel subscription range. This - * is called after gcal_view_set_date(), and it's safe to assume that - * @self's active date is correct. - */ -void -gcal_view_update_subscription (GcalView *self) -{ - g_return_if_fail (GCAL_IS_VIEW (self)); - g_return_if_fail (GCAL_VIEW_GET_IFACE (self)->update_subscription); - - g_debug ("Updating subscription of %s", G_OBJECT_TYPE_NAME (self)); - - GCAL_VIEW_GET_IFACE (self)->update_subscription (self); -} - /** * gcal_view_get_next_date: * @self: a #GcalView diff --git a/src/views/gcal-view.h b/src/views/gcal-view.h index f7aedc34..0508fcfb 100644 --- a/src/views/gcal-view.h +++ b/src/views/gcal-view.h @@ -48,8 +48,6 @@ struct _GcalViewInterface void (*set_date) (GcalView *view, GDateTime *date); - void (*update_subscription) (GcalView *self); - GDateTime* (*get_next_date) (GcalView *self); GDateTime* (*get_previous_date) (GcalView *self); @@ -75,8 +73,6 @@ GList* gcal_view_get_children_by_uuid (GcalView GcalRecurrenceModType mod, const gchar *uuid); -void gcal_view_update_subscription (GcalView *self); - GDateTime* gcal_view_get_next_date (GcalView *self); GDateTime* gcal_view_get_previous_date (GcalView *self); diff --git a/src/views/gcal-week-view.c b/src/views/gcal-week-view.c index 7d3cc3b2..0ebfecde 100644 --- a/src/views/gcal-week-view.c +++ b/src/views/gcal-week-view.c @@ -230,28 +230,6 @@ gcal_week_view_clear_marks (GcalView *view) gcal_week_grid_clear_marks (GCAL_WEEK_GRID (self->week_grid)); } -static void -gcal_week_view_update_subscription (GcalView *view) -{ - g_autoptr (GDateTime) date_start = NULL; - g_autoptr (GDateTime) date_end = NULL; - GcalWeekView *self; - time_t range_start; - time_t range_end; - - self = GCAL_WEEK_VIEW (view); - date_start = gcal_date_time_get_start_of_week (self->date); - range_start = g_date_time_to_unix (date_start); - - date_end = gcal_date_time_get_end_of_week (self->date); - range_end = g_date_time_to_unix (date_end); - - gcal_manager_set_subscriber (gcal_context_get_manager (self->context), - E_CAL_DATA_MODEL_SUBSCRIBER (self), - range_start, - range_end); -} - static GDateTime* gcal_week_view_get_next_date (GcalView *view) { @@ -278,7 +256,6 @@ gcal_view_interface_init (GcalViewInterface *iface) iface->set_date = gcal_week_view_set_date; iface->get_children_by_uuid = gcal_week_view_get_children_by_uuid; iface->clear_marks = gcal_week_view_clear_marks; - iface->update_subscription = gcal_week_view_update_subscription; iface->get_next_date = gcal_week_view_get_next_date; iface->get_previous_date = gcal_week_view_get_previous_date; } diff --git a/src/views/gcal-year-view.c b/src/views/gcal-year-view.c index 53e34fba..9163cd52 100644 --- a/src/views/gcal-year-view.c +++ b/src/views/gcal-year-view.c @@ -1787,28 +1787,6 @@ gcal_year_view_get_children_by_uuid (GcalView *view, return result; } -static void -gcal_year_view_update_subscription (GcalView *view) -{ - g_autoptr (GDateTime) date_start = NULL; - g_autoptr (GDateTime) date_end = NULL; - GcalYearView *self; - time_t range_start; - time_t range_end; - - self = GCAL_YEAR_VIEW (view); - date_start = g_date_time_new_local (g_date_time_get_year (self->date), 1, 1, 0, 0, 0); - range_start = g_date_time_to_unix (date_start); - - date_end = g_date_time_add_years (date_start, 1); - range_end = g_date_time_to_unix (date_end); - - gcal_manager_set_subscriber (gcal_context_get_manager (self->context), - E_CAL_DATA_MODEL_SUBSCRIBER (self), - range_start, - range_end); -} - static GDateTime* gcal_year_view_get_next_date (GcalView *view) { @@ -1831,11 +1809,9 @@ gcal_year_view_get_previous_date (GcalView *view) static void gcal_view_interface_init (GcalViewInterface *iface) { - /* FIXME: implement what's needed */ iface->get_date = gcal_year_view_get_date; iface->set_date = gcal_year_view_set_date; iface->get_children_by_uuid = gcal_year_view_get_children_by_uuid; - iface->update_subscription = gcal_year_view_update_subscription; iface->get_next_date = gcal_year_view_get_next_date; iface->get_previous_date = gcal_year_view_get_previous_date; }