summaryrefslogtreecommitdiff
path: root/protocols/Telegram/src
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-09-13 13:26:30 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-09-13 13:26:30 +0300
commitc3e59b8daf2b44e9ff1d89d085a69f37d2c17bee (patch)
tree3346bf6b5f4edbe2928cd68fe7f7750b3b5ab26a /protocols/Telegram/src
parentf846e9a250f718a6e1b9ee730a762747c9066331 (diff)
fixes #4646 (Telegram: имя чата меняется в Миранде лишь при переподключении)
Diffstat (limited to 'protocols/Telegram/src')
-rw-r--r--protocols/Telegram/src/groupchat.cpp22
-rw-r--r--protocols/Telegram/src/proto.h3
-rw-r--r--protocols/Telegram/src/server.cpp17
-rw-r--r--protocols/Telegram/src/utils.cpp2
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: