From 774553076447ee5b8d3d158b23ee3db74e70513b Mon Sep 17 00:00:00 2001 From: Dylan G <1565516+Helloman892@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:55:17 +0000 Subject: [PATCH] Fixed 4720a499 (TP returns 303 currently, not 404) => handle 303 well(?); pushed some code around --- source/camera.c | 2 +- source/remote.c | 44 +++++++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/source/camera.c b/source/camera.c index b68db76..7c8de42 100644 --- a/source/camera.c +++ b/source/camera.c @@ -340,7 +340,7 @@ bool init_qr(void) free(zip_buf); return false; } - else if (R_DESCRIPTION(res) == RD_CANCEL_REQUESTED) + else if (R_DESCRIPTION(res) == RD_NO_DATA || R_DESCRIPTION(res) == RD_CANCEL_REQUESTED) { free(filename); return true; diff --git a/source/remote.c b/source/remote.c index be3aa5d..ade0d50 100644 --- a/source/remote.c +++ b/source/remote.c @@ -250,7 +250,7 @@ static void load_remote_list(Entry_List_s * list, json_int_t page, EntryMode mod json_decref(root); } else - throw_error("Couldn't download ThemePlaza data.\nMake sure WiFi is on.", ERROR_LEVEL_WARNING); + throw_error("Couldn't download Theme Plaza data.\nMake sure WiFi is on.", ERROR_LEVEL_WARNING); free(page_json); } @@ -757,10 +757,11 @@ typedef struct header typedef enum ParseResult { SUCCESS, // 200/203 (203 indicates a successful request with a transformation applied by a proxy) - REDIRECT, // 301/302/303/307/308 + REDIRECT, // 301/302/307/308 HTTPC_ERROR, ABORTED, SERVER_IS_MISBEHAVING, + SEE_OTHER = 303, // Theme Plaza returns these HTTP_UNAUTHORIZED = 401, HTTP_FORBIDDEN = 403, HTTP_NOT_FOUND = 404, @@ -965,6 +966,24 @@ redirect: // goto here if we need to redirect if(R_FAILED(ret)) return ret; return MAKERESULT(RL_SUCCESS, RS_CANCELED, RM_APPLICATION, RD_CANCEL_REQUESTED); + case HTTPC_ERROR: + DEBUG("httpc error %lx\n", _header.result_code); + snprintf(err_buf, ERROR_BUFFER_SIZE, "Error in HTTPC sysmodule - 0x%08lx.\nIf you are seeing this, please contact an\nAnemone developer on the Theme Plaza Discord.", _header.result_code); + throw_error(err_buf, ERROR_LEVEL_ERROR); + quit = true; + httpcCloseContext(&context); + return _header.result_code; + case SEE_OTHER: + if (strstr(url, THEMEPLAZA_BASE_URL)) + { + snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP 303 See Other (Theme Plaza)\nHas this theme been approved?"); + goto error; + } + else + { + snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP 303 See Other\nDownload the resource directly\nor contact the site administrator."); + goto error; + } case REDIRECT: httpcGetResponseHeader(&context, "Location", redirect_url, 0x824); httpcCloseContext(&context); @@ -982,21 +1001,10 @@ redirect: // goto here if we need to redirect } DEBUG("HTTP Redirect: %s %s\n", new_url, *redirect_url == '/' ? "relative" : "absolute"); goto redirect; - case HTTP_UNACCEPTABLE: - DEBUG("HTTP 406 Unacceptable; Accept: %s\n", acceptable_mime_types); - snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE); - goto error; case SERVER_IS_MISBEHAVING: DEBUG("Server is misbehaving (provided resource with incorrect MIME)\n"); snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE); goto error; - case HTTPC_ERROR: - DEBUG("httpc error %lx\n", _header.result_code); - snprintf(err_buf, ERROR_BUFFER_SIZE, "Error in HTTPC sysmodule - 0x%lx.\nIf you are seeing this, please contact an\nAnemone developer on the ThemePlaza Discord.", _header.result_code); - throw_error(err_buf, ERROR_LEVEL_ERROR); - quit = true; - httpcCloseContext(&context); - return _header.result_code; case HTTP_NOT_FOUND: case HTTP_GONE: ; const char * http_error = parse == HTTP_NOT_FOUND ? "404 Not Found" : "410 Gone"; @@ -1006,6 +1014,10 @@ redirect: // goto here if we need to redirect else snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP %s\nCheck that the URL is correct.", http_error); goto error; + case HTTP_UNACCEPTABLE: + DEBUG("HTTP 406 Unacceptable; Accept: %s\n", acceptable_mime_types); + snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE); + goto error; case HTTP_UNAUTHORIZED: case HTTP_FORBIDDEN: case HTTP_PROXY_UNAUTHORIZED: @@ -1057,7 +1069,9 @@ redirect: // goto here if we need to redirect goto no_error; error: throw_error(err_buf, ERROR_LEVEL_WARNING); - return httpcCloseContext(&context); + Result res = httpcCloseContext(&context); + if (R_FAILED(res)) return res; + return MAKERESULT(RL_TEMPORARY, RS_CANCELED, RM_APPLICATION, RD_NO_DATA); no_error:; u32 chunk_size; if (_header.file_size) @@ -1118,4 +1132,4 @@ no_error:; DEBUG("size: %lu\n", *size); if (filename) { DEBUG("filename: %s\n", *filename); } return MAKERESULT(RL_SUCCESS, RS_SUCCESS, RM_APPLICATION, RD_SUCCESS); -} + }