summaryrefslogtreecommitdiff
path: root/protocols/JabberG
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-05-29 15:58:45 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-05-29 15:58:45 +0300
commit6ab37acb07eb3b1c7db377671ac5f9ce7f2bec53 (patch)
treefa66b6ad6168587bb2cb1f2e31c0e43f3cd107b5 /protocols/JabberG
parentcaba8208505a9883d7121c55ca6791b32832ff29 (diff)
fixes #1255 (OMEMO UI)
Diffstat (limited to 'protocols/JabberG')
-rw-r--r--protocols/JabberG/res/jabber.rc69
-rw-r--r--protocols/JabberG/src/jabber_omemo.cpp4
-rw-r--r--protocols/JabberG/src/jabber_omemo.h2
-rw-r--r--protocols/JabberG/src/jabber_userinfo.cpp105
-rw-r--r--protocols/JabberG/src/resource.h6
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