diff options
author | George Hazan <ghazan@miranda.im> | 2022-05-29 15:58:45 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-05-29 15:58:45 +0300 |
commit | 6ab37acb07eb3b1c7db377671ac5f9ce7f2bec53 (patch) | |
tree | fa66b6ad6168587bb2cb1f2e31c0e43f3cd107b5 /protocols/JabberG | |
parent | caba8208505a9883d7121c55ca6791b32832ff29 (diff) |
fixes #1255 (OMEMO UI)
Diffstat (limited to 'protocols/JabberG')
-rw-r--r-- | protocols/JabberG/res/jabber.rc | 69 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_omemo.cpp | 4 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_omemo.h | 2 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_userinfo.cpp | 105 | ||||
-rw-r--r-- | protocols/JabberG/src/resource.h | 6 |
5 files changed, 176 insertions, 10 deletions
diff --git a/protocols/JabberG/res/jabber.rc b/protocols/JabberG/res/jabber.rc index b82a59cf72..5016761346 100644 --- a/protocols/JabberG/res/jabber.rc +++ b/protocols/JabberG/res/jabber.rc @@ -47,9 +47,9 @@ BEGIN LTEXT "Type:",IDC_STATIC,0,0,53,12,SS_CENTERIMAGE
COMBOBOX IDC_CB_TYPE,61,0,124,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "User:",IDC_STATIC,0,16,53,12,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_USERNAME,61,16,124,12,ES_AUTOHSCROLL | WS_TABSTOP
+ EDITTEXT IDC_EDIT_USERNAME,61,16,124,12,ES_AUTOHSCROLL
LTEXT "Domain/Server:",IDC_STATIC,0,31,60,12,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_LOGIN_SERVER,61,31,124,12, ES_AUTOHSCROLL | WS_TABSTOP
+ EDITTEXT IDC_EDIT_LOGIN_SERVER,61,31,124,12,ES_AUTOHSCROLL
LTEXT "Password:",IDC_STATIC,0,46,53,12,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_PASSWORD,61,46,124,12,ES_PASSWORD | ES_AUTOHSCROLL
CONTROL "Save password",IDC_SAVEPASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,61,61,124,10
@@ -112,7 +112,7 @@ BEGIN CONTROL "Use hostname as resource",IDC_HOSTNAME_AS_RESOURCE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,73,138,9
LTEXT "Domain/Server:",IDC_STATIC,12,87,52,8
- EDITTEXT IDC_EDIT_LOGIN_SERVER,66,85,86,12,ES_AUTOHSCROLL | WS_TABSTOP
+ EDITTEXT IDC_EDIT_LOGIN_SERVER,66,85,86,12,ES_AUTOHSCROLL
LTEXT "Port:",IDC_STATIC,12,101,45,8
EDITTEXT IDC_PORT,66,99,26,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Use SSL",IDC_USE_SSL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,100,82,10
@@ -321,6 +321,14 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,96,88,50,14
END
+IDD_INFO_OMEMO DIALOGEX 0, 0, 222, 132
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,0,221,131
+END
+
IDD_VCARD_PHOTO DIALOGEX 0, 0, 222, 132
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
@@ -389,7 +397,7 @@ EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CONTROLPARENT CAPTION "JID List"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_AUTOARRANGE | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,5,198,136
+ CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | LVS_NOLABELWRAP | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,5,198,136
EDITTEXT IDC_FILTER,5,147,161,12,ES_AUTOHSCROLL
CONTROL "Apply Filter",IDC_BTN_FILTERAPPLY,"MButtonClass",WS_TABSTOP,171,146,16,14
CONTROL "Reset Filter",IDC_BTN_FILTERRESET,"MButtonClass",WS_TABSTOP,187,146,16,14
@@ -736,6 +744,10 @@ BEGIN HORZGUIDE, 56
END
+ IDD_INFO_OMEMO, DIALOG
+ BEGIN
+ END
+
IDD_BOOKMARKS, DIALOG
BEGIN
RIGHTMARGIN, 295
@@ -777,55 +789,104 @@ END // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_JABBER ICON "jabber.ico"
+
IDI_ARROW_DOWN ICON "arrow_down.ico"
+
IDI_ARROW_UP ICON "arrow_up.ico"
+
IDI_DISCO_PROGRESS ICON "disco_in_progress.ico"
+
IDI_NODE_RSS ICON "rss.ico"
+
IDI_NODE_SERVER ICON "server.ico"
+
IDI_NODE_STORE ICON "store.ico"
+
IDI_NODE_WEATHER ICON "weather.ico"
+
IDI_DISCO_OK ICON "disco_ok.ico"
+
IDI_DISCO_FAIL ICON "disco_fail.ico"
+
IDI_GROUP ICON "group.ico"
+
IDI_ADDCONTACT ICON "addcontact.ico"
+
IDI_AGENTS ICON "roster.ico"
+
IDI_VCARD ICON "pages.ico"
+
IDI_DELETE ICON "delete.ico"
+
IDI_EDIT ICON "rename.ico"
+
IDI_OPEN ICON "open.ico"
+
IDI_USER2ROOM ICON "user2room.ico"
+
IDI_SAVE ICON "save.ico"
+
IDI_LOGIN ICON "login.ico"
+
IDI_REFRESH ICON "refresh.ico"
+
IDI_COMMAND ICON "command.ico"
+
IDI_BOOKMARKS ICON "bookmarks.ico"
+
IDI_PRIVACY_LISTS ICON "privacy_lists.ico"
+
IDI_SERVICE_DISCOVERY ICON "service_discovery.ico"
+
IDI_VIEW_LIST ICON "view_as_list.ico"
+
IDI_VIEW_TREE ICON "view_as_tree.ico"
+
IDI_FILTER_APPLY ICON "filter.ico"
+
IDI_BROWSE ICON "go.ico"
+
IDI_NAV_HOME ICON "home.ico"
+
IDI_NAV_REFRESH ICON "refresh_node.ico"
+
IDI_FILTER_RESET ICON "reset_filter.ico"
+
IDI_CONSOLE ICON "console.ico"
+
IDI_PL_MSG_ALLOW ICON "message_allow.ico"
+
IDI_PL_MSG_DENY ICON "message_deny.ico"
+
IDI_PL_PRIN_ALLOW ICON "presence_in_allow.ico"
+
IDI_PL_PRIN_DENY ICON "presence_in_deny.ico"
+
IDI_PL_PROUT_ALLOW ICON "presence_out_allow.ico"
+
IDI_PL_PROUT_DENY ICON "presence_out_deny.ico"
+
IDI_PL_QUERY_ALLOW ICON "query_allow.ico"
+
IDI_PL_QUERY_DENY ICON "query_deny.ico"
+
IDI_PL_LIST_ACTIVE ICON "plist_active.ico"
+
IDI_PL_LIST_ANY ICON "plist_any.ico"
+
IDI_PL_LIST_DEFAULT ICON "plist_default.ico"
+
IDI_TRANSPORT ICON "transport.ico"
+
IDI_TRANSPORTL ICON "transport_local.ico"
+
IDI_HTTP_AUTH ICON "openid.ico"
+
IDI_NOTES ICON "notes.ico"
+
IDI_SEND_NOTE ICON "send_note.ico"
+
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
diff --git a/protocols/JabberG/src/jabber_omemo.cpp b/protocols/JabberG/src/jabber_omemo.cpp index 585195b5c9..91c42a925b 100644 --- a/protocols/JabberG/src/jabber_omemo.cpp +++ b/protocols/JabberG/src/jabber_omemo.cpp @@ -1085,7 +1085,7 @@ complete: memcpy(id_buf.get(), address->name, address->name_len);
memcpy(id_buf.get() + address->name_len, &address->device_id, sizeof(int32_t));
- CMStringA szSetting("OmemoSignalIdentity_");
+ CMStringA szSetting(omemo::IdentityPrefix);
szSetting.Append(ptrA(mir_base64_encode(id_buf, address->name_len + sizeof(int32_t))));
if (key_data != nullptr)
@@ -1126,7 +1126,7 @@ complete: char *id_str = mir_base64_encode(id_buf, address->name_len + sizeof(int32_t));
mir_free(id_buf);
char *setting_name = (char*)mir_alloc(strlen(id_str) + 65);
- mir_snprintf(setting_name, strlen(id_str) + 64, "%s%s", "OmemoSignalIdentity_", id_str);
+ mir_snprintf(setting_name, strlen(id_str) + 64, "%s%s", omemo::IdentityPrefix, id_str);
mir_free(id_str);
diff --git a/protocols/JabberG/src/jabber_omemo.h b/protocols/JabberG/src/jabber_omemo.h index ced819f407..8d5eafd818 100644 --- a/protocols/JabberG/src/jabber_omemo.h +++ b/protocols/JabberG/src/jabber_omemo.h @@ -32,6 +32,8 @@ struct signal_crypto_provider; namespace omemo
{
+ const char IdentityPrefix[] = "OmemoSignalIdentity_";
+
struct omemo_device;
struct omemo_impl
diff --git a/protocols/JabberG/src/jabber_userinfo.cpp b/protocols/JabberG/src/jabber_userinfo.cpp index b61af8c73d..96266010b9 100644 --- a/protocols/JabberG/src/jabber_userinfo.cpp +++ b/protocols/JabberG/src/jabber_userinfo.cpp @@ -559,7 +559,7 @@ struct USER_PHOTO_INFO static INT_PTR CALLBACK JabberUserPhotoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - USER_PHOTO_INFO *photoInfo = (USER_PHOTO_INFO *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + auto *photoInfo = (USER_PHOTO_INFO *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: @@ -751,6 +751,99 @@ static INT_PTR CALLBACK JabberUserPhotoDlgProc(HWND hwndDlg, UINT msg, WPARAM wP } ///////////////////////////////////////////////////////////////////////////////////////// +// JabberUserPhotoDlgProc - Jabber photo dialog + +struct USER_OMEMO_INFO +{ + MCONTACT hContact; + CJabberProto *ppro; +}; + +static int EnumOmemoSessions(const char *szSetting, void *param) +{ + auto *pList = (LIST<char>*)param; + + if (!memcmp(szSetting, omemo::IdentityPrefix, sizeof(omemo::IdentityPrefix) - 1)) + pList->insert(mir_strdup(szSetting + sizeof(omemo::IdentityPrefix))); + + return 0; +} + +static INT_PTR CALLBACK JabberUserOmemoDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lParam) +{ + auto *pInfo = (USER_OMEMO_INFO *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST); + + switch (msg) { + case WM_INITDIALOG: + // lParam is hContact + TranslateDialogDefault(hwndDlg); + pInfo = (USER_OMEMO_INFO *)mir_alloc(sizeof(USER_OMEMO_INFO)); + pInfo->hContact = lParam; + pInfo->ppro = nullptr; + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)pInfo); + { + LV_COLUMN lvc = {}; + lvc.mask = LVCF_TEXT | LVCF_WIDTH; + + lvc.cx = 80; + lvc.pszText = TranslateT("Device ID"); + ListView_InsertColumn(hwndList, 1, &lvc); + + lvc.cx = 240; + lvc.pszText = TranslateT("Fingerprint"); + ListView_InsertColumn(hwndList, 2, &lvc); + } + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) { + case PSN_INFOCHANGED: + SendMessage(hwndDlg, WM_PROTO_REFRESH, 0, 0); + break; + + case PSN_PARAMCHANGED: + pInfo->ppro = (CJabberProto *)((PSHNOTIFY *)lParam)->lParam; + break; + } + break; + } + break; + + case WM_PROTO_REFRESH: + ListView_DeleteAllItems(hwndList); + + LIST<char> arSettings(1); + db_enum_settings(pInfo->hContact, EnumOmemoSessions, pInfo->ppro->m_szModuleName, &arSettings); + for (auto &it : arSettings) { + size_t len; + ptrA binVal((char*)mir_base64_decode(it, &len)); + + if (len <= sizeof(uint32_t)) + continue; + + uint32_t deviceId = *(uint32_t *)(binVal.get() + len - sizeof(uint32_t)); + CMStringA szText(FORMAT, "%X", deviceId); + + LVITEMA lvi = {}; + lvi.mask = LVIF_TEXT; + lvi.pszText = szText.GetBuffer(); + int idx = SendMessage(hwndList, LVM_INSERTITEMA, 0, LPARAM(&lvi)); + + szText.Truncate(int(len) * 2); + bin2hex(binVal, len - sizeof(uint32_t), szText.GetBuffer()); + lvi.iSubItem = 1; + lvi.pszText = szText.GetBuffer(); + SendMessage(hwndList, LVM_SETITEMTEXTA, idx, LPARAM(&lvi)); + } + break; + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////////////////////////// // OnInfoInit - initializes user info option dialogs int CJabberProto::OnUserInfoInit(WPARAM wParam, LPARAM hContact) @@ -780,8 +873,16 @@ int CJabberProto::OnUserInfoInit(WPARAM wParam, LPARAM hContact) odp.pszTemplate = MAKEINTRESOURCEA(IDD_VCARD_PHOTO); odp.szTitle.a = LPGEN("Photo"); g_plugin.addUserInfo(wParam, &odp); + + if (m_bUseOMEMO) { + odp.pfnDlgProc = JabberUserOmemoDlgProc; + odp.position = 2000000001; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_OMEMO); + odp.szTitle.a = "OMEMO"; + g_plugin.addUserInfo(wParam, &odp); + } } - //TODO: add omemo dialog to userinfo + return 0; } diff --git a/protocols/JabberG/src/resource.h b/protocols/JabberG/src/resource.h index 99b4b3d263..76b592d449 100644 --- a/protocols/JabberG/src/resource.h +++ b/protocols/JabberG/src/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
-// Used by w:\miranda-ng\protocols\JabberG\res\jabber.rc
+// Used by C:\Users\georg\DiskW\miranda-ng\protocols\JabberG\res\jabber.rc
//
#define IDD_OPT_JABBER 101
#define IDI_JABBER 102
@@ -24,6 +24,7 @@ #define IDI_ADDCONTACT 122
#define IDI_DELETE 123
#define IDI_EDIT 124
+#define IDD_INFO_OMEMO 125
#define IDD_VCARD_HOME 126
#define IDD_VCARD_PERSONAL 127
#define IDD_VCARD_WORK 128
@@ -292,6 +293,7 @@ #define IDC_USEDOMAINLOGIN 1323
#define IDC_TXT_ALTNICK 1323
#define IDC_SAVE_PERM 1324
+#define IDC_LIST1 1326
#define IDC_BM_LIST 3002
#define IDC_ADD 3004
#define IDC_REMOVE 3005
@@ -315,7 +317,7 @@ #define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 235
#define _APS_NEXT_COMMAND_VALUE 40017
-#define _APS_NEXT_CONTROL_VALUE 1325
+#define _APS_NEXT_CONTROL_VALUE 1327
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
|