Commit Graph
52 Commits
Author SHA1 Message Date
Georges Basile Stavracas Neto a799678f68 event: rewrite timezone support
Now with something that hopefully works.

https://gitlab.gnome.org/GNOME/gnome-calendar/issues/43
https://gitlab.gnome.org/GNOME/gnome-calendar/issues/302
2018-09-14 20:16:54 -03:00
Georges Basile Stavracas Neto 34c7a16390 event: really fix multiday check
The time difference should've been greater than
zero since the beginning.
2018-05-05 23:06:14 -03:00
Georges Basile Stavracas Neto 91fdf1783b event: improve documentation for gcal_event_is_multiday
Add some examples, so I can remember them in a few days from
now.
2018-04-30 20:45:01 -03:00
Georges Basile Stavracas Neto bedc98b192 event: fix multiday check
Checking if an event is multiday is currently broken
because g_date_time_difference() returns raw time spans,
and that value means "there is 24h of difference between
these dates", when what we're looking for is "how many
days are between these two dates".

To fix that, use the GDate API instead of GDateTime.
2018-04-30 19:31:01 -03:00
Georges Basile Stavracas Neto a8350555da event: trivial cleanups 2018-02-27 14:57:20 -03:00
Georges Basile Stavracas Neto c60a881ca3 event: Use G_DEFINE_QUARK 2018-01-30 02:07:47 -02:00
Georges Basile Stavracas Neto f3b4f68bf0 event: Use parameter specs to declare properties 2018-01-30 01:10:08 -02:00
Georges Basile Stavracas Neto 194407ecfb views: Instrument and fix reference leaks 2018-01-28 12:08:04 -02:00
Georges Basile Stavracas Neto 06f4a5b182 Merge branch 'mcatanzaro/leak' into 'master'
event: Fix a minor leak

See merge request GNOME/gnome-calendar!6
2017-12-06 11:04:02 +00:00
Michael Catanzaro 0724d4092e event: Save local time correctly
The old code here was not setting tzid correctly. It me took hours to
figure out how to do this, but it turned out to be simple once I found
the right place, buried deep in the e-d-s source code.

Now, ideally we would not change the timezone of the event every time we
edit it. But some big changes in how GNOME Calendar tracks timezone are
going to be required if we do that. In particular, I believe we would
have to stop saving all day events in UTC, and give up on using
GDateTime as we do now, and track timezone completely separately
everywhere using icaltimezone. This is what e-d-s does, and it's
probably what we should be doing too. But that would be a big change.
This commit solves the basic problem, which is to ensure the event is
scheduled for the right time, regardless of timezone.

This finally completely fixes #168.
2017-12-05 21:54:39 -06:00
Michael Catanzaro a7304ed9b0 event: Restore handling of all day events
This brings back the original handling of all day events that we had
before I reverted the previous commit.
2017-12-05 21:54:39 -06:00
Michael Catanzaro 281ed44f1c Revert "event: correctly store timezones"
This reverts commit ce2c955269.

This commit is not right. Lots of code in Calendar relies on being able
to set the timezone of a GcalEvent, and this results in us always
ignoring the timezone set by Calendar in preference to whatever happened
to be in the ECalComponentDateTime previously. That might not be so bad,
but additionally, the time is not adjusted accordingly, so this actually
results in the time of events changing unexpectedly from what Calendar
is trying to set.

