Expand sorting options for title and ext save data lists.

This commit is contained in:
Steveice10 2017-12-17 17:09:58 -08:00
parent caa35c1ec6
commit 3a6d9f3277
2 changed files with 73 additions and 18 deletions

View File

@ -23,6 +23,7 @@ typedef struct {
bool showSD;
bool showNAND;
bool sortById;
bool sortByName;
bool populated;
@ -116,7 +117,23 @@ static void extsavedata_options_update(ui_view* view, void* data, linked_list* i
bool* val = (bool*) selected->data;
*val = !(*val);
selected->color = *val ? COLOR_ENABLED : COLOR_DISABLED;
if(*val && (val == &listData->sortById || val == &listData->sortByName)) {
if(val == &listData->sortById) {
listData->sortByName = false;
} else if(val == &listData->sortByName) {
listData->sortById = false;
}
linked_list_iter iter;
linked_list_iterate(items, &iter);
while(linked_list_iter_has_next(&iter)) {
list_item* item = (list_item*) linked_list_iter_next(&iter);
item->color = *(bool*) item->data ? COLOR_ENABLED : COLOR_DISABLED;
}
} else {
selected->color = *val ? COLOR_ENABLED : COLOR_DISABLED;
}
listData->populated = false;
}
@ -124,6 +141,7 @@ static void extsavedata_options_update(ui_view* view, void* data, linked_list* i
if(linked_list_size(items) == 0) {
extsavedata_options_add_entry(items, "Show SD", &listData->showSD);
extsavedata_options_add_entry(items, "Show NAND", &listData->showNAND);
extsavedata_options_add_entry(items, "Sort by ID", &listData->sortById);
extsavedata_options_add_entry(items, "Sort by name", &listData->sortByName);
}
}
@ -208,17 +226,22 @@ static int extsavedata_compare(void* data, const void* p1, const void* p2) {
list_item* info1 = (list_item*) p1;
list_item* info2 = (list_item*) p2;
ext_save_data_info* title1 = (ext_save_data_info*) info1->data;
ext_save_data_info* title2 = (ext_save_data_info*) info2->data;
ext_save_data_info* data1 = (ext_save_data_info*) info1->data;
ext_save_data_info* data2 = (ext_save_data_info*) info2->data;
if(title1->mediaType > title2->mediaType) {
if(data1->mediaType > data2->mediaType) {
return -1;
} else if(title1->mediaType < title2->mediaType) {
} else if(data1->mediaType < data2->mediaType) {
return 1;
} else {
if(listData->sortByName) {
bool title1HasName = title1->hasMeta && !util_is_string_empty(title1->meta.shortDescription);
bool title2HasName = title2->hasMeta && !util_is_string_empty(title2->meta.shortDescription);
if(listData->sortById) {
u64 id1 = data1->extSaveDataId;
u64 id2 = data2->extSaveDataId;
return id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
} else if(listData->sortByName) {
bool title1HasName = data1->hasMeta && !util_is_string_empty(data1->meta.shortDescription);
bool title2HasName = data2->hasMeta && !util_is_string_empty(data2->meta.shortDescription);
if(title1HasName && !title2HasName) {
return -1;
@ -228,10 +251,7 @@ static int extsavedata_compare(void* data, const void* p1, const void* p2) {
return strcasecmp(info1->name, info2->name);
}
} else {
u64 id1 = title1->extSaveDataId;
u64 id2 = title2->extSaveDataId;
return id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
return 0;
}
}
}
@ -252,6 +272,7 @@ void extsavedata_open() {
data->showSD = true;
data->showNAND = true;
data->sortById = false;
data->sortByName = true;
list_display("Ext Save Data", "A: Select, B: Return, X: Refresh, Select: Options", data, extsavedata_update, extsavedata_draw_top);

View File

@ -33,7 +33,9 @@ typedef struct {
bool showGameCard;
bool showSD;
bool showNAND;
bool sortById;
bool sortByName;
bool sortBySize;
bool populated;
} titles_data;
@ -151,7 +153,28 @@ static void titles_options_update(ui_view* view, void* data, linked_list* items,
bool* val = (bool*) selected->data;
*val = !(*val);
selected->color = *val ? COLOR_ENABLED : COLOR_DISABLED;
if(*val && (val == &listData->sortById || val == &listData->sortByName || val == &listData->sortBySize)) {
if(val == &listData->sortById) {
listData->sortByName = false;
listData->sortBySize = false;
} else if(val == &listData->sortByName) {
listData->sortById = false;
listData->sortBySize = false;
} else if(val == &listData->sortBySize) {
listData->sortById = false;
listData->sortByName = false;
}
linked_list_iter iter;
linked_list_iterate(items, &iter);
while(linked_list_iter_has_next(&iter)) {
list_item* item = (list_item*) linked_list_iter_next(&iter);
item->color = *(bool*) item->data ? COLOR_ENABLED : COLOR_DISABLED;
}
} else {
selected->color = *val ? COLOR_ENABLED : COLOR_DISABLED;
}
listData->populated = false;
}
@ -160,7 +183,9 @@ static void titles_options_update(ui_view* view, void* data, linked_list* items,
titles_options_add_entry(items, "Show game card", &listData->showGameCard);
titles_options_add_entry(items, "Show SD", &listData->showSD);
titles_options_add_entry(items, "Show NAND", &listData->showNAND);
titles_options_add_entry(items, "Sort by ID", &listData->sortById);
titles_options_add_entry(items, "Sort by name", &listData->sortByName);
titles_options_add_entry(items, "Sort by size", &listData->sortBySize);
}
}
@ -260,7 +285,12 @@ static int titles_compare(void* data, const void* p1, const void* p2) {
} else if(title1->twl && !title2->twl) {
return 1;
} else {
if(listData->sortByName) {
if(listData->sortById) {
u64 id1 = title1->titleId;
u64 id2 = title2->titleId;
return id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
} else if(listData->sortByName) {
bool title1HasName = title1->hasMeta && !util_is_string_empty(title1->meta.shortDescription);
bool title2HasName = title2->hasMeta && !util_is_string_empty(title2->meta.shortDescription);
@ -271,11 +301,13 @@ static int titles_compare(void* data, const void* p1, const void* p2) {
} else {
return strcasecmp(info1->name, info2->name);
}
} else {
u64 id1 = title1->titleId;
u64 id2 = title2->titleId;
} else if(listData->sortBySize) {
u64 size1 = title1->installedSize;
u64 size2 = title2->installedSize;
return id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
return size1 > size2 ? -1 : size1 < size2 ? 1 : 0;
} else {
return 0;
}
}
}
@ -298,7 +330,9 @@ void titles_open() {
data->showGameCard = true;
data->showSD = true;
data->showNAND = true;
data->sortById = false;
data->sortByName = true;
data->sortBySize = false;
list_display("Titles", "A: Select, B: Return, X: Refresh, Select: Options", data, titles_update, titles_draw_top);
}