diff options
author | George Hazan <george.hazan@gmail.com> | 2024-09-13 13:26:30 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2024-09-13 13:26:30 +0300 |
commit | c3e59b8daf2b44e9ff1d89d085a69f37d2c17bee (patch) | |
tree | 3346bf6b5f4edbe2928cd68fe7f7750b3b5ab26a /protocols/Telegram/src | |
parent | f846e9a250f718a6e1b9ee730a762747c9066331 (diff) |
fixes #4646 (Telegram: имя чата меняется в Миранде лишь при переподключении)
Diffstat (limited to 'protocols/Telegram/src')
-rw-r--r-- | protocols/Telegram/src/groupchat.cpp | 22 | ||||
-rw-r--r-- | protocols/Telegram/src/proto.h | 3 | ||||
-rw-r--r-- | protocols/Telegram/src/server.cpp | 17 | ||||
-rw-r--r-- | protocols/Telegram/src/utils.cpp | 2 |
4 files changed, 32 insertions, 12 deletions
diff --git a/protocols/Telegram/src/groupchat.cpp b/protocols/Telegram/src/groupchat.cpp index a591e1ae80..a5c575c66d 100644 --- a/protocols/Telegram/src/groupchat.cpp +++ b/protocols/Telegram/src/groupchat.cpp @@ -308,13 +308,14 @@ void CTelegramProto::GcChangeMember(TG_USER *pChat, const char *adminId, TD::int } } -void CTelegramProto::GcChangeTopic(TG_USER *pChat, const wchar_t *pwszNewTopic) +void CTelegramProto::GcChangeTopic(TG_USER *pChat, const std::string &szNewTopic) { - if (pChat->m_si == nullptr || pwszNewTopic == nullptr) + if (pChat->m_si == nullptr) return; + Utf2T wszTopic(szNewTopic.c_str()); GCEVENT gce = { pChat->m_si, GC_EVENT_TOPIC }; - gce.pszText.w = pwszNewTopic; + gce.pszText.w = wszTopic; gce.time = time(0); Chat_Event(&gce); } @@ -400,7 +401,7 @@ void CTelegramProto::ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj) if (auto *pInfo = pObj->basic_group_full_info_.get()) { if (!pInfo->description_.empty()) - GcChangeTopic(pChat, Utf2T(pInfo->description_.c_str())); + GcChangeTopic(pChat, pInfo->description_); g_chatApi.UM_RemoveAll(pChat->m_si); GcAddMembers(pChat, pInfo->members_, true); @@ -436,6 +437,19 @@ void CTelegramProto::ProcessForum(TD::updateForumTopicInfo *pForum) Chat_Control(si, SESSION_ONLINE); } +void CTelegramProto::ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj) +{ + auto *pChat = FindUser(pObj->supergroup_id_); + if (pChat == nullptr) { + debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_); + return; + } + + auto *pInfo = pObj->supergroup_full_info_.get(); + if (!pInfo->description_.empty()) + GcChangeTopic(pChat, pInfo->description_); +} + void CTelegramProto::ProcessSuperGroup(TD::updateSupergroup *pObj) { auto iStatusId = pObj->supergroup_->status_->get_id(); diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index b13a6cec52..06f14d61e9 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -279,6 +279,7 @@ class CTelegramProto : public PROTO<CTelegramProto> void ProcessScopeNotification(TD::updateScopeNotificationSettings *pObj); void ProcessStatus(TD::updateUserStatus *pObj); void ProcessSuperGroup(TD::updateSupergroup *pObj); + void ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj); void ProcessUser(TD::updateUser *pObj); void UnregisterSession(); @@ -328,7 +329,7 @@ class CTelegramProto : public PROTO<CTelegramProto> bool GetGcUserId(TG_USER *pUser, const TD::message *pMsg, char *dest); void GcAddMembers(TG_USER *pChat, const TD::array<TD::object_ptr<TD::chatMember>> &pMembers, bool bSilent); void GcChangeMember(TG_USER *pChat, const char *adminId, TD::int53 userId, bool bJoined); - void GcChangeTopic(TG_USER *pChat, const wchar_t *pwszNewTopic); + void GcChangeTopic(TG_USER *pChat, const std::string &szNewTopic); void GcRun(TG_USER *pChat); // Search diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index b8450f98c1..d5f3caa43b 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -322,6 +322,10 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) ProcessSuperGroup((TD::updateSupergroup *)response.object.get());
break;
+ case TD::updateSupergroupFullInfo::ID:
+ ProcessSuperGroupInfo((TD::updateSupergroupFullInfo *)response.object.get());
+ break;
+
case TD::updateUserStatus::ID:
ProcessStatus((TD::updateUserStatus *)response.object.get());
break;
@@ -540,7 +544,10 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) break;
case TD::chatTypeBasicGroup::ID:
- userId = ((TD::chatTypeBasicGroup *)pChat->type_.get())->basic_group_id_;
+ {
+ auto *pGroup = (TD::chatTypeBasicGroup *)pChat->type_.get();
+ userId = pGroup->basic_group_id_;
+ }
szTitle = pChat->title_;
break;
@@ -548,9 +555,9 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) {
auto *pGroup = (TD::chatTypeSupergroup *)pChat->type_.get();
userId = pGroup->supergroup_id_;
- szTitle = pChat->title_;
isChannel = pGroup->is_channel_;
}
+ szTitle = pChat->title_;
break;
default:
@@ -573,10 +580,8 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) m_arChats.insert(pUser);
if (!szTitle.empty()) {
- if (hContact != INVALID_CONTACT_ID) {
- setUString(hContact, "Nick", szTitle.c_str());
- pUser->wszNick = Utf2T(szTitle.c_str());
- }
+ if (hContact != INVALID_CONTACT_ID)
+ GcChangeTopic(pUser, szTitle);
else if (pUser->wszNick.IsEmpty())
pUser->wszFirstName = Utf2T(szTitle.c_str());
}
diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp index d69f1231e0..b57bed69a9 100644 --- a/protocols/Telegram/src/utils.cpp +++ b/protocols/Telegram/src/utils.cpp @@ -599,7 +599,7 @@ CMStringA CTelegramProto::GetMessageText(TG_USER *pUser, const TD::message *pMsg case TD::messageChatChangeTitle::ID:
if (auto *pDoc = (TD::messageChatChangeTitle *)pBody)
- GcChangeTopic(pUser, Utf2T(pDoc->title_.c_str()));
+ setUString(pUser->hContact, "Nick", pDoc->title_.c_str());
break;
case TD::messagePhoto::ID:
|