Reload lists after scanning, and move text to bottom to leave top solely to camera (#126)

* reload lists after qr code is scanned

* move "press R to exit" to bottom screen
This commit is contained in:
LiquidFenrir
2017-12-31 16:01:26 +01:00
committed by GitHub
parent 642b9f9c13
commit c6f3af7350
3 changed files with 27 additions and 15 deletions

View File

@@ -34,13 +34,14 @@ typedef struct {
u32 *texture_buffer; u32 *texture_buffer;
Handle mutex; Handle mutex;
volatile bool finished; volatile bool finished;
volatile bool success;
Handle cancel; Handle cancel;
bool capturing; bool capturing;
struct quirc* context; struct quirc* context;
} qr_data; } qr_data;
void init_qr(EntryMode current_mode); bool init_qr(EntryMode current_mode);
void exit_qr(qr_data *data); void exit_qr(qr_data *data);
void take_picture(void); void take_picture(void);
Result http_get(char *url, const char *path); Result http_get(char *url, const char *path);

View File

@@ -141,7 +141,7 @@ bool start_capture_cam(qr_data *data)
void update_qr(qr_data *data, EntryMode current_mode) void update_qr(qr_data *data, EntryMode current_mode)
{ {
hidScanInput(); hidScanInput();
if (hidKeysDown() & KEY_R) { if (hidKeysDown() & (KEY_R | KEY_B | KEY_TOUCH)) {
exit_qr(data); exit_qr(data);
return; return;
} }
@@ -169,10 +169,11 @@ void update_qr(qr_data *data, EntryMode current_mode)
pp2d_load_texture_memory(TEXTURE_QR, data->texture_buffer, 400, 240); pp2d_load_texture_memory(TEXTURE_QR, data->texture_buffer, 400, 240);
pp2d_draw_texture(TEXTURE_QR, 0, 0); pp2d_draw_texture(TEXTURE_QR, 0, 0);
pp2d_draw_rectangle(0, 216, 400, 24, RGBA8(55, 122, 168, 255));
pp2d_draw_text_center(GFX_TOP, 220, 0.5, 0.5, RGBA8(255, 255, 255, 255), "Press \uE005 To Quit"); pp2d_draw_on(GFX_BOTTOM, GFX_LEFT);
pp2d_draw_text_center(GFX_BOTTOM, 4, 0.5, 0.5, RGBA8(255, 255, 255, 255), "Press \uE005 To Quit");
pp2d_end_draw(); pp2d_end_draw();
int w; int w;
int h; int h;
u8 *image = (u8*) quirc_begin(data->context, &w, &h); u8 *image = (u8*) quirc_begin(data->context, &w, &h);
@@ -194,12 +195,13 @@ void update_qr(qr_data *data, EntryMode current_mode)
{ {
exit_qr(data); exit_qr(data);
http_get((char*)scan_data.payload, main_paths[current_mode]); http_get((char*)scan_data.payload, main_paths[current_mode]);
data->success = true;
} }
} }
} }
void init_qr(EntryMode current_mode) bool init_qr(EntryMode current_mode)
{ {
qr_data *data = calloc(1, sizeof(qr_data)); qr_data *data = calloc(1, sizeof(qr_data));
data->capturing = false; data->capturing = false;
@@ -211,6 +213,8 @@ void init_qr(EntryMode current_mode)
data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32)); data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32));
while (!data->finished) update_qr(data, current_mode); while (!data->finished) update_qr(data, current_mode);
return (bool)data->success;
} }
/* /*

View File

@@ -108,17 +108,21 @@ static void exit_thread(void)
} }
} }
void exit_function(bool power_pressed) void free_lists(void)
{ {
stop_install_check(); stop_install_check();
for(int i = 0; i < MODE_AMOUNT; i++) for(int i = 0; i < MODE_AMOUNT; i++)
{ {
Entry_List_s * current_list = &lists[i]; Entry_List_s * current_list = &lists[i];
free(current_list->entries); free(current_list->entries);
current_list->entries = NULL; memset(current_list, 0, sizeof(Entry_List_s));
} }
exit_thread(); exit_thread();
}
void exit_function(bool power_pressed)
{
free_lists();
svcCloseHandle(update_icons_handle); svcCloseHandle(update_icons_handle);
exit_screens(); exit_screens();
exit_services(); exit_services();
@@ -209,8 +213,7 @@ static void load_lists(Entry_List_s * lists)
{ {
ssize_t texture_id_offset = TEXTURE_ICON; ssize_t texture_id_offset = TEXTURE_ICON;
stop_install_check(); free_lists();
exit_thread();
for(int i = 0; i < MODE_AMOUNT; i++) for(int i = 0; i < MODE_AMOUNT; i++)
{ {
InstallType loading_screen = INSTALL_NONE; InstallType loading_screen = INSTALL_NONE;
@@ -222,8 +225,6 @@ static void load_lists(Entry_List_s * lists)
draw_install(loading_screen); draw_install(loading_screen);
Entry_List_s * current_list = &lists[i]; Entry_List_s * current_list = &lists[i];
free(current_list->entries);
memset(current_list, 0, sizeof(Entry_List_s));
Result res = load_entries(main_paths[i], current_list, i); Result res = load_entries(main_paths[i], current_list, i);
if(R_SUCCEEDED(res)) if(R_SUCCEEDED(res))
{ {
@@ -353,7 +354,13 @@ int main(void)
u32 out; u32 out;
ACU_GetWifiStatus(&out); ACU_GetWifiStatus(&out);
if(out) if(out)
init_qr(current_mode); {
if(init_qr(current_mode))
{
load_lists(lists);
}
}
else else
{ {
throw_error("Please connect to Wi-Fi before scanning QRs", ERROR_LEVEL_WARNING); throw_error("Please connect to Wi-Fi before scanning QRs", ERROR_LEVEL_WARNING);