diff options
author | ElzorFox <elzorfox@ya.ru> | 2023-03-13 19:31:28 +0500 |
---|---|---|
committer | ElzorFox <elzorfox@ya.ru> | 2023-03-13 19:31:46 +0500 |
commit | 5bf9848f7ca25a4844075e44b3e76e8981092169 (patch) | |
tree | 9673dff85599b1c386d022fd2f8143e3820281e0 /protocols/VKontakte | |
parent | 933930da6d8b0bc185c3675b38be044036698515 (diff) |
VKontakte:
support for group chats in database
version bump
Diffstat (limited to 'protocols/VKontakte')
-rw-r--r-- | protocols/VKontakte/src/version.h | 2 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_chats.cpp | 73 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_proto.h | 2 |
3 files changed, 54 insertions, 23 deletions
diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index fad645e254..b700f4f188 100644 --- a/protocols/VKontakte/src/version.h +++ b/protocols/VKontakte/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 1
#define __RELEASE_NUM 14
-#define __BUILD_NUM 2
+#define __BUILD_NUM 3
#include <stdver.h>
diff --git a/protocols/VKontakte/src/vk_chats.cpp b/protocols/VKontakte/src/vk_chats.cpp index 48a5a98d8b..dcd3801207 100644 --- a/protocols/VKontakte/src/vk_chats.cpp +++ b/protocols/VKontakte/src/vk_chats.cpp @@ -246,7 +246,7 @@ void CVkProto::OnReceiveChatInfo(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe cc->m_bHistoryRead = true;
for (auto &p : cc->m_msgs)
- AppendChatMessage(cc, p->m_uid, p->m_date, p->m_wszBody, p->m_bHistory, p->m_bIsAction);
+ AppendChatMessage(cc, p->m_mid, p->m_uid, p->m_date, p->m_wszBody, p->m_bHistory, p->m_bIsAction);
cc->m_msgs.destroy();
}
@@ -395,7 +395,7 @@ void CVkProto::AppendChatConversationMessage(int id, const JSONNode& jnMsg, cons wszBody.Replace(L"%", L"%%");
if (cc->m_bHistoryRead) {
- AppendChatMessage(cc, uid, msgTime, wszBody, bIsHistory, bIsAction);
+ AppendChatMessage(cc, mid, uid, msgTime, wszBody, bIsHistory, bIsAction);
}
else {
CVkChatMessage* cm = cc->m_msgs.find((CVkChatMessage*)&mid);
@@ -410,29 +410,60 @@ void CVkProto::AppendChatConversationMessage(int id, const JSONNode& jnMsg, cons }
}
-void CVkProto::AppendChatMessage(CVkChatInfo *cc, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction)
+void CVkProto::AppendChatMessage(CVkChatInfo *cc, LONG mid, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction)
{
debugLogA("CVkProto::AppendChatMessage2");
- MCONTACT hContact = FindUser(uid);
- CVkChatUser *cu = cc->m_users.find((CVkChatUser*)&uid);
- if (cu == nullptr) {
- cc->m_users.insert(cu = new CVkChatUser(uid));
- CMStringW wszNick(ptrW(db_get_wsa(cc->m_si->hContact, m_szModuleName, CMStringA(FORMAT, "nick%d", cu->m_uid))));
- cu->m_wszNick = mir_wstrdup(wszNick.IsEmpty() ? (hContact ? ptrW(db_get_wsa(hContact, m_szModuleName, "Nick")) : TranslateT("Unknown")) : wszNick);
- cu->m_bUnknown = true;
+
+ MCONTACT hChatContact = cc->m_si->hContact;
+ if (!hChatContact)
+ return;
+
+ if (bIsAction) {
+ MCONTACT hContact = FindUser(uid);
+ CVkChatUser* cu = cc->m_users.find((CVkChatUser*)&uid);
+ if (cu == nullptr) {
+ cc->m_users.insert(cu = new CVkChatUser(uid));
+ CMStringW wszNick(ptrW(db_get_wsa(cc->m_si->hContact, m_szModuleName, CMStringA(FORMAT, "nick%d", cu->m_uid))));
+ cu->m_wszNick = mir_wstrdup(wszNick.IsEmpty() ? (hContact ? ptrW(db_get_wsa(hContact, m_szModuleName, "Nick")) : TranslateT("Unknown")) : wszNick);
+ cu->m_bUnknown = true;
+ }
+
+ wchar_t wszId[20];
+ _itow(uid, wszId, 10);
+
+ GCEVENT gce = { cc->m_si, GC_EVENT_ACTION };
+ gce.bIsMe = (uid == m_myUserId);
+ gce.pszUID.w = wszId;
+ gce.time = msgTime;
+ gce.dwFlags = (bIsHistory) ? GCEF_NOTNOTIFY : GCEF_ADDTOLOG;
+ gce.pszNick.w = cu->m_wszNick ? mir_wstrdup(cu->m_wszNick) : mir_wstrdup(hContact ? ptrW(db_get_wsa(hContact, m_szModuleName, "Nick")) : TranslateT("Unknown"));
+ gce.pszText.w = IsEmpty((wchar_t*)pwszBody) ? mir_wstrdup(L"...") : mir_wstrdup(pwszBody);
+ Chat_Event(&gce);
+ }
+ else {
+
+ char szId[20];
+ _itoa(uid, szId, 10);
+
+ char szMid[40];
+ _itoa(mid, szMid, 10);
+
+ T2Utf pszBody(pwszBody);
+
+ PROTORECVEVENT pre = {};
+ pre.szMsgId = szMid;
+ pre.timestamp = msgTime;
+ pre.szMessage = pszBody;
+ if (uid == m_myUserId)
+ pre.flags |= PREF_SENT;
+ if (bIsHistory)
+ pre.flags |= PREF_CREATEREAD;
+
+ pre.szUserId = szId;
+
+ ProtoChainRecvMsg(hChatContact, &pre);
}
- wchar_t wszId[20];
- _itow(uid, wszId, 10);
-
- GCEVENT gce = { cc->m_si, bIsAction ? GC_EVENT_ACTION : GC_EVENT_MESSAGE };
- gce.bIsMe = (uid == m_myUserId);
- gce.pszUID.w = wszId;
- gce.time = msgTime;
- gce.dwFlags = (bIsHistory) ? GCEF_NOTNOTIFY : GCEF_ADDTOLOG;
- gce.pszNick.w = cu->m_wszNick ? mir_wstrdup(cu->m_wszNick) : mir_wstrdup(hContact ? ptrW(db_get_wsa(hContact, m_szModuleName, "Nick")) : TranslateT("Unknown"));
- gce.pszText.w = IsEmpty((wchar_t *)pwszBody) ? mir_wstrdup(L"...") : mir_wstrdup(pwszBody);
- Chat_Event(&gce);
StopChatContactTyping(cc->m_iChatId, uid);
}
diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index c93e159620..365c207d1a 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -394,7 +394,7 @@ private: CVkChatInfo* AppendConversationChat(int iChatId, const JSONNode& jnItem);
void SetChatTitle(CVkChatInfo *cc, LPCWSTR wszTopic);
void AppendChatConversationMessage(int id, const JSONNode& jnMsg, const JSONNode& jnFUsers, bool bIsHistory);
- void AppendChatMessage(CVkChatInfo *cc, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction = false);
+ void AppendChatMessage(CVkChatInfo *cc, LONG mid, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction = false);
void RetrieveChatInfo(CVkChatInfo*);
void OnReceiveChatInfo(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
void OnSendChatMsg(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
|