From 6880aaac0ff133697ce9022cc4b525344470e483 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Mon, 24 Jan 2022 13:18:19 +0300 Subject: [PATCH] Automatically choose correct way to send QR code * use request_fields API when UI implemented it * use embedded image if image is available in imgstore + plain-text qrcode * use plain-text qrcode in other cases --- src/c/gowhatsapp.h | 2 +- src/c/options.c | 7 ------- src/c/qrcode.c | 24 ++++++++++++++++++------ src/go/constants.h | 1 - src/go/login.go | 2 +- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/c/gowhatsapp.h b/src/c/gowhatsapp.h index 95953a4..95d2023 100644 --- a/src/c/gowhatsapp.h +++ b/src/c/gowhatsapp.h @@ -18,7 +18,7 @@ void gowhatsapp_login(PurpleAccount *account); void gowhatsapp_close(PurpleConnection *pc); // qrcode -void gowhatsapp_handle_qrcode(PurpleAccount *account, const char *challenge, const char *terminal, void *image_data, size_t image_data_len); +void gowhatsapp_handle_qrcode(PurpleConnection *pc, const char *challenge, const char *terminal, void *image_data, size_t image_data_len); void gowhatsapp_close_qrcode(PurpleAccount *account); // process_message diff --git a/src/c/options.c b/src/c/options.c index 3a71e21..35663aa 100644 --- a/src/c/options.c +++ b/src/c/options.c @@ -41,13 +41,6 @@ gowhatsapp_add_account_options(GList *account_options) ); account_options = g_list_append(account_options, option); - option = purple_account_option_bool_new( - "Plain-text login", - GOWHATSAPP_PLAIN_TEXT_LOGIN_OPTION, - FALSE - ); - account_options = g_list_append(account_options, option); - option = purple_account_option_bool_new( "Display offline contacts as away", GOWHATSAPP_FAKE_ONLINE_OPTION, diff --git a/src/c/qrcode.c b/src/c/qrcode.c index 961bc8f..7d497a9 100644 --- a/src/c/qrcode.c +++ b/src/c/qrcode.c @@ -53,13 +53,25 @@ gowhatsapp_display_qrcode(PurpleAccount *account, const char * challenge, void * } void -gowhatsapp_handle_qrcode(PurpleAccount *account, const char *challenge, const char *terminal, void *image_data, size_t image_data_len) +gowhatsapp_handle_qrcode(PurpleConnection *pc, const char *challenge, const char *terminal, void *image_data, size_t image_data_len) { - if (image_data_len > 0) { + PurpleMessageFlags flags = PURPLE_MESSAGE_RECV; + PurpleRequestUiOps *ui_ops = purple_request_get_ui_ops(); + if (!ui_ops->request_fields || image_data_len <= 0) { + // The UI hasn't implemented the func we want, just output as a message instead + gchar *msg_out; + gpointer img_data = g_memdup(image_data, image_data_len); + int img_id = purple_imgstore_add_with_id(img_data, image_data_len, NULL); + if (img_id >= 0) { + msg_out = g_strdup_printf("%s: \"%s\"/
%s", "Please scan this QR code with your phone", img_id, challenge, terminal); + flags |= PURPLE_MESSAGE_IMAGES; + } else { + msg_out = g_strdup_printf("%s: %s
%s", "Please scan this QR code with your phone", challenge, terminal); + } + purple_serv_got_im(pc, "Logon QR Code", msg_out, flags, time(NULL)); + g_free(msg_out); + } else { + PurpleAccount *account = purple_connection_get_account(pc); gowhatsapp_display_qrcode(account, challenge, image_data, image_data_len); } - if (purple_account_get_bool(account, GOWHATSAPP_PLAIN_TEXT_LOGIN_OPTION, FALSE)) { - PurpleConnection *pc = purple_account_get_connection(account); - purple_serv_got_im(pc, "login@whatsmeow", terminal, PURPLE_MESSAGE_RECV, time(NULL)); - } } diff --git a/src/go/constants.h b/src/go/constants.h index d857abe..e20d34e 100644 --- a/src/go/constants.h +++ b/src/go/constants.h @@ -25,7 +25,6 @@ CHARCONSTANT(GOWHATSAPP_QRCODE_SIZE_OPTION, "qrcode-size"); CHARCONSTANT(GOWHATSAPP_SEND_RECEIPT_OPTION, "send-receipt"); CHARCONSTANT(GOWHATSAPP_GET_ICONS_OPTION, "get-icons"); CHARCONSTANT(GOWHATSAPP_SPECTRUM_COMPATIBILITY_OPTION, "spectrum-compatibility"); -CHARCONSTANT(GOWHATSAPP_PLAIN_TEXT_LOGIN_OPTION, "plain-text-login"); CHARCONSTANT(GOWHATSAPP_DATABASE_ADDRESS_OPTION, "database-address"); CHARCONSTANT(GOWHATSAPP_DATABASE_ADDRESS_DEFAULT, "file:$purple_user_dir/whatsmeow.db?_foreign_keys=on&_busy_timeout=3000"); diff --git a/src/go/login.go b/src/go/login.go index 7976275..da6f1a8 100644 --- a/src/go/login.go +++ b/src/go/login.go @@ -165,7 +165,7 @@ func (handler *Handler) connect() { var png []byte var b strings.Builder fmt.Fprintf(&b, "Scan this code to log in:\n%s\n", evt.Code) - qrterminal.Generate(evt.Code, qrterminal.L, &b) + qrterminal.GenerateHalfBlock(evt.Code, qrterminal.L, &b) size := purple_get_int(handler.account, C.GOWHATSAPP_QRCODE_SIZE_OPTION, 256) if size > 0 { png, err = qrcode.Encode(evt.Code, qrcode.Medium, size)