diff options
author | ElzorFox <elzorfox@ya.ru> | 2018-09-24 13:09:41 +0500 |
---|---|---|
committer | ElzorFox <elzorfox@ya.ru> | 2018-09-24 13:09:41 +0500 |
commit | e7e51ab6c58353474316318f1a650e37fe46726e (patch) | |
tree | 81109c58d904e2abdad5474ab12ee738941dc3dc | |
parent | 0fcdde09a8e85689d9cfc0764a9015d5d352ff82 (diff) |
VKontakte:
use db_event_edit for edited messages
version bump
-rw-r--r-- | protocols/VKontakte/src/misc.cpp | 7 | ||||
-rw-r--r-- | protocols/VKontakte/src/version.h | 2 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_messages.cpp | 40 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_proto.h | 4 |
4 files changed, 34 insertions, 19 deletions
diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp index d4af4c1a8c..149c659fa8 100644 --- a/protocols/VKontakte/src/misc.cpp +++ b/protocols/VKontakte/src/misc.cpp @@ -1540,14 +1540,14 @@ void CVkProto::AddVkDeactivateEvent(MCONTACT hContact, CMStringW& wszType) }
-MEVENT CVkProto::GetMessageFromDb(UINT iMsgId, UINT ×tamp, CMStringW &msg)
+MEVENT CVkProto::GetMessageFromDb(UINT iMsgId, UINT ×tamp, CMStringW &msg, DBEVENTINFO& dbei)
{
char szMid[40];
_itoa(iMsgId, szMid, 10);
- return GetMessageFromDb(szMid, timestamp, msg);
+ return GetMessageFromDb(szMid, timestamp, msg, dbei);
}
-MEVENT CVkProto::GetMessageFromDb(const char *messageId, UINT ×tamp, CMStringW &msg)
+MEVENT CVkProto::GetMessageFromDb(const char *messageId, UINT ×tamp, CMStringW &msg, DBEVENTINFO& dbei)
{
if (messageId == nullptr)
return 0;
@@ -1556,7 +1556,6 @@ MEVENT CVkProto::GetMessageFromDb(const char *messageId, UINT ×tamp, CMStri if (!hDbEvent)
return 0;
- DBEVENTINFO dbei = {};
dbei.cbBlob = db_event_getBlobSize(hDbEvent);
mir_ptr<BYTE> blob((PBYTE)mir_alloc(dbei.cbBlob));
dbei.pBlob = blob;
diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index d8744cb847..46b5f285c1 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 6
-#define __BUILD_NUM 0
+#define __BUILD_NUM 1
#include <stdver.h>
diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp index 3da04a204a..d04f907043 100644 --- a/protocols/VKontakte/src/vk_messages.cpp +++ b/protocols/VKontakte/src/vk_messages.cpp @@ -288,6 +288,8 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe mids.Append(szMid);
}
+ bool bUseServerReadFlag = m_vkOptions.bSyncReadMessageStatusFromServer ? true : !m_vkOptions.bMesAsUnread;
+
if (chat_id != 0) {
debugLogA("CVkProto::OnReceiveMessages chat_id != 0");
CMStringW action_chat = jnMsg["action"].as_mstring();
@@ -303,15 +305,6 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe continue;
}
- PROTORECVEVENT recv = { 0 };
- bool bUseServerReadFlag = m_vkOptions.bSyncReadMessageStatusFromServer ? true : !m_vkOptions.bMesAsUnread;
- if (isRead && bUseServerReadFlag)
- recv.flags |= PREF_CREATEREAD;
- if (isOut)
- recv.flags |= PREF_SENT;
- else if (m_vkOptions.bUserForceInvisibleOnActivity && time(0) - datetime < 60 * m_vkOptions.iInvisibleInterval)
- SetInvisible(hContact);
-
time_t update_time = (time_t)jnMsg["update_time"].as_int();
bool bEdited = (update_time != 0);
@@ -327,24 +320,47 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe wszBody;
CMStringW wszOldMsg;
- MEVENT hDbEvent = GetMessageFromDb(mid, datetime, wszOldMsg);
+ DBEVENTINFO dbei = {};
+ MEVENT hDbEvent = GetMessageFromDb(mid, datetime, wszOldMsg, dbei);
if (hDbEvent) {
wszBody += SetBBCString(TranslateT("\nOriginal message:\n"), m_vkOptions.BBCForAttachments(), vkbbcB) +
wszOldMsg;
- db_event_delete(hContact, hDbEvent);
+
+ if (isRead && bUseServerReadFlag)
+ dbei.flags |= DBEF_READ;
+ else
+ dbei.flags &= ~DBEF_READ;
+
+ T2Utf pszBody(wszBody);
+ dbei.cbBlob = mir_strlen(pszBody) + 1;
+ dbei.pBlob = pszBody;
+
+ debugLogA("CVkProto::OnReceiveMessages edited mid = %d, datetime = %d, isOut = %d, isRead = %d, uid = %d", mid, datetime, isOut, isRead, uid);
+
+ db_event_edit(hContact, hDbEvent, &dbei);
+ continue;
}
}
+ PROTORECVEVENT recv = { 0 };
+
+ if (isRead && bUseServerReadFlag)
+ recv.flags |= PREF_CREATEREAD;
+ if (isOut)
+ recv.flags |= PREF_SENT;
+ else if (m_vkOptions.bUserForceInvisibleOnActivity && time(0) - datetime < 60 * m_vkOptions.iInvisibleInterval)
+ SetInvisible(hContact);
+
T2Utf pszBody(wszBody);
recv.timestamp = bEdited ? datetime : (m_vkOptions.bUseLocalTime ? time(0) : datetime);
recv.szMessage = pszBody;
- recv.lParam = (LPARAM)szMid;
Sleep(100);
debugLogA("CVkProto::OnReceiveMessages mid = %d, datetime = %d, isOut = %d, isRead = %d, uid = %d", mid, datetime, isOut, isRead, uid);
if (!IsMessageExist(mid, vkOUT) || bEdited) {
debugLogA("CVkProto::OnReceiveMessages ProtoChainRecvMsg");
+ recv.lParam = (LPARAM)szMid;
ProtoChainRecvMsg(hContact, &recv);
if (mid > getDword(hContact, "lastmsgid", -1))
setDword(hContact, "lastmsgid", mid);
diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index 8e3b2135e2..f0ee1549df 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -354,8 +354,8 @@ private: void SetInvisible(MCONTACT hContact);
CMStringW RemoveBBC(CMStringW& wszSrc);
void AddVkDeactivateEvent(MCONTACT hContact, CMStringW & wszType);
- MEVENT GetMessageFromDb(UINT iMsgId, UINT & timestamp, CMStringW & msg);
- MEVENT GetMessageFromDb(const char * messageId, UINT ×tamp, CMStringW &msg);
+ MEVENT GetMessageFromDb(UINT iMsgId, UINT& timestamp, CMStringW& msg, DBEVENTINFO& dbei);
+ MEVENT GetMessageFromDb(const char * messageId, UINT ×tamp, CMStringW &msg, DBEVENTINFO& dbei);
int DeleteContact(MCONTACT hContact);
bool IsMessageExist(UINT iMsgId, VKMesType vkType = vkALL);
void InitQueue();
|