Add option to sort TitleDB by install status.

This commit is contained in:
Steveice10 2018-05-09 23:57:28 -07:00
parent 1fe458a57c
commit 5ca4819c6e

View File

@ -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;