From 9a9a97868d0366408d7a310de3fa7158a294854e Mon Sep 17 00:00:00 2001 From: swirl Date: Fri, 27 May 2022 15:25:28 -0400 Subject: [PATCH] implement working OMEMO QR code TODO: We need to find a way to switch the colors of the QR code, so that more QR readers can detect it, without "blending" the edges of the QR code with the surrounding terminal window. Signed-off-by: swirl --- src/command/cmd_funcs.c | 14 +++++++++++++- src/ui/console.c | 13 ++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 29c8a29a..81293c15 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -9039,7 +9039,18 @@ gboolean cmd_omemo_qrcode(ProfWin* window, const char* const command, gchar** args) { #ifdef HAVE_OMEMO - cons_show_omemo_qrcode("some text from me"); + if (connection_get_status() != JABBER_CONNECTED) { + cons_show("You must be connected with an account to load OMEMO information."); + return TRUE; + } + + if (!omemo_loaded()) { + win_println(window, THEME_DEFAULT, "!", "You have not generated or loaded a cryptographic materials, use '/omemo gen'"); + return TRUE; + } + + char* fingerprint = omemo_own_fingerprint(TRUE); + cons_show_omemo_qrcode(fingerprint); return TRUE; #else cons_show("This version of Profanity has not been built with OMEMO support enabled"); @@ -9767,3 +9778,4 @@ cmd_mood(ProfWin* window, const char* const command, gchar** args) } return TRUE; } + diff --git a/src/ui/console.c b/src/ui/console.c index ae1f796d..e0b0fa4d 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -878,18 +878,16 @@ cons_show_omemo_qrcode(const char* const text) ProfWin* console = wins_get_console(); + char buf[(width * 4) + 1]; + memset(buf, 0, sizeof buf); for (size_t y = 0; y < width; y+=ZOOM_SIZE) { - //size_t y_index = y * width; for (size_t x = 0; x < width; x+=ZOOM_SIZE) { - if (x==0) { - win_print(console, THEME_DEFAULT, "", "%s", (*data & 1) ? "A" : "B"); - } else { - win_append(console, THEME_DEFAULT, "", "%s", (*data & 1) ? "A" : "B"); - } + strcat(buf, (*data & 1) ? "\u2588\u2588" : "\u2800\u2800"); data++; } - win_println(console, THEME_DEFAULT, "", ""); + win_println(console, THEME_DEFAULT, "", "%s", buf); + memset(buf, 0, sizeof buf); } QRcode_free(qrcode); @@ -2928,3 +2926,4 @@ cons_remove_alert(ProfWin* window) g_list_free_full(item, g_free); free(win_name); } +