From 5ca4819c6e47efdb958dcb59ffe160baa754b1f9 Mon Sep 17 00:00:00 2001 From: Steveice10 Date: Wed, 9 May 2018 23:57:28 -0700 Subject: [PATCH] Add option to sort TitleDB by install status. --- source/fbi/titledb.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source/fbi/titledb.c b/source/fbi/titledb.c index 2f751be..f77ea60 100644 --- a/source/fbi/titledb.c +++ b/source/fbi/titledb.c @@ -20,6 +20,7 @@ typedef struct { bool show3DSXs; bool sortByName; bool sortByUpdate; + bool sortByStatus; bool populated; } titledb_data; @@ -199,6 +200,28 @@ static int titledb_compare(void* data, const void* p1, const void* p2) { return strncasecmp(info1->name, info2->name, sizeof(info1->name)); } else if(listData->sortByUpdate) { return strncasecmp(data2->mtime, data1->mtime, sizeof(data2->mtime)); + } else if(listData->sortByStatus) { + bool outdated1 = (data1->cia.installed && data1->cia.installedInfo.id != data1->cia.id) + || (data1->tdsx.installed && data1->tdsx.installedInfo.id != data1->tdsx.id); + bool outdated2 = (data2->cia.installed && data2->cia.installedInfo.id != data2->cia.id) + || (data2->tdsx.installed && data2->tdsx.installedInfo.id != data2->tdsx.id); + + if(outdated1 && !outdated2) { + return -1; + } else if(!outdated1 && outdated2) { + return 1; + } else { + bool installed1 = data1->cia.installed || data1->tdsx.installed; + bool installed2 = data2->cia.installed || data2->tdsx.installed; + + if(installed1 && !installed2) { + return -1; + } else if(!installed1 && installed2) { + return 1; + } else { + return strncasecmp(info1->name, info2->name, sizeof(info1->name)); + } + } } else { return 0; } @@ -238,12 +261,17 @@ static void titledb_options_update(ui_view* view, void* data, linked_list* items bool* val = (bool*) selected->data; *val = !(*val); - if(val == &listData->sortByName || val == &listData->sortByUpdate) { + if(val == &listData->sortByName || val == &listData->sortByUpdate || val == &listData->sortByStatus) { if(*val) { if(val == &listData->sortByName) { listData->sortByUpdate = false; + listData->sortByStatus = false; } else if(val == &listData->sortByUpdate) { listData->sortByName = false; + listData->sortByStatus = false; + } else if(val == &listData->sortByStatus) { + listData->sortByName = false; + listData->sortByUpdate = false; } linked_list_iter iter; @@ -270,6 +298,7 @@ static void titledb_options_update(ui_view* view, void* data, linked_list* items titledb_options_add_entry(items, "Show 3DSXs", &listData->show3DSXs); titledb_options_add_entry(items, "Sort by name", &listData->sortByName); titledb_options_add_entry(items, "Sort by update date", &listData->sortByUpdate); + titledb_options_add_entry(items, "Sort by install status", &listData->sortByStatus); } } @@ -385,6 +414,7 @@ void titledb_open() { data->show3DSXs = true; data->sortByName = true; data->sortByUpdate = false; + data->sortByStatus = false; data->populateData.finished = true;