summaryrefslogtreecommitdiff
path: root/protocols/Facebook/src/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Facebook/src/server.cpp')
-rw-r--r--protocols/Facebook/src/server.cpp28
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;
+ }
+}