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:
committed by
Jean-François Fortin Tam
parent
43e0c53ee4
commit
c18218d1f6
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
Reference in New Issue
Block a user