diff --git a/source/remote.c b/source/remote.c index 85f05c0..6519b1f 100644 --- a/source/remote.c +++ b/source/remote.c @@ -37,6 +37,9 @@ #include "conversion.h" #include "ui_strings.h" +char *last_search = NULL; +json_int_t last_page = 1; + // forward declaration of special case used only here // TODO: replace this travesty with a proper handler static Result http_get_with_not_found_flag(const char * url, char ** filename, char ** buf, u32 * size, InstallType install_type, const char * acceptable_mime_types, bool not_found_is_error); @@ -205,13 +208,20 @@ static void load_remote_list(Entry_List_s * list, json_int_t page, RemoteMode mo json_t * value; json_object_foreach(root, key, value) { - if (json_is_integer(value) && !strcmp(key, THEMEPLAZA_JSON_PAGE_COUNT)) + if(json_is_true(value) && !strcmp(key, THEMEPLAZA_JSON_SUCCESS)) + last_page = page; + else if (json_is_integer(value) && !strcmp(key, THEMEPLAZA_JSON_PAGE_COUNT)) list->tp_page_count = json_integer_value(value); else if (json_is_array(value) && !strcmp(key, THEMEPLAZA_JSON_PAGE_IDS)) load_remote_entries(list, value, ignore_cache, loading_screen); else if (json_is_string(value) && !strcmp(key, THEMEPLAZA_JSON_ERROR_MESSAGE) && !strcmp(json_string_value(value), THEMEPLAZA_JSON_ERROR_MESSAGE_NOT_FOUND)) + { throw_error(language.remote.no_results, ERROR_LEVEL_WARNING); + if (list->tp_search) free(list->tp_search); + asprintf(&list->tp_search, "%s", last_search); + list->tp_current_page = last_page; + } } } else @@ -417,6 +427,8 @@ static void search_menu(Entry_List_s * list) SwkbdButton button = swkbdInputText(&swkbd, search, max_chars); if (button == SWKBD_BUTTON_CONFIRM) { + free(last_search); + asprintf(&last_search, "%s", list->tp_search); free(list->tp_search); list->tp_search = url_escape(search); DEBUG("Search escaped: %s -> %s\n", search, list->tp_search); @@ -480,6 +492,8 @@ bool themeplaza_browser(RemoteMode mode) Entry_List_s list = { 0 }; Entry_List_s * current_list = &list; current_list->tp_search = strdup(""); + last_search = strdup(""); + last_page = 1; list.entries_per_screen_v = entries_per_screen_v[mode]; list.entries_per_screen_h = entries_per_screen_h[mode]; @@ -781,6 +795,7 @@ bool themeplaza_browser(RemoteMode mode) free_icons(current_list); free(current_list->entries); free(current_list->tp_search); + free(last_search); return downloaded; }