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_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++)
{
if (g_hash_table_contains (self->events, events[i]))
if (g_hash_table_contains (self->events, gcal_event_get_uid (events[i])))
continue;
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++;
}
@@ -226,22 +226,22 @@ gcal_event_list_remove_events (GcalEventList *self,
g_assert (events != NULL);
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++)
{
if (g_hash_table_contains (self->events, events[i]))
g_hash_table_add (contained_events, events[i]);
if (g_hash_table_contains (self->events, gcal_event_get_uid (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++)
{
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 (self->events, event);
g_hash_table_remove (contained_events, gcal_event_get_uid (event));
g_hash_table_remove (self->events, gcal_event_get_uid (event));
gtk_bitset_add (bitset, i);
}
+8 -8
View File
@@ -26,10 +26,10 @@
#include "gcal-stub-calendar.h"
#include "gcal-utils.h"
#define EVENT_STRING_FOR_DATE(dtstart,dtend) \
#define EVENT_STRING_FOR_DATE(uid, dtstart,dtend) \
"BEGIN:VEVENT\n" \
"SUMMARY:Stub event\n" \
"UID:example@uid\n" \
"UID:example@uid"uid"\n" \
"DTSTAMP:19970114T170000Z\n" \
"DTSTART"dtstart"\n" \
"DTEND"dtend"\n" \
@@ -101,9 +101,9 @@ event_list_add_events (void)
AddEventsHelper helper = { };
const gchar * const event_strings[] = {
EVENT_STRING_FOR_DATE (":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE (":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE (":20260402T000000Z", ":20260403T030000Z"),
EVENT_STRING_FOR_DATE ("event1", ":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE ("event2", ":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE ("event3", ":20260402T000000Z", ":20260403T030000Z"),
};
event_list = gcal_event_list_new ();
@@ -171,9 +171,9 @@ event_list_remove_events (void)
RemoveEventsHelper helper = { };
const gchar * const event_strings[] = {
EVENT_STRING_FOR_DATE (":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE (":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE (":20260402T000000Z", ":20260403T030000Z"),
EVENT_STRING_FOR_DATE ("event1", ":20260331T000000Z", ":20260331T030000Z"),
EVENT_STRING_FOR_DATE ("event2", ":20260401T000000Z", ":20260401T030000Z"),
EVENT_STRING_FOR_DATE ("event3", ":20260402T000000Z", ":20260403T030000Z"),
};
event_list = gcal_event_list_new ();