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 *start,
|
||||||
GDateTime *end);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -15,9 +15,17 @@ G_DECLARE_FINAL_TYPE(
|
|||||||
|
|
||||||
EDJournal *ed_journal_new(void);
|
EDJournal *ed_journal_new(void);
|
||||||
|
|
||||||
|
EDJournal *ed_journal_new_with_location(gchar const *dir);
|
||||||
|
|
||||||
gchar const *ed_journal_get_location(EDJournal *j);
|
gchar const *ed_journal_get_location(EDJournal *j);
|
||||||
EDErrorCode ed_journal_set_location(EDJournal *j, gchar const *dir);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -591,7 +591,7 @@ EDJournalEntry *ed_journal_file_get_last(EDJournalFile *self)
|
|||||||
return p->last;
|
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);
|
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);
|
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,
|
gboolean ed_journal_file_has_entries_in_range(EDJournalFile *self,
|
||||||
GDateTime *start,
|
GDateTime *start,
|
||||||
GDateTime *end)
|
GDateTime *end)
|
||||||
|
@ -90,6 +90,23 @@ EDJournal *ed_journal_new(void)
|
|||||||
return g_object_new(ED_TYPE_JOURNAL, NULL);
|
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)
|
static void ed_journal_load_files(EDJournal *self)
|
||||||
{
|
{
|
||||||
EDJournalPrivate *p = ed_journal_get_instance_private(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 = g_list_sort(
|
||||||
p->files, (GCompareFunc)ed_journal_file_compare);
|
p->files, (GCompareFunc)ed_journal_file_compare_desc);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
||||||
@ -171,3 +188,10 @@ EDErrorCode ed_journal_set_location(EDJournal *self, gchar const *dir)
|
|||||||
|
|
||||||
return ed_error_success;
|
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 <stdlib.h>
|
||||||
|
|
||||||
#include <edapi/journal/journal.h>
|
#include <edapi/journal/journal.h>
|
||||||
|
#include <edapi/journal/file.h>
|
||||||
|
|
||||||
static void test_userprofile_location(void **state)
|
static void test_userprofile_location(void **state)
|
||||||
{
|
{
|
||||||
@ -22,10 +23,48 @@ static void test_userprofile_location(void **state)
|
|||||||
g_clear_object(&journal);
|
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)
|
int main(int ac, char **av)
|
||||||
{
|
{
|
||||||
static const struct CMUnitTest tests[] = {
|
static const struct CMUnitTest tests[] = {
|
||||||
cmocka_unit_test(test_userprofile_location),
|
cmocka_unit_test(test_userprofile_location),
|
||||||
|
cmocka_unit_test(test_file_sorting),
|
||||||
};
|
};
|
||||||
|
|
||||||
return cmocka_run_group_tests(tests, NULL, NULL);
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user