[gnome-calendar/gbsneto/range: 3/12] event: Add helper API to return a GcalRange



commit 7a0fe54baa681aec321d2fc6d7e0d4671d189b0b
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Apr 12 21:08:21 2020 -0300

    event: Add helper API to return a GcalRange

 src/core/gcal-event.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/core/gcal-event.h |  5 ++++-
 2 files changed, 51 insertions(+), 1 deletion(-)
---
diff --git a/src/core/gcal-event.c b/src/core/gcal-event.c
index 8f28a89f..a35ae48f 100644
--- a/src/core/gcal-event.c
+++ b/src/core/gcal-event.c
@@ -89,6 +89,7 @@ struct _GcalEvent
 
   GDateTime          *dt_start;
   GDateTime          *dt_end;
+  GcalRange          *range;
 
   GdkRGBA            *color;
   GBinding           *color_binding;
@@ -124,6 +125,7 @@ enum {
   PROP_DATE_START,
   PROP_LOCATION,
   PROP_CALENDAR,
+  PROP_RANGE,
   PROP_SUMMARY,
   PROP_TIMEZONE,
   PROP_UID,
@@ -447,6 +449,7 @@ gcal_event_finalize (GObject *object)
 
   g_clear_pointer (&self->dt_start, g_date_time_unref);
   g_clear_pointer (&self->dt_end, g_date_time_unref);
+  g_clear_pointer (&self->range, gcal_range_unref);
   g_clear_pointer (&self->summary, g_free);
   g_clear_pointer (&self->location, g_free);
   g_clear_pointer (&self->description, g_free);
@@ -502,6 +505,10 @@ gcal_event_get_property (GObject    *object,
       g_value_set_string (value, gcal_event_get_location (self));
       break;
 
+    case PROP_RANGE:
+      g_value_take_boxed (value, gcal_event_get_range (self));
+      break;
+
     case PROP_SUMMARY:
       g_value_set_string (value, gcal_event_get_summary (self));
       break;
@@ -676,6 +683,17 @@ gcal_event_class_init (GcalEventClass *klass)
                                                    "",
                                                    G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | 
G_PARAM_STATIC_STRINGS);
 
+  /**
+  * GcalEvent::range:
+  *
+  * The range of the event, as a combination of the start and end dates.
+  */
+  properties[PROP_RANGE] = g_param_spec_boxed ("range",
+                                               "Range of the event",
+                                               "The time range of the event",
+                                               GCAL_TYPE_RANGE,
+                                               G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | 
G_PARAM_STATIC_STRINGS);
+
   /**
   * GcalEvent::recurrence:
   *
@@ -902,6 +920,8 @@ gcal_event_set_date_end (GcalEvent *self,
     {
       ECalComponentDateTime *component_dt;
 
+      g_clear_pointer (&self->range, gcal_range_unref);
+
       /* Setup the ECalComponent's datetime value */
       component_dt = build_component_from_datetime (self, dt);
 
@@ -909,6 +929,7 @@ gcal_event_set_date_end (GcalEvent *self,
       e_cal_component_commit_sequence (self->component);
 
       g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DATE_END]);
+      g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RANGE]);
 
       e_cal_component_datetime_free (component_dt);
     }
@@ -947,6 +968,8 @@ gcal_event_set_date_start (GcalEvent *self,
     {
       ECalComponentDateTime *component_dt;
 
+      g_clear_pointer (&self->range, gcal_range_unref);
+
       /* Setup the ECalComponent's datetime value */
       component_dt = build_component_from_datetime (self, dt);
 
@@ -954,11 +977,35 @@ gcal_event_set_date_start (GcalEvent *self,
       e_cal_component_commit_sequence (self->component);
 
       g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DATE_START]);
+      g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RANGE]);
 
       e_cal_component_datetime_free (component_dt);
     }
 }
 
+/**
+ * gcal_event_get_range:
+ * @self: a #GcalEvent
+ *
+ * Retrieves the range of @self. This is a simple combination of
+ * the start and end dates.
+ *
+ * Returns: (transfer full): a #GcalRange
+ */
+GcalRange*
+gcal_event_get_range (GcalEvent *self)
+{
+  g_return_val_if_fail (GCAL_IS_EVENT (self), NULL);
+
+  if (!self->range)
+    {
+      self->range = gcal_range_new (gcal_event_get_date_start (self),
+                                    gcal_event_get_date_end (self));
+    }
+
+  return self->range;
+}
+
 /**
  * gcal_event_get_description:
  * @self a #GcalEvent
diff --git a/src/core/gcal-event.h b/src/core/gcal-event.h
index be6e6c0c..bd036d5e 100644
--- a/src/core/gcal-event.h
+++ b/src/core/gcal-event.h
@@ -1,6 +1,6 @@
 /* gcal-event.h
  *
- * Copyright (C) 2016 Georges Basile Stavracas Neto <georges stavracas gmail com>
+ * Copyright (C) 2016-2020 Georges Basile Stavracas Neto <georges stavracas gmail com>
  *
  * 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
@@ -20,6 +20,7 @@
 #define GCAL_EVENT_H
 
 #include "gcal-calendar.h"
+#include "gcal-range.h"
 #include "gcal-recurrence.h"
 
 #include <glib-object.h>
@@ -74,6 +75,8 @@ GDateTime*           gcal_event_get_date_start                   (GcalEvent
 void                 gcal_event_set_date_start                   (GcalEvent          *self,
                                                                   GDateTime          *dt);
 
+GcalRange*           gcal_event_get_range                        (GcalEvent          *self);
+
 const gchar*         gcal_event_get_description                  (GcalEvent          *self);
 
 void                 gcal_event_set_description                  (GcalEvent          *self,


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