summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
Diffstat (limited to 'protocols')
-rw-r--r--protocols/Telegram/src/proto.cpp8
-rw-r--r--protocols/Telegram/src/proto.h1
-rw-r--r--protocols/Telegram/src/server.cpp8
-rw-r--r--protocols/Telegram/src/utils.cpp18
4 files changed, 21 insertions, 14 deletions
diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp
index f28ff289a1..555a336b5b 100644
--- a/protocols/Telegram/src/proto.cpp
+++ b/protocols/Telegram/src/proto.cpp
@@ -354,14 +354,6 @@ INT_PTR CTelegramProto::GetCaps(int type, MCONTACT)
/////////////////////////////////////////////////////////////////////////////////////////
-MEVENT CTelegramProto::RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei)
-{
- auto *ft = (TG_FILE_REQUEST *)blob.getUserInfo();
- return (ft->m_bRecv) ? CSuper::RecvFile(hContact, blob, dbei) : 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
void CTelegramProto::OnSearchResults(td::ClientManager::Response &response)
{
int iCount = ::InterlockedDecrement(&m_iSearchCount);
diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h
index 830b937e05..2b628abfc2 100644
--- a/protocols/Telegram/src/proto.h
+++ b/protocols/Telegram/src/proto.h
@@ -358,7 +358,6 @@ public:
INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override;
HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles) override;
- MEVENT RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei) override;
HANDLE SearchByName(const wchar_t *nick, const wchar_t *firstName, const wchar_t *lastName) override;
int SendMsg(MCONTACT hContact, MEVENT hReplyEvent, const char *pszMessage) override;
diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp
index 2082a73e13..762d6d121a 100644
--- a/protocols/Telegram/src/server.cpp
+++ b/protocols/Telegram/src/server.cpp
@@ -820,16 +820,22 @@ void CTelegramProto::ProcessMessageContent(TD::updateMessageContent *pObj)
return;
}
- MEVENT hDbEvent = db_event_getById(m_szModuleName, msg2id(pObj->chat_id_, pObj->message_id_));
+ auto szMsgId = msg2id(pObj->chat_id_, pObj->message_id_);
+ MEVENT hDbEvent = db_event_getById(m_szModuleName, szMsgId);
if (hDbEvent == 0) {
debugLogA("Unknown message with id=%lld (chat id %lld, ignored", pObj->message_id_, pObj->chat_id_);
return;
}
auto msg = TD::make_object<TD::message>();
+ msg->id_ = pObj->message_id_;
msg->sender_id_ = TD::make_object<TD::messageSenderChat>(pObj->chat_id_);
msg->content_ = std::move(pObj->new_content_);
+ TG_OWN_MESSAGE tmp(0, 0, szMsgId);
+ if (auto *pOwnMsg = m_arOwnMsg.find(&tmp))
+ msg->is_outgoing_ = true;
+
CMStringA szText(GetMessageText(pUser, msg.get()));
if (szText.IsEmpty()) {
debugLogA("this message was not processed, ignored");
diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp
index 8a4ef0dc0e..c3c13e594b 100644
--- a/protocols/Telegram/src/utils.cpp
+++ b/protocols/Telegram/src/utils.cpp
@@ -396,6 +396,7 @@ bool CTelegramProto::GetMessageFile(
pRequest->m_fileName = Utf2T(pszFileName);
pRequest->m_fileSize = pFile->size_;
pRequest->m_bRecv = !pMsg->is_outgoing_;
+ pRequest->m_hContact = GetRealContact(pUser);
{
mir_cslock lck(m_csFiles);
m_arFiles.insert(pRequest);
@@ -403,8 +404,9 @@ bool CTelegramProto::GetMessageFile(
char szReplyId[100];
const char *szDesc = nullptr;
- MCONTACT hContact = GetRealContact(pUser);
- DB::EventInfo dbei;
+
+ MEVENT hDbEvent = db_event_getById(m_szModuleName, pszId);
+ DB::EventInfo dbei(hDbEvent);
dbei.flags = DBEF_TEMPORARY;
dbei.timestamp = pMsg->date_;
dbei.szId = pszId;
@@ -413,13 +415,21 @@ bool CTelegramProto::GetMessageFile(
szDesc = caption.c_str();
if (pMsg->is_outgoing_)
dbei.flags |= DBEF_SENT;
- if (Contact::IsGroupChat(hContact) || !pUser->bInited)
+ if (Contact::IsGroupChat(pRequest->m_hContact) || !pUser->bInited)
dbei.flags |= DBEF_READ;
if (pMsg->reply_to_message_id_) {
_i64toa(pMsg->reply_to_message_id_, szReplyId, 10);
dbei.szReplyId = szReplyId;
}
- ProtoChainRecvFile(hContact, DB::FILE_BLOB(pRequest, pszFileName, szDesc), dbei);
+
+ if (dbei) {
+ DB::FILE_BLOB blob(dbei);
+ OnReceiveOfflineFile(blob, pRequest);
+ blob.write(dbei);
+ db_event_edit(hDbEvent, &dbei, true);
+ delete pRequest;
+ }
+ else ProtoChainRecvFile(pRequest->m_hContact, DB::FILE_BLOB(pRequest, pszFileName, szDesc), dbei);
return true;
}