summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2011-05-26 16:46:25 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2011-05-26 16:47:11 -0400
commit60cdc2fbde2b3eb376f9d01c984ffd9f426196f9 (patch)
tree94d2949fef4260ddcdfbc4796fe2e9829f77868c
parent70653d930a0cbb245f36719da5362cf89b208487 (diff)
downloadtelepathy-logger-60cdc2fbde2b3eb376f9d01c984ffd9f426196f9.tar.gz
Fixed initial call event_queue_insert_sorted_after()
The current code would always insert after the first element.
-rw-r--r--telepathy-logger/log-store-xml.c36
-rw-r--r--tests/dbus/test-tpl-log-store-xml.c31
2 files changed, 40 insertions, 27 deletions
diff --git a/telepathy-logger/log-store-xml.c b/telepathy-logger/log-store-xml.c
index a27e0cf..6f82b14 100644
--- a/telepathy-logger/log-store-xml.c
+++ b/telepathy-logger/log-store-xml.c
@@ -1283,21 +1283,33 @@ event_queue_insert_sorted_after (GQueue *events,
GList *index,
TplEvent *event)
{
- while (index != NULL &&
- tpl_event_get_timestamp (event) <
- tpl_event_get_timestamp (TPL_EVENT (index->data)))
- index = g_list_next (index);
-
- if (index != NULL)
+ if (g_queue_is_empty (events))
{
- g_queue_insert_after (events, index, event);
- return g_list_next (index);
+ g_queue_push_tail (events, event);
+ return events->tail;
}
- else
+
+ /* The initial index might go before the first one */
+ if (index == NULL)
{
- g_queue_push_tail (events, event);
- return events->head;
+ index = events->head;
+
+ if (tpl_event_get_timestamp (event) <
+ tpl_event_get_timestamp (TPL_EVENT (index->data)))
+ {
+ g_queue_insert_before (events, index, event);
+ return events->head;
+ }
}
+
+ /* Find the last event that this event can go after */
+ while (g_list_next (index) != NULL &&
+ tpl_event_get_timestamp (event) >=
+ tpl_event_get_timestamp (TPL_EVENT (g_list_next (index)->data)))
+ index = g_list_next (index);
+
+ g_queue_insert_after (events, index, event);
+ return g_list_next (index);
}
static void
@@ -1454,7 +1466,7 @@ log_store_xml_get_events_for_file (TplLogStoreXml *self,
supersedes_links = g_hash_table_new (g_str_hash, g_str_equal);
/* Now get the events. */
- index = events->head;
+ index = NULL;
for (node = log_node->children; node; node = node->next)
{
TplEvent *event = NULL;
diff --git a/tests/dbus/test-tpl-log-store-xml.c b/tests/dbus/test-tpl-log-store-xml.c
index 4ecc679..b664cb7 100644
--- a/tests/dbus/test-tpl-log-store-xml.c
+++ b/tests/dbus/test-tpl-log-store-xml.c
@@ -920,6 +920,7 @@ test_get_events_for_date (XmlTestCaseFixture *fixture,
GList *events;
GDate *date;
GError *error = NULL;
+ gint idx = -1;
account = tp_account_new (fixture->bus,
TP_ACCOUNT_OBJECT_PATH_BASE "gabble/jabber/user_40collabora_2eco_2euk",
@@ -943,34 +944,34 @@ test_get_events_for_date (XmlTestCaseFixture *fixture,
g_assert_cmpint (g_list_length (events), ==, 6);
- g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, 0)));
+ g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, ++idx)));
g_assert_cmpstr (
- tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, 0))),
+ tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, idx))),
==, "7");
- g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, 1)));
+ g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, ++idx)));
+ g_assert_cmpstr (
+ tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, idx))),
+ ==, "8");
+
+ g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, ++idx)));
g_assert_cmpint (
- tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, 1))),
+ tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, idx))),
==, 1);
- g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, 2)));
+ g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, ++idx)));
g_assert_cmpint (
- tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, 2))),
+ tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, idx))),
==, 2);
- g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, 3)));
+ g_assert (TPL_IS_CALL_EVENT (g_list_nth_data (events, ++idx)));
g_assert_cmpint (
- tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, 3))),
+ tpl_call_event_get_duration (TPL_CALL_EVENT (g_list_nth_data (events, idx))),
==, 3);
- g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, 4)));
- g_assert_cmpstr (
- tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, 4))),
- ==, "8");
-
- g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, 5)));
+ g_assert (TPL_IS_TEXT_EVENT (g_list_nth_data (events, ++idx)));
g_assert_cmpstr (
- tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, 5))),
+ tpl_text_event_get_message (TPL_TEXT_EVENT (g_list_nth_data (events, idx))),
==, "9");
g_list_foreach (events, (GFunc) g_object_unref, NULL);