diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-05-26 16:46:25 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-05-26 16:47:11 -0400 |
commit | 60cdc2fbde2b3eb376f9d01c984ffd9f426196f9 (patch) | |
tree | 94d2949fef4260ddcdfbc4796fe2e9829f77868c | |
parent | 70653d930a0cbb245f36719da5362cf89b208487 (diff) | |
download | telepathy-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.c | 36 | ||||
-rw-r--r-- | tests/dbus/test-tpl-log-store-xml.c | 31 |
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); |