diff options
Diffstat (limited to 'protocols/Facebook/src/server.cpp')
-rw-r--r-- | protocols/Facebook/src/server.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index b87ba413ef..000e15684a 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -367,7 +367,8 @@ struct } static MsgHandlers[] = { - { "deltaNewMessage", &FacebookProto::OnPublishPrivateMessage } + { "deltaNewMessage", &FacebookProto::OnPublishPrivateMessage }, + { "deltaSentMessage", &FacebookProto::OnPublishSentMessage } }; void FacebookProto::OnPublishMessage(FbThriftReader &rdr) @@ -408,7 +409,7 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root) { auto &metadata = root["messageMetadata"]; __int64 offlineId = _wtoi64(metadata["offlineThreadingId"].as_mstring()); - if (offlineId) { + if (!offlineId) { debugLogA("We care about messages only, event skipped"); return; } @@ -429,3 +430,26 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root) pre.szMsgId = (char *)szId.c_str(); ProtoChainRecvMsg(pUser->hContact, &pre); } + +// my own message was sent +void FacebookProto::OnPublishSentMessage(const JSONNode &root) +{ + auto &metadata = root["messageMetadata"]; + + __int64 offlineId = _wtoi64(metadata["offlineThreadingId"].as_mstring()); + std::string szId(metadata["messageId"].as_string()); + + CMStringA wszUserId(metadata["threadKey"]["otherUserFbId"].as_mstring()); + auto *pUser = FindUser(_atoi64(wszUserId)); + if (pUser == nullptr) { + debugLogA("Message from unknown contact %s, ignored", wszUserId.c_str()); + return; + } + + for (auto &it : arOwnMessages) + if (it->msgId == offlineId) { + ProtoBroadcastAck(pUser->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, (HANDLE)it->reqId, (LPARAM)szId.c_str()); + arOwnMessages.remove(arOwnMessages.indexOf(&it)); + break; + } +} |