diff --git a/src/core/gcal-event.c b/src/core/gcal-event.c index f415b74f..98335816 100644 --- a/src/core/gcal-event.c +++ b/src/core/gcal-event.c @@ -1890,8 +1890,8 @@ gcal_event_is_within_range (GcalEvent *self, if (gcal_event_get_all_day (self)) { - return gcal_date_time_compare_date (range_end, event_start) < 0 && - gcal_date_time_compare_date (range_start, event_end) > 0; + return gcal_date_time_compare_date (range_end, event_start) > 0 && + gcal_date_time_compare_date (event_end, range_start) > 0; } return g_date_time_compare (range_end, event_start) > 0 && diff --git a/src/core/gcal-shell-search-provider.c b/src/core/gcal-shell-search-provider.c index a9391f00..8711da49 100644 --- a/src/core/gcal-shell-search-provider.c +++ b/src/core/gcal-shell-search-provider.c @@ -384,20 +384,12 @@ on_manager_calendar_removed_cb (GcalManager *manager, * GcalTimelineSubscriber iface */ -static GDateTime* -gcal_shell_search_provider_get_range_start (GcalTimelineSubscriber *subscriber) +static GcalRange* +gcal_shell_search_provider_get_range (GcalTimelineSubscriber *subscriber) { GcalShellSearchProvider *self = GCAL_SHELL_SEARCH_PROVIDER (subscriber); - return g_date_time_ref (self->range_start); -} - -static GDateTime* -gcal_shell_search_provider_get_range_end (GcalTimelineSubscriber *subscriber) -{ - GcalShellSearchProvider *self = GCAL_SHELL_SEARCH_PROVIDER (subscriber); - - return g_date_time_ref (self->range_end); + return gcal_range_new (self->range_start, self->range_end, GCAL_RANGE_DEFAULT); } static void @@ -437,8 +429,7 @@ gcal_shell_search_provider_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) { - iface->get_range_start = gcal_shell_search_provider_get_range_start; - iface->get_range_end = gcal_shell_search_provider_get_range_end; + iface->get_range = gcal_shell_search_provider_get_range; iface->add_event = gcal_shell_search_provider_add_event; iface->update_event = gcal_shell_search_provider_update_event; iface->remove_event = gcal_shell_search_provider_remove_event; diff --git a/src/core/gcal-timeline-subscriber.c b/src/core/gcal-timeline-subscriber.c index 5a907ab4..f4f979e2 100644 --- a/src/core/gcal-timeline-subscriber.c +++ b/src/core/gcal-timeline-subscriber.c @@ -48,35 +48,19 @@ gcal_timeline_subscriber_default_init (GcalTimelineSubscriberInterface *iface) } /** - * gcal_timeline_subscriber_get_range_start: + * gcal_timeline_subscriber_get_range: * @self: a #GcalTimelineSubscriber * - * Retrieves the start of the range of @self. + * Retrieves the range of @self. * - * Returns: (transfer full): a #GDateTime + * Returns: (transfer full): a #GcalRange */ -GDateTime* -gcal_timeline_subscriber_get_range_start (GcalTimelineSubscriber *self) +GcalRange* +gcal_timeline_subscriber_get_range (GcalTimelineSubscriber *self) { g_return_val_if_fail (GCAL_IS_TIMELINE_SUBSCRIBER (self), NULL); - return GCAL_TIMELINE_SUBSCRIBER_GET_IFACE (self)->get_range_start (self); -} - -/** - * gcal_timeline_subscriber_get_range_end: - * @self: a #GcalTimelineSubscriber - * - * Retrieves the end of the range of @self. - * - * Returns: (transfer full): a #GDateTime - */ -GDateTime* -gcal_timeline_subscriber_get_range_end (GcalTimelineSubscriber *self) -{ - g_return_val_if_fail (GCAL_IS_TIMELINE_SUBSCRIBER (self), NULL); - - return GCAL_TIMELINE_SUBSCRIBER_GET_IFACE (self)->get_range_end (self); + return GCAL_TIMELINE_SUBSCRIBER_GET_IFACE (self)->get_range (self); } /** diff --git a/src/core/gcal-timeline-subscriber.h b/src/core/gcal-timeline-subscriber.h index f916953e..2ad5966c 100644 --- a/src/core/gcal-timeline-subscriber.h +++ b/src/core/gcal-timeline-subscriber.h @@ -25,6 +25,7 @@ #define LIBICAL_GLIB_UNSTABLE_API #include +#include "gcal-range.h" #include "gcal-types.h" G_BEGIN_DECLS @@ -37,8 +38,7 @@ struct _GcalTimelineSubscriberInterface { GTypeInterface parent; - GDateTime* (*get_range_start) (GcalTimelineSubscriber *self); - GDateTime* (*get_range_end) (GcalTimelineSubscriber *self); + GcalRange* (*get_range) (GcalTimelineSubscriber *self); void (*add_event) (GcalTimelineSubscriber *self, GcalEvent *event); @@ -50,9 +50,7 @@ struct _GcalTimelineSubscriberInterface GcalEvent *event); }; -GDateTime* gcal_timeline_subscriber_get_range_start (GcalTimelineSubscriber *self); - -GDateTime* gcal_timeline_subscriber_get_range_end (GcalTimelineSubscriber *self); +GcalRange* gcal_timeline_subscriber_get_range (GcalTimelineSubscriber *self); void gcal_timeline_subscriber_range_changed (GcalTimelineSubscriber *self); diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c index 5732a313..6f1c703f 100644 --- a/src/core/gcal-timeline.c +++ b/src/core/gcal-timeline.c @@ -57,12 +57,6 @@ typedef struct GcalTimeline *timeline; } TimelineSource; -typedef struct -{ - GDateTime *range_start; - GDateTime *range_end; -} SubscriberData; - struct _GcalTimeline { GObject parent_instance; @@ -163,26 +157,6 @@ increase_completed_calendars (GcalTimeline *self) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COMPLETE]); } -static SubscriberData* -subscriber_data_new (GcalTimelineSubscriber *subscriber) -{ - SubscriberData *subscriber_data; - - subscriber_data = g_new0 (SubscriberData, 1); - subscriber_data->range_start = gcal_timeline_subscriber_get_range_start (subscriber); - subscriber_data->range_end = gcal_timeline_subscriber_get_range_end (subscriber); - - return g_steal_pointer (&subscriber_data); -} - -static void -subscriber_data_free (SubscriberData *subscriber_data) -{ - gcal_clear_date_time (&subscriber_data->range_start); - gcal_clear_date_time (&subscriber_data->range_end); - g_free (subscriber_data); -} - static void add_event_to_subscriber (GcalTimelineSubscriber *subscriber, GcalEvent *event) @@ -223,9 +197,11 @@ subscriber_contains_event (GcalTimelineSubscriber *subscriber, { g_autoptr (GDateTime) subscriber_range_start = NULL; g_autoptr (GDateTime) subscriber_range_end = NULL; + g_autoptr (GcalRange) subscriber_range = NULL; - subscriber_range_start = gcal_timeline_subscriber_get_range_start (subscriber); - subscriber_range_end = gcal_timeline_subscriber_get_range_end (subscriber); + subscriber_range = gcal_timeline_subscriber_get_range (subscriber); + subscriber_range_start = gcal_range_get_start (subscriber_range); + subscriber_range_end = gcal_range_get_end (subscriber_range); return gcal_event_is_within_range (event, subscriber_range_start, subscriber_range_end); } @@ -250,11 +226,13 @@ update_range (GcalTimeline *self) g_hash_table_iter_init (&iter, self->subscribers); while (g_hash_table_iter_next (&iter, (gpointer*) &subscriber, NULL)) { + g_autoptr (GcalRange) subscriber_range = NULL; g_autoptr (GDateTime) subscriber_start = NULL; g_autoptr (GDateTime) subscriber_end = NULL; - subscriber_start = gcal_timeline_subscriber_get_range_start (subscriber); - subscriber_end = gcal_timeline_subscriber_get_range_end (subscriber); + subscriber_range = gcal_timeline_subscriber_get_range (subscriber); + subscriber_start = gcal_range_get_start (subscriber_range); + subscriber_end = gcal_range_get_end (subscriber_range); if (!new_range_start || g_date_time_compare (subscriber_start, new_range_start) < 0) { @@ -427,9 +405,9 @@ add_cached_events_to_subscriber (GcalTimeline *self, GCAL_ENTRY; - subscriber_start = gcal_timeline_subscriber_get_range_start (subscriber); - subscriber_end = gcal_timeline_subscriber_get_range_end (subscriber); - subscriber_range = gcal_range_new (subscriber_start, subscriber_end, GCAL_RANGE_DEFAULT); + subscriber_range = gcal_timeline_subscriber_get_range (subscriber); + subscriber_start = gcal_range_get_start (subscriber_range); + subscriber_end = gcal_range_get_end (subscriber_range); events_to_add = gcal_range_tree_get_data_at_range (self->events, subscriber_range); @@ -460,18 +438,13 @@ update_subscriber_range (GcalTimeline *self, { g_autoptr (GcalRange) old_range = NULL; g_autoptr (GcalRange) new_range = NULL; - SubscriberData *subscriber_data; - GCAL_ENTRY; - subscriber_data = g_hash_table_lookup (self->subscribers, subscriber); - g_assert (subscriber_data != NULL); + old_range = g_hash_table_lookup (self->subscribers, subscriber); + g_assert (old_range != NULL); - old_range = gcal_range_new (subscriber_data->range_start, subscriber_data->range_end, GCAL_RANGE_DEFAULT); - new_range = gcal_range_new_take (gcal_timeline_subscriber_get_range_start (subscriber), - gcal_timeline_subscriber_get_range_end (subscriber), - GCAL_RANGE_DEFAULT); + new_range = gcal_timeline_subscriber_get_range (subscriber); /* Diff new and old event ranges */ calculate_changed_events (self, subscriber, old_range, new_range); @@ -480,11 +453,7 @@ update_subscriber_range (GcalTimeline *self, gcal_range_tree_remove_data (self->subscriber_ranges, subscriber); gcal_range_tree_add_range (self->subscriber_ranges, new_range, subscriber); - gcal_clear_date_time (&subscriber_data->range_start); - subscriber_data->range_start = gcal_range_get_start (new_range); - - gcal_clear_date_time (&subscriber_data->range_end); - subscriber_data->range_end = gcal_range_get_end (new_range); + g_hash_table_insert (self->subscribers, g_object_ref (subscriber), g_steal_pointer (&new_range)); GCAL_EXIT; } @@ -861,7 +830,7 @@ gcal_timeline_init (GcalTimeline *self) self->cancellable = g_cancellable_new (); self->events = gcal_range_tree_new_with_free_func (g_object_unref); self->calendars = g_hash_table_new_full (NULL, NULL, NULL, g_object_unref); - self->subscribers = g_hash_table_new_full (NULL, NULL, g_object_unref, (GDestroyNotify) subscriber_data_free); + self->subscribers = g_hash_table_new_full (NULL, NULL, g_object_unref, (GDestroyNotify) gcal_range_unref); self->subscriber_ranges = gcal_range_tree_new (); self->event_queue = g_queue_new (); @@ -952,7 +921,7 @@ void gcal_timeline_add_subscriber (GcalTimeline *self, GcalTimelineSubscriber *subscriber) { - SubscriberData *subscriber_data; + g_autoptr (GcalRange) subscriber_range = NULL; g_return_if_fail (GCAL_IS_TIMELINE (self)); g_return_if_fail (GCAL_IS_TIMELINE_SUBSCRIBER (subscriber)); @@ -964,9 +933,9 @@ gcal_timeline_add_subscriber (GcalTimeline *self, g_debug ("Adding subscriber %s to timeline %p", G_OBJECT_TYPE_NAME (subscriber), self); - subscriber_data = subscriber_data_new (subscriber); + subscriber_range = gcal_timeline_subscriber_get_range (subscriber); - g_hash_table_insert (self->subscribers, g_object_ref (subscriber), g_steal_pointer (&subscriber_data)); + g_hash_table_insert (self->subscribers, g_object_ref (subscriber), gcal_range_ref (subscriber_range)); g_signal_connect_object (subscriber, "range-changed", G_CALLBACK (on_subscriber_range_changed_cb), diff --git a/src/gui/gcal-edit-dialog.c b/src/gui/gcal-edit-dialog.c index 993f868b..8c96fe80 100644 --- a/src/gui/gcal-edit-dialog.c +++ b/src/gui/gcal-edit-dialog.c @@ -402,7 +402,7 @@ format_datetime_for_display (GDateTime *date, string = g_string_new (""); now = g_date_time_new_now_local (); - days_diff = gcal_date_time_compare_date (now, date); + days_diff = gcal_date_time_compare_date (date, now); switch (days_diff) { diff --git a/src/gui/gcal-quick-add-popover.c b/src/gui/gcal-quick-add-popover.c index 42c0a108..6852e147 100644 --- a/src/gui/gcal-quick-add-popover.c +++ b/src/gui/gcal-quick-add-popover.c @@ -1,6 +1,6 @@ /* gcal-quick-add-popover.c * - * Copyright (C) 2016 Georges Basile Stavracas Neto + * Copyright (C) 2016-2020 Georges Basile Stavracas Neto * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/search/gcal-search-model.c b/src/search/gcal-search-model.c index bf4f0932..ba359250 100644 --- a/src/search/gcal-search-model.c +++ b/src/search/gcal-search-model.c @@ -1,6 +1,6 @@ /* gcal-search-model.c * - * Copyright 2019 Georges Basile Stavracas Neto + * Copyright 2019-2020 Georges Basile Stavracas Neto * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -96,20 +96,12 @@ compare_search_hits_cb (gconstpointer a, return gcal_search_hit_compare (hit_a, hit_b); } -static GDateTime* -gcal_search_model_get_range_start (GcalTimelineSubscriber *subscriber) +static GcalRange* +gcal_search_model_get_range (GcalTimelineSubscriber *subscriber) { GcalSearchModel *self = GCAL_SEARCH_MODEL (subscriber); - return g_date_time_ref (self->range_start); -} - -static GDateTime* -gcal_search_model_get_range_end (GcalTimelineSubscriber *subscriber) -{ - GcalSearchModel *self = GCAL_SEARCH_MODEL (subscriber); - - return g_date_time_ref (self->range_end); + return gcal_range_new (self->range_start, self->range_end, GCAL_RANGE_DEFAULT); } static void @@ -149,8 +141,7 @@ gcal_search_model_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) { - iface->get_range_start = gcal_search_model_get_range_start; - iface->get_range_end = gcal_search_model_get_range_end; + iface->get_range = gcal_search_model_get_range; iface->add_event = gcal_search_model_add_event; iface->update_event = gcal_search_model_update_event; iface->remove_event = gcal_search_model_remove_event; diff --git a/src/utils/gcal-date-time-utils.c b/src/utils/gcal-date-time-utils.c index ac2791be..733e4109 100644 --- a/src/utils/gcal-date-time-utils.c +++ b/src/utils/gcal-date-time-utils.c @@ -1,6 +1,6 @@ /* gcal-date-time-utils.c * - * Copyright 2019 Georges Basile Stavracas Neto + * Copyright 2019-2020 Georges Basile Stavracas Neto * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -148,7 +148,7 @@ gcal_date_time_compare_date (GDateTime *dt1, g_date_time_get_month (dt2), g_date_time_get_year (dt2)); - return g_date_days_between (&d1, &d2); + return g_date_days_between (&d2, &d1); } /** diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c index 23c69dd0..5bd27f71 100644 --- a/src/views/gcal-month-view.c +++ b/src/views/gcal-month-view.c @@ -1,7 +1,7 @@ /* gcal-month-view.c * * Copyright © 2015 Erick Pérez Castellanos - * 2017 Georges Basile Stavracas Neto + * 2017-2020 Georges Basile Stavracas Neto * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1000,15 +1000,15 @@ update_month_cells (GcalMonthView *self) selection_end = selection_start; /* Swap dates if end is before start */ - if (gcal_date_time_compare_date (selection_end, selection_start) < 0) + if (gcal_date_time_compare_date (selection_start, selection_end) < 0) { GDateTime *aux = selection_end; selection_end = selection_start; selection_start = aux; } - selected = gcal_date_time_compare_date (gcal_month_cell_get_date (cell), selection_start) >= 0 && - gcal_date_time_compare_date (gcal_month_cell_get_date (cell), selection_end) <= 0; + selected = gcal_date_time_compare_date (selection_start, gcal_month_cell_get_date (cell)) >= 0 && + gcal_date_time_compare_date (selection_end, gcal_month_cell_get_date (cell)) <= 0; } gcal_month_cell_set_selected (cell, selected); @@ -1263,23 +1263,20 @@ gtk_buildable_interface_init (GtkBuildableIface *iface) * GcalTimelineSubscriber iface */ -static GDateTime* -gcal_month_view_get_range_start (GcalTimelineSubscriber *subscriber) -{ - GcalMonthView *self = GCAL_MONTH_VIEW (subscriber); - - return g_date_time_new_local (g_date_time_get_year (self->date), - g_date_time_get_month (self->date), - 1, 0, 0, 0); -} - -static GDateTime* -gcal_month_view_get_range_end (GcalTimelineSubscriber *subscriber) +static GcalRange* +gcal_month_view_get_range (GcalTimelineSubscriber *subscriber) { g_autoptr (GDateTime) month_start = NULL; + g_autoptr (GDateTime) month_end = NULL; + GcalMonthView *self; - month_start = gcal_month_view_get_range_start (subscriber); - return g_date_time_add_months (month_start, 1); + self = GCAL_MONTH_VIEW (subscriber); + month_start = g_date_time_new_local (g_date_time_get_year (self->date), + g_date_time_get_month (self->date), + 1, 0, 0, 0); + month_end = g_date_time_add_months (month_start, 1); + + return gcal_range_new (month_start, month_end, GCAL_RANGE_DEFAULT); } static void @@ -1371,8 +1368,7 @@ gcal_month_view_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) { - iface->get_range_start = gcal_month_view_get_range_start; - iface->get_range_end = gcal_month_view_get_range_end; + iface->get_range = gcal_month_view_get_range; iface->add_event = gcal_month_view_add_event; iface->update_event = gcal_month_view_update_event; iface->remove_event = gcal_month_view_remove_event; diff --git a/src/views/gcal-week-view.c b/src/views/gcal-week-view.c index 87067cb3..5f8e5452 100644 --- a/src/views/gcal-week-view.c +++ b/src/views/gcal-week-view.c @@ -318,20 +318,14 @@ update_hours_sidebar_size (GcalWeekView *self) * GcalTimelineSubscriber iface */ -static GDateTime* -gcal_week_view_get_range_start (GcalTimelineSubscriber *subscriber) +static GcalRange* +gcal_week_view_get_range (GcalTimelineSubscriber *subscriber) { GcalWeekView *self = GCAL_WEEK_VIEW (subscriber); - return gcal_date_time_get_start_of_week (self->date); -} - -static GDateTime* -gcal_week_view_get_range_end (GcalTimelineSubscriber *subscriber) -{ - GcalWeekView *self = GCAL_WEEK_VIEW (subscriber); - - return gcal_date_time_get_end_of_week (self->date); + return gcal_range_new_take (gcal_date_time_get_start_of_week (self->date), + gcal_date_time_get_end_of_week (self->date), + GCAL_RANGE_DEFAULT); } static void @@ -386,8 +380,7 @@ gcal_week_view_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) { - iface->get_range_start = gcal_week_view_get_range_start; - iface->get_range_end = gcal_week_view_get_range_end; + iface->get_range = gcal_week_view_get_range; iface->add_event = gcal_week_view_add_event; iface->update_event = gcal_week_view_update_event; iface->remove_event = gcal_week_view_remove_event; diff --git a/src/views/gcal-year-view.c b/src/views/gcal-year-view.c index d47efdaf..76f875e6 100644 --- a/src/views/gcal-year-view.c +++ b/src/views/gcal-year-view.c @@ -1569,22 +1569,18 @@ navigator_drag_leave_cb (GcalYearView *self, * GcalTimelineSubscriber implementation */ -static GDateTime* -gcal_year_view_get_range_start (GcalTimelineSubscriber *subscriber) +static GcalRange* +gcal_year_view_get_range (GcalTimelineSubscriber *subscriber) { - GcalYearView *self = GCAL_YEAR_VIEW (subscriber); + g_autoptr (GDateTime) start = NULL; + g_autoptr (GDateTime) end = NULL; + GcalYearView *self; - return g_date_time_new_local (g_date_time_get_year (self->date), - 1, 1, 0, 0, 0); -} + self = GCAL_YEAR_VIEW (subscriber); + start = g_date_time_new_local (g_date_time_get_year (self->date), 1, 1, 0, 0, 0); + end = g_date_time_add_years (start, 1); -static GDateTime* -gcal_year_view_get_range_end (GcalTimelineSubscriber *subscriber) -{ - GcalYearView *self = GCAL_YEAR_VIEW (subscriber); - - return g_date_time_new_local (g_date_time_get_year (self->date) + 1, - 1, 1, 0, 0, 0); + return gcal_range_new (start, end, GCAL_RANGE_DEFAULT); } static void @@ -1714,8 +1710,7 @@ gcal_year_view_update_event (GcalTimelineSubscriber *subscriber, static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) { - iface->get_range_start = gcal_year_view_get_range_start; - iface->get_range_end = gcal_year_view_get_range_end; + iface->get_range = gcal_year_view_get_range; iface->add_event = gcal_year_view_add_event; iface->remove_event = gcal_year_view_remove_event; iface->update_event = gcal_year_view_update_event;