sort journal files in descending order
This commit is contained in:
parent
d091272cea
commit
8047d4c75a
@ -54,7 +54,8 @@ gboolean ed_journal_file_has_entries_in_range(EDJournalFile *self,
|
||||
GDateTime *start,
|
||||
GDateTime *end);
|
||||
|
||||
gint ed_journal_file_compare(EDJournalFile *lhs, EDJournalFile *rhs);
|
||||
gint ed_journal_file_compare_asc(EDJournalFile *lhs, EDJournalFile *rhs);
|
||||
gint ed_journal_file_compare_desc(EDJournalFile *lhs, EDJournalFile *rhs);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -15,9 +15,17 @@ G_DECLARE_FINAL_TYPE(
|
||||
|
||||
EDJournal *ed_journal_new(void);
|
||||
|
||||
EDJournal *ed_journal_new_with_location(gchar const *dir);
|
||||
|
||||
gchar const *ed_journal_get_location(EDJournal *j);
|
||||
EDErrorCode ed_journal_set_location(EDJournal *j, gchar const *dir);
|
||||
|
||||
/**
|
||||
* Get a list of files. Files are sorted in descending order, with
|
||||
* newer files first in the list.
|
||||
*/
|
||||
GList *ed_journal_get_files(EDJournal *self);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
||||
|
@ -591,7 +591,7 @@ EDJournalEntry *ed_journal_file_get_last(EDJournalFile *self)
|
||||
return p->last;
|
||||
}
|
||||
|
||||
gint ed_journal_file_compare(EDJournalFile *lhs, EDJournalFile *rhs)
|
||||
gint ed_journal_file_compare_asc(EDJournalFile *lhs, EDJournalFile *rhs)
|
||||
{
|
||||
return_if_true(lhs == NULL || rhs == NULL, 0);
|
||||
|
||||
@ -602,6 +602,17 @@ gint ed_journal_file_compare(EDJournalFile *lhs, EDJournalFile *rhs)
|
||||
return g_date_time_compare(ldate, rdate);
|
||||
}
|
||||
|
||||
gint ed_journal_file_compare_desc(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(rdate, ldate);
|
||||
}
|
||||
|
||||
gboolean ed_journal_file_has_entries_in_range(EDJournalFile *self,
|
||||
GDateTime *start,
|
||||
GDateTime *end)
|
||||
|
@ -90,6 +90,23 @@ EDJournal *ed_journal_new(void)
|
||||
return g_object_new(ED_TYPE_JOURNAL, NULL);
|
||||
}
|
||||
|
||||
EDJournal *ed_journal_new_with_location(gchar const *dir)
|
||||
{
|
||||
EDJournal *j = NULL;
|
||||
EDErrorCode ret = ed_error_success;
|
||||
|
||||
j = ed_journal_new();
|
||||
return_if_true(j == NULL, NULL);
|
||||
|
||||
ret = ed_journal_set_location(j, dir);
|
||||
if (ED_ERROR(ret)) {
|
||||
g_clear_object(&j);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
static void ed_journal_load_files(EDJournal *self)
|
||||
{
|
||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
||||
@ -137,7 +154,7 @@ static void ed_journal_load_files(EDJournal *self)
|
||||
}
|
||||
|
||||
p->files = g_list_sort(
|
||||
p->files, (GCompareFunc)ed_journal_file_compare);
|
||||
p->files, (GCompareFunc)ed_journal_file_compare_desc);
|
||||
|
||||
done:
|
||||
|
||||
@ -171,3 +188,10 @@ EDErrorCode ed_journal_set_location(EDJournal *self, gchar const *dir)
|
||||
|
||||
return ed_error_success;
|
||||
}
|
||||
|
||||
GList *ed_journal_get_files(EDJournal *self)
|
||||
{
|
||||
return_if_true(self == NULL, NULL);
|
||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
||||
return p->files;
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <edapi/journal/journal.h>
|
||||
#include <edapi/journal/file.h>
|
||||
|
||||
static void test_userprofile_location(void **state)
|
||||
{
|
||||
@ -22,10 +23,48 @@ static void test_userprofile_location(void **state)
|
||||
g_clear_object(&journal);
|
||||
}
|
||||
|
||||
static void test_file_sorting(void **state)
|
||||
{
|
||||
setenv("USERPROFILE", "./", 1);
|
||||
|
||||
EDJournal *journal = ed_journal_new();
|
||||
assert_non_null(journal);
|
||||
|
||||
gchar const *location = ed_journal_get_location(journal);
|
||||
assert_non_null(location);
|
||||
|
||||
GList *files = ed_journal_get_files(journal);
|
||||
assert_non_null(files);
|
||||
assert_non_null(files->data);
|
||||
|
||||
GDateTime *datetime = NULL;
|
||||
|
||||
datetime = ed_journal_file_get_datetime(
|
||||
ED_JOURNALFILE(files->data)
|
||||
);
|
||||
assert_non_null(datetime);
|
||||
assert_int_equal(g_date_time_get_year(datetime), 2025);
|
||||
|
||||
datetime = ed_journal_file_get_datetime(
|
||||
ED_JOURNALFILE(files->next->data)
|
||||
);
|
||||
assert_non_null(datetime);
|
||||
assert_int_equal(g_date_time_get_year(datetime), 2024);
|
||||
|
||||
datetime = ed_journal_file_get_datetime(
|
||||
ED_JOURNALFILE(files->next->next->data)
|
||||
);
|
||||
assert_non_null(datetime);
|
||||
assert_int_equal(g_date_time_get_year(datetime), 2023);
|
||||
|
||||
g_clear_object(&journal);
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
static const struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test(test_userprofile_location),
|
||||
cmocka_unit_test(test_file_sorting),
|
||||
};
|
||||
|
||||
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user