The code to explicitly store UTC times for all day events is OK (I
guess) and will be restored in a subsequent commit.
2017-12-05 21:54:39 -06:00
Michael Catanzaro 1d8a164634 event: Fix changing the timezone
g_date_time_equal() corrects for timezone offsets to ensure that, e.g.,
6 AM CST is treated as equal to 12 PM UTC. This means attempts to change
the start and end times of events to the same time in another timezone
are currently failing. We need to remove this attempt at optimization
because it prevents gcal_event_set_timezone() from ever doing anything.
2017-12-05 21:53:00 -06:00
Michael Catanzaro 2cca96c349 event: Fix a minor leak 2017-12-05 13:36:29 -06:00
Georges Basile Stavracas Neto 8a2376ae55 event: refactor gcal_event_is_multiday 2017-09-14 14:05:53 -03:00
Georges Basile Stavracas Neto 5a0a3fcd9c event: fix various reference ownership issues 2017-09-08 22:25:18 -03:00
Georges Basile Stavracas Neto 941f3ee77d event: cache events
This speeds up Calendar a little bit, and more importantly,
allows me to sleep well at night now.
2017-09-07 02:09:53 -03:00
Georges Basile Stavracas Neto edce0ab076 recurrence: use refcount instead of copy/free 2017-09-06 22:15:13 -03:00
Yash Singh 2c75e72582 event: add recurrence property
Earlier, an event had no recurrence property. Hence, the event's
recurrence pattern etc. could not be analysed, and as a result
could not be changed by the user. gnome-calendar just displayed
all the recurrences of a recurring event but had no 'readable'
knowledge regarding the characteristics of those recurrences.

This patch adds the recurrence property, which is basically
a GcalRecurrence structure linked to the event.

https://bugzilla.gnome.org/show_bug.cgi?id=782755
2017-07-13 13:32:52 -03:00
Mohammed Sadiq 00b89b89cd gcal-event: fix several memory leaks
https://bugzilla.gnome.org/show_bug.cgi?id=782972
2017-05-24 15:08:31 -03:00
Yash Singh 6dd234296e event: add recurrence property & has-recurrence function
Recurrence property of the event enables us to add recurrences
to it in the future. It is the first step in that direction.

https://bugzilla.gnome.org/show_bug.cgi?id=782755
2017-05-18 14:50:14 -03:00
Georges Basile Stavracas Neto 4e262f6d5d event: remove unused code 2017-05-17 14:47:03 -03:00
Mohammed Sadiq 3be142a207 event: don't leak event description
https://bugzilla.gnome.org/show_bug.cgi?id=781400
2017-04-17 21:12:50 -03:00
Georges Basile Stavracas Neto 7681b7a2da project: document classes 2017-04-12 15:17:17 -03:00
Georges Basile Stavracas Neto e3ef063e00 event: fix documentation 2017-04-08 20:59:51 -03:00
Georges Basile Stavracas Neto d5825bbd35 project: override log domains
This way, we can have more useful debug spils.
2017-03-17 10:14:25 -03:00
Georges Basile Stavracas Neto 23cc46a01a event: fix comparison if event is today
Since the end times are open-ended, we have to consider the very second
before the actual end time.

https://bugzilla.gnome.org/show_bug.cgi?id=772104
2016-10-01 20:43:37 -03:00
Victor Toso 03d1e549f2 event: Fix leak of GdkRGBA
23,776 bytes in 743 blocks are definitely lost in loss record 19,053 of 19,159
   at 0x4C2DB9D: malloc (vg_replace_malloc.c:299)
   by 0x9A0C90E: g_malloc (gmem.c:94)
   by 0x9A26A55: g_slice_alloc (gslice.c:1025)
   by 0x9A26AD7: g_slice_copy (gslice.c:1076)
   by 0x6A97912: gdk_rgba_copy (gdkrgba.c:76)
   by 0x42B35E: gcal_event_set_color (gcal-event.c:750)
   by 0x42BF3E: gcal_event_set_source (gcal-event.c:1204)
   by 0x42AE20: gcal_event_set_property (gcal-event.c:481)
   by 0x956B39B: object_set_property (gobject.c:1423)
   by 0x956BFDF: g_object_new_internal (gobject.c:1817)
   by 0x956CB24: g_object_new_valist (gobject.c:2042)
   by 0x878945D: g_initable_new_valist (ginitable.c:224)

