core/event-list: Use uids to compare events

We can have multiple GcalEvent* instances for the same underlying
icalcomponent. Compare the uids instead of the raw pointers.

Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1585

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/766>
This commit is contained in:
Georges Basile Stavracas Neto
2026-05-20 15:42:15 -04:00
committed by Jean-François Fortin Tam
parent 43e0c53ee4
commit c18218d1f6
2 changed files with 17 additions and 17 deletions
+9 -9
View File
@@ -117,7 +117,7 @@ static void
gcal_event_list_init (GcalEventList *self) gcal_event_list_init (GcalEventList *self)
{ {
gcal_event_array_init (&self->event_array); gcal_event_array_init (&self->event_array);
self->events = g_hash_table_new (g_direct_hash, g_direct_equal); self->events = g_hash_table_new (g_str_hash, g_str_equal);
} }
/** /**
@@ -174,11 +174,11 @@ gcal_event_list_add_events (GcalEventList *self,
for (gsize i = 0; events[i]; i++) for (gsize i = 0; events[i]; i++)
{ {
if (g_hash_table_contains (self->events, events[i])) if (g_hash_table_contains (self->events, gcal_event_get_uid (events[i])))
continue; continue;
gcal_event_array_append (&self->event_array, g_object_ref (events[i])); gcal_event_array_append (&self->event_array, g_object_ref (events[i]));
g_hash_table_add (self->events, events[i]); g_hash_table_add (self->events, (gpointer) gcal_event_get_uid (events[i]));
n_added++; n_added++;
} }
@@ -226,22 +226,22 @@ gcal_event_list_remove_events (GcalEventList *self,
g_assert (events != NULL); g_assert (events != NULL);
bitset = gtk_bitset_new_empty (); bitset = gtk_bitset_new_empty ();
contained_events = g_hash_table_new (g_direct_hash, g_direct_equal); contained_events = g_hash_table_new (g_str_hash, g_str_equal);
for (size_t i = 0; events[i]; i++) for (size_t i = 0; events[i]; i++)
{ {
if (g_hash_table_contains (self->events, events[i])) if (g_hash_table_contains (self->events, gcal_event_get_uid (events[i])))
g_hash_table_add (contained_events, events[i]); g_hash_table_add (contained_events, (gpointer) gcal_event_get_uid (events[i]));
} }
for (size_t i = 0; i < gcal_event_array_get_size (&self->event_array); i++) for (size_t i = 0; i < gcal_event_array_get_size (&self->event_array); i++)
{ {
GcalEvent *event = gcal_event_array_get (&self->event_array, i); GcalEvent *event = gcal_event_array_get (&self->event_array, i);
if (g_hash_table_contains (contained_events, event)) if (g_hash_table_contains (contained_events, gcal_event_get_uid (event)))
{ {
g_hash_table_remove (contained_events, event); g_hash_table_remove (contained_events, gcal_event_get_uid (event));
g_hash_table_remove (self->events, event); g_hash_table_remove (self->events, gcal_event_get_uid (event));
gtk_bitset_add (bitset, i); gtk_bitset_add (bitset, i);
} }
+8 -8
View File
@@ -26,10 +26,10 @@
#include "gcal-stub-calendar.h" #include "gcal-stub-calendar.h"
#include "gcal-utils.h" #include "gcal-utils.h"
#define EVENT_STRING_FOR_DATE(dtstart,dtend) \ #define EVENT_STRING_FOR_DATE(uid, dtstart,dtend) \
"BEGIN:VEVENT\n" \ "BEGIN:VEVENT\n" \
"SUMMARY:Stub event\n" \ "SUMMARY:Stub event\n" \
"UID:example@uid\n" \ "UID:example@uid"uid"\n" \
"DTSTAMP:19970114T170000Z\n" \ "DTSTAMP:19970114T170000Z\n" \
"DTSTART"dtstart"\n" \ "DTSTART"dtstart"\n" \
"DTEND"dtend"\n" \ "DTEND"dtend"\n" \
@@ -101,9 +101,9 @@ event_list_add_events (void)
AddEventsHelper helper = { }; AddEventsHelper helper = { };
const gchar * const event_strings[] = { const gchar * const event_strings[] = {
EVENT_STRING_FOR_DATE (":20260331T000000Z", ":20260331T030000Z"), EVENT_STRING_FOR_DATE ("event1", ":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE (":20260401T000000Z", ":20260401T030000Z"), EVENT_STRING_FOR_DATE ("event2", ":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE (":20260402T000000Z", ":20260403T030000Z"), EVENT_STRING_FOR_DATE ("event3", ":20260402T000000Z", ":20260403T030000Z"),
}; };
event_list = gcal_event_list_new (); event_list = gcal_event_list_new ();
@@ -171,9 +171,9 @@ event_list_remove_events (void)
RemoveEventsHelper helper = { }; RemoveEventsHelper helper = { };
const gchar * const event_strings[] = { const gchar * const event_strings[] = {
EVENT_STRING_FOR_DATE (":20260331T000000Z", ":20260331T030000Z"), EVENT_STRING_FOR_DATE ("event1", ":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE (":20260401T000000Z", ":20260401T030000Z"), EVENT_STRING_FOR_DATE ("event2", ":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE (":20260402T000000Z", ":20260403T030000Z"), EVENT_STRING_FOR_DATE ("event3", ":20260402T000000Z", ":20260403T030000Z"),
}; };
event_list = gcal_event_list_new (); event_list = gcal_event_list_new ();