From 38b24044db30c606e9bb3ebe0849b16c9fdc6e62 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 6 Sep 2023 15:14:07 +0300 Subject: fixes #3667 (Telegram: add message edit feature) --- protocols/Telegram/src/proto.cpp | 23 ++++++++++++++++++++--- protocols/Telegram/src/proto.h | 1 + protocols/Telegram/src/server.cpp | 15 ++++++++++++--- 3 files changed, 33 insertions(+), 6 deletions(-) (limited to 'protocols/Telegram/src') diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp index b3a6b2466e..98d055af2b 100644 --- a/protocols/Telegram/src/proto.cpp +++ b/protocols/Telegram/src/proto.cpp @@ -216,6 +216,24 @@ void CTelegramProto::OnEventDeleted(MCONTACT hContact, MEVENT hDbEvent) } } +void CTelegramProto::OnEventEdited(MCONTACT hContact, MEVENT, const DBEVENTINFO &dbei) +{ + if (!hContact) + return; + + auto *pUser = FindUser(GetId(hContact)); + if (!pUser) + return; + + if (dbei.szId && dbei.cbBlob && dbei.eventType == EVENTTYPE_MESSAGE) { + auto text = TD::make_object(); + text->text_ = (char*)dbei.pBlob; + + auto content = TD::make_object(std::move(text), false, false); + SendQuery(new TD::editMessageText(pUser->chatId, _atoi64(dbei.szId), 0, std::move(content))); + } +} + void CTelegramProto::OnMarkRead(MCONTACT hContact, MEVENT hDbEvent) { if (!hContact) @@ -225,9 +243,8 @@ void CTelegramProto::OnMarkRead(MCONTACT hContact, MEVENT hDbEvent) if (!pUser) return; - DBEVENTINFO dbei = {}; - db_event_get(hDbEvent, &dbei); - if (dbei.szId) { + DB::EventInfo dbei(hDbEvent, false); + if (dbei && dbei.szId) { mir_cslock lck(m_csMarkRead); if (m_markChatId) { if (m_markChatId != hContact) diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index 32376a5710..ad11cce7bf 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -342,6 +342,7 @@ public: MWindow OnCreateAccMgrUI(MWindow hwndParent) override; void OnErase() override; void OnEventDeleted(MCONTACT, MEVENT) override; + void OnEventEdited(MCONTACT, MEVENT, const DBEVENTINFO &dbei) override; void OnMarkRead(MCONTACT, MEVENT) override; void OnModulesLoaded() override; void OnReceiveOfflineFile(DB::FILE_BLOB &blob, void *ft) override; diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 4226d8a413..792f68140e 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -685,12 +685,21 @@ void CTelegramProto::ProcessMessageContent(TD::updateMessageContent *pObj) return; } - /* - CMStringA szText(GetMessageText(pUser, pObj->new_content_.get())); + auto msg = TD::make_object(); + msg->content_ = std::move(pObj->new_content_); + CMStringA szText(GetMessageText(pUser, msg.get())); if (szText.IsEmpty()) { debugLogA("this message was not processed, ignored"); return; - }*/ + } + + DBEVENTINFO dbei = {}; + if (db_event_get(hDbEvent, &dbei)) + return; + + dbei.cbBlob = szText.GetLength(); + dbei.pBlob = (uint8_t *)szText.c_str(); + db_event_edit(hDbEvent, &dbei, true); } void CTelegramProto::ProcessOption(TD::updateOption *pObj) -- cgit v1.2.3