https://bugzilla.gnome.org/show_bug.cgi?id=772272
2016-10-01 19:20:01 -03:00
Victor Toso ea70173cd3 event: Fix leak of uid (string)
28,337 bytes in 415 blocks are definitely lost in loss record 18,432 of 18,507
   at 0x4C2FC47: realloc (vg_replace_malloc.c:785)
   by 0xA88021D: vasprintf (in /usr/lib64/libc-2.24.so)
   by 0x9A593FC: g_vasprintf (gprintf.c:316)
   by 0x9A292F7: g_strdup_vprintf (gstrfuncs.c:514)
   by 0x9A2939C: g_strdup_printf (gstrfuncs.c:540)
   by 0x42A10B: gcal_event_update_uid_internal (gcal-event.c:192)
   by 0x42BF52: gcal_event_set_source (gcal-event.c:1217)
   by 0x42ADCA: gcal_event_set_property (gcal-event.c:480)
   by 0x956B39B: object_set_property (gobject.c:1423)
   by 0x956BFDF: g_object_new_internal (gobject.c:1817)
   by 0x956CB24: g_object_new_valist (gobject.c:2042)
   by 0x878945D: g_initable_new_valist (ginitable.c:224)

https://bugzilla.gnome.org/show_bug.cgi?id=772272
2016-10-01 19:20:01 -03:00
Victor Toso 86d91b7598 event: Fix leak of EcalComponentId
29,717 (8,128 direct, 21,589 indirect) bytes in 508 blocks are definitely lost in loss record 18,380 of 18,445
   at 0x4C2FA50: calloc (vg_replace_malloc.c:711)
   by 0x9A0C981: g_malloc0 (gmem.c:124)
   by 0x9A0CC64: g_malloc0_n (gmem.c:355)
   by 0x5BE3948: e_cal_component_get_id (e-cal-component.c:1477)
   by 0x42A06D: gcal_event_update_uid_internal (gcal-event.c:178)
   by 0x42A64D: gcal_event_set_component_internal (gcal-event.c:310)
   by 0x42AD0F: gcal_event_set_property (gcal-event.c:459)
   by 0x956B39B: object_set_property (gobject.c:1423)
   by 0x956BFDF: g_object_new_internal (gobject.c:1817)
   by 0x956CB24: g_object_new_valist (gobject.c:2042)
   by 0x878945D: g_initable_new_valist (ginitable.c:224)
   by 0x878933A: g_initable_new (ginitable.c:146)

https://bugzilla.gnome.org/show_bug.cgi?id=772272
2016-10-01 19:20:01 -03:00
Victor Toso aee120b898 event: Fix leak of alarm (GHashTable)
105,858 (42,064 direct, 63,794 indirect) bytes in 478 blocks are definitely lost in loss record 19,065 of 19,103
   at 0x4C2DB9D: malloc (vg_replace_malloc.c:299)
   by 0x9A0C90E: g_malloc (gmem.c:94)
   by 0x9A26A55: g_slice_alloc (gslice.c:1025)
   by 0x99F0510: g_hash_table_new_full (ghash.c:711)
   by 0x42B10C: gcal_event_init (gcal-event.c:657)
   by 0x9584B32: g_type_create_instance (gtype.c:1866)
   by 0x956BED0: g_object_new_internal (gobject.c:1783)
   by 0x956CB24: g_object_new_valist (gobject.c:2042)
   by 0x878945D: g_initable_new_valist (ginitable.c:224)
   by 0x878933A: g_initable_new (ginitable.c:146)
   by 0x42B181: gcal_event_new (gcal-event.c:690)
   by 0x4549CA: gcal_year_view_component_added (gcal-year-view.c:1632)

https://bugzilla.gnome.org/show_bug.cgi?id=772272
2016-10-01 19:20:01 -03:00
Georges Basile Stavracas Neto f1069c96d6 event: implement GInitable
Since the event creation can fail, lets make it a GInitable
so that we can fail during initialization.

