From 32d0ec167b47ce51c40f1cd9c2efbd3e6f08fb2a Mon Sep 17 00:00:00 2001 From: Florian Stinglmayr Date: Mon, 28 Apr 2025 15:24:06 +0200 Subject: [PATCH] more code --- lib/include/edapi/journal/file.h | 2 ++ lib/src/journal/file.c | 11 ++++++ lib/src/journal/journal.c | 3 ++ lib/tests/test-journal-file.c | 60 ++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) diff --git a/lib/include/edapi/journal/file.h b/lib/include/edapi/journal/file.h index 1202ddb..040849b 100644 --- a/lib/include/edapi/journal/file.h +++ b/lib/include/edapi/journal/file.h @@ -42,6 +42,8 @@ gchar const *ed_journal_file_get_commander(EDJournalFile *self); gchar const *ed_journal_file_get_gameversion(EDJournalFile *self); +gint ed_journal_file_compare(EDJournalFile *lhs, EDJournalFile *rhs); + G_END_DECLS #endif diff --git a/lib/src/journal/file.c b/lib/src/journal/file.c index 1c6e03f..b38383a 100644 --- a/lib/src/journal/file.c +++ b/lib/src/journal/file.c @@ -382,3 +382,14 @@ gchar const *ed_journal_file_get_gameversion(EDJournalFile *self) EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self); return p->gameversion; } + +gint ed_journal_file_compare(EDJournalFile *lhs, EDJournalFile *rhs) +{ + return_if_true(lhs == NULL || rhs == NULL, 0); + + GDateTime *ldate = ed_journal_file_get_datetime(lhs); + GDateTime *rdate = ed_journal_file_get_datetime(rhs); + return_if_true(ldate == NULL || rdate == NULL, 0); + + return g_date_time_compare(ldate, rdate); +} diff --git a/lib/src/journal/journal.c b/lib/src/journal/journal.c index fddb0ce..4c00d87 100644 --- a/lib/src/journal/journal.c +++ b/lib/src/journal/journal.c @@ -136,6 +136,9 @@ static void ed_journal_load_files(EDJournal *self) g_free(full); } + p->files = g_list_sort( + p->files, (GCompareFunc)ed_journal_file_compare); + done: if (loc != NULL) { diff --git a/lib/tests/test-journal-file.c b/lib/tests/test-journal-file.c index b075b41..964ca20 100644 --- a/lib/tests/test-journal-file.c +++ b/lib/tests/test-journal-file.c @@ -40,6 +40,64 @@ static void test_old_filename(void **state) g_clear_object(&file); } +static void test_new_datetime(void **state) +{ + char const *filename = "Journal.2023-04-18T061507.01.log"; + + EDJournalFile *file = ed_journal_file_new(); + EDErrorCode ret = 0; + GError *error = NULL; + + assert_non_null(file); + + ret = ed_journal_file_open(file, filename, &error); + assert_int_equal(ret, ed_error_success); + assert_null(error); + + GDateTime *dt = ed_journal_file_get_datetime(file); + + assert_non_null(dt); + + assert_int_equal(g_date_time_get_year(dt), 2023); + assert_int_equal(g_date_time_get_month(dt), 04); + assert_int_equal(g_date_time_get_day_of_month(dt), 18); + + assert_int_equal(g_date_time_get_hour(dt), 6); + assert_int_equal(g_date_time_get_minute(dt), 15); + assert_int_equal(g_date_time_get_second(dt), 7); + + g_clear_object(&file); +} + +static void test_old_datetime(void **state) +{ + char const *filename = "Journal.230418061507.01.log"; + + EDJournalFile *file = ed_journal_file_new(); + EDErrorCode ret = 0; + GError *error = NULL; + + assert_non_null(file); + + ret = ed_journal_file_open(file, filename, &error); + assert_int_equal(ret, ed_error_success); + assert_null(error); + + GDateTime *dt = ed_journal_file_get_datetime(file); + + assert_non_null(dt); + + assert_int_equal(g_date_time_get_year(dt), 2023); + assert_int_equal(g_date_time_get_month(dt), 04); + assert_int_equal(g_date_time_get_day_of_month(dt), 18); + + assert_int_equal(g_date_time_get_hour(dt), 6); + assert_int_equal(g_date_time_get_minute(dt), 15); + assert_int_equal(g_date_time_get_second(dt), 7); + + g_clear_object(&file); +} + static void test_valid_load(void **state) { char const *filename = "Journal.2023-04-18T061507.01.log"; @@ -77,6 +135,8 @@ int main(int ac, char **av) cmocka_unit_test(test_new_filename), cmocka_unit_test(test_old_filename), cmocka_unit_test(test_valid_load), + cmocka_unit_test(test_new_datetime), + cmocka_unit_test(test_old_datetime), }; return cmocka_run_group_tests(tests, NULL, NULL);