https://bugzilla.gnome.org/show_bug.cgi?id=763166
2016-09-28 00:07:28 -03:00
Georges Basile Stavracas Neto cd50bec506 project: fix build warnings
https://bugzilla.gnome.org/show_bug.cgi?id=770466
2016-08-29 23:08:39 -03:00
Georges Basile Stavracas Neto 19d68573dd utils: move utility method to get alarm's minutes 2016-07-06 03:01:56 -03:00
Georges Basile Stavracas Neto 1ddc690810 event: add support for alarms
This commit prepares GcalEvent to handle alarms. Basically,
it is now able to load the current alarms of an event, and add
and remove alarms for them.
2016-07-06 03:01:56 -03:00
Iain Lane ace87328a9 event: If no end date is given, make the event be all_day explicitly
Previously we were synthesising an end date of "start + 1 day", but this
isn't necessary. RFC 2445 tells us that no end date already means an all
day event.

Check this case directly.

https://bugzilla.gnome.org/show_bug.cgi?id=762985
2016-03-08 16:36:41 +00:00
Monique Faria e48c585c94 event: fix crash when no end date is given
In this commit, we fixed a crash report that occurred when an event had no end date.

Events with no end dates are all-day, 1-day length events. But, when an event with no end date set was synchronized with calendar (happened mostly with birthdays), it caused crashes, because the function responsible for getting the end date received NULL.

To correct this, we considered that end = start + 1day when no end date is set. With this, the mistake was corrected. Another thing that was correct along with this were two memory leaks, caused by the allocation of both end and start date that were not been freed.

https://bugzilla.gnome.org/show_bug.cgi?id=762985
2016-03-08 00:48:16 -03:00
fosero e464eb6415 event: handle different tzid formats
tzid can have different formats depending on where it originates from:
regular or prefixed by a libical specific identifier. Use the
right icaltimezone_get_builtin_timezone* for each case.

https://bugzilla.gnome.org/show_bug.cgi?id=763180
2016-03-06 17:03:00 -03:00
Georges Basile Stavracas Neto 64747e4f80 event: load tzid with icaltimezone_get_builtin_timezone 2016-03-01 15:27:07 -03:00
Georges Basile Stavracas Neto d84be66d70 event-widget: bring back alarm icon 2016-02-29 22:20:52 -03:00
Georges Basile Stavracas Neto a56e6c00c3 event: both start & end dates must be midnight to be all day
https://bugzilla.gnome.org/show_bug.cgi?id=762570
2016-02-29 16:14:22 -03:00
Georges Basile Stavracas Neto 4d170155de event: remove spurious debug message 2016-02-29 16:09:55 -03:00
Georges Basile Stavracas Neto ce2c955269 event: correctly store timezones 2016-02-29 15:49:22 -03:00
Georges Basile Stavracas Neto 1cdd73a69a event: format tzid with builtin GDateTime facilities 2016-02-28 14:13:19 -03:00
Georges Basile Stavracas Neto 87620ebbbd event: properly set the timezone 2016-02-26 21:14:23 +01:00
Georges Basile Stavracas Neto e4bfdb7ed2 event: plug a memory leak 2016-02-22 00:02:59 -03:00
Georges Basile Stavracas Neto fd6d6e97c9 quick-add-popover: fix event creation again 2016-02-18 04:02:46 -02:00
Georges Basile Stavracas Neto 093e9fa52f event: properly detect the timezone 2016-02-17 18:56:42 +01:00
Georges Basile Stavracas Neto 3f4d11f68e event: normalize dates before applying them
I don't know the reasoning behind it, but sometimes
I see dates like March 32 or February 30. Events are
correctly added, so I suspect it's an issue with another
app.

In any case, we should be able to handle weird dates
without crashing, so normalize the dates before using
them.
2016-02-16 10:39:37 +09:00
Georges Basile Stavracas Neto 7a6a13d7e0 event: fix timezone handling
Using libical with libecal means that the dates
are always stored as UTF dates, and we receive the
timezone as the ECalComponentDateTime::tzid value.

This fact was net being considered when adding date
support on GcalEvent, and was causing various issues
when displaying dates.

Fix that by properly handling timezones in GcalEvent.
2016-02-15 20:42:47 -02:00