summaryrefslogtreecommitdiff
path: root/protocols/Telegram/src
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/src')
-rw-r--r--protocols/Telegram/src/groupchat.cpp31
-rw-r--r--protocols/Telegram/src/proto.cpp45
-rw-r--r--protocols/Telegram/src/proto.h6
-rw-r--r--protocols/Telegram/src/server.cpp27
4 files changed, 78 insertions, 31 deletions
diff --git a/protocols/Telegram/src/groupchat.cpp b/protocols/Telegram/src/groupchat.cpp
index 7e74a40976..38ab04a307 100644
--- a/protocols/Telegram/src/groupchat.cpp
+++ b/protocols/Telegram/src/groupchat.cpp
@@ -391,32 +391,23 @@ void CTelegramProto::ProcessBasicGroup(TD::updateBasicGroup *pObj)
pUser->bLoadMembers = true;
}
-void CTelegramProto::ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj)
+void CTelegramProto::ProcessBasicGroupInfo(TG_USER *pChat, TD::basicGroupFullInfo *pInfo)
{
- auto *pChat = FindUser(pObj->basic_group_id_);
- if (pChat == nullptr || pChat->m_si == nullptr)
- return;
-
- if (auto *pInfo = pObj->basic_group_full_info_.get()) {
- if (!pInfo->description_.empty())
- GcChangeTopic(pChat, pInfo->description_);
-
- g_chatApi.UM_RemoveAll(pChat->m_si);
- GcAddMembers(pChat, pInfo->members_, true);
+ if (!pInfo->description_.empty()) {
+ setUString(pChat->hContact, "About", pInfo->description_.c_str());
+ GcChangeTopic(pChat, pInfo->description_);
}
+
+ g_chatApi.UM_RemoveAll(pChat->m_si);
+ GcAddMembers(pChat, pInfo->members_, true);
}
-void CTelegramProto::ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj)
+void CTelegramProto::ProcessSuperGroupInfo(TG_USER *pUser, TD::supergroupFullInfo *pInfo)
{
- auto *pChat = FindUser(pObj->supergroup_id_);
- if (pChat == nullptr) {
- debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_);
- return;
+ if (!pInfo->description_.empty()) {
+ setUString(pUser->hContact, "About", pInfo->description_.c_str());
+ GcChangeTopic(pUser, pInfo->description_);
}
-
- auto *pInfo = pObj->supergroup_full_info_.get();
- if (!pInfo->description_.empty())
- GcChangeTopic(pChat, pInfo->description_);
}
void CTelegramProto::ProcessSuperGroup(TD::updateSupergroup *pObj)
diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp
index 28202199b8..a233395481 100644
--- a/protocols/Telegram/src/proto.cpp
+++ b/protocols/Telegram/src/proto.cpp
@@ -392,6 +392,51 @@ INT_PTR CTelegramProto::GetCaps(int type, MCONTACT hContact)
/////////////////////////////////////////////////////////////////////////////////////////
+int CTelegramProto::GetInfo(MCONTACT hContact, int)
+{
+ if (auto *pUser = FindUser(GetId(hContact))) {
+ if (!pUser->isGroupChat)
+ SendQuery(new TD::getUserFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser);
+ else {
+ TG_SUPER_GROUP tmp(pUser->id, 0);
+ if (m_arSuperGroups.find(&tmp))
+ SendQuery(new TD::getSupergroupFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser);
+ else
+ SendQuery(new TD::getBasicGroupFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser);
+ }
+ return 1;
+ }
+ return 0;
+}
+
+void CTelegramProto::OnGetUserInfo(td::ClientManager::Response &response, void *pUserInfo)
+{
+ if (!response.object)
+ return;
+
+ auto *pUser = (TG_USER *)pUserInfo;
+
+ switch (response.object->get_id()) {
+ case TD::basicGroupFullInfo::ID:
+ ProcessBasicGroupInfo(pUser, (TD::basicGroupFullInfo *)response.object.get());
+ break;
+ case TD::supergroupFullInfo::ID:
+ ProcessSuperGroupInfo(pUser, (TD::supergroupFullInfo *)response.object.get());
+ break;
+ case TD::updateUserFullInfo::ID:
+ ProcessUserInfo(pUser->id, (TD::userFullInfo *)response.object.get());
+ break;
+
+ default:
+ debugLogA("Gotten class ID %d instead of %d, exiting", response.object->get_id(), TD::chats::ID);
+ return;
+ }
+
+ ProtoBroadcastAck(pUser->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, HANDLE(1));
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
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 c0c8bca7a6..56cf85d7f6 100644
--- a/protocols/Telegram/src/proto.h
+++ b/protocols/Telegram/src/proto.h
@@ -238,6 +238,7 @@ class CTelegramProto : public PROTO<CTelegramProto>
void OnGetFileLink(td::ClientManager::Response &response);
void OnGetHistory(td::ClientManager::Response &response, void *pUserInfo);
void OnGetSessions(td::ClientManager::Response &response, void *pUserInfo);
+ void OnGetUserInfo(td::ClientManager::Response &response, void *pUserInfo);
void OnKillSession(td::ClientManager::Response &response, void *pUserInfo);
void OnLeaveChat(td::ClientManager::Response &response, void *pUserInfo);
void OnSendFile(td::ClientManager::Response &response, void *pUserInfo);
@@ -259,7 +260,7 @@ class CTelegramProto : public PROTO<CTelegramProto>
void ProcessAvatar(const TD::file *pFile, TG_USER *pUser);
void ProcessAuth(TD::updateAuthorizationState *pObj);
void ProcessBasicGroup(TD::updateBasicGroup *pObj);
- void ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj);
+ void ProcessBasicGroupInfo(TG_USER *pUser, TD::basicGroupFullInfo *pObj);
void ProcessChat(TD::updateNewChat *pObj);
void ProcessChatAction(TD::updateChatAction *pObj);
void ProcessChatHasProtected(TD::updateChatHasProtectedContent *pObj);
@@ -284,7 +285,7 @@ class CTelegramProto : public PROTO<CTelegramProto>
void ProcessServiceNotification(TD::updateServiceNotification *pObj);
void ProcessStatus(TD::updateUserStatus *pObj);
void ProcessSuperGroup(TD::updateSupergroup *pObj);
- void ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj);
+ void ProcessSuperGroupInfo(TG_USER *pUser, TD::supergroupFullInfo *pObj);
void ProcessUser(TD::updateUser *pObj);
void ProcessUserInfo(TD::int53 userId, TD::userFullInfo *pObj);
@@ -405,6 +406,7 @@ public:
int AuthRequest(MCONTACT hContact, const wchar_t *) override;
INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override;
+ int GetInfo(MCONTACT hContact, int type) override;
HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles) override;
diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp
index 148a68928c..8333e032a0 100644
--- a/protocols/Telegram/src/server.cpp
+++ b/protocols/Telegram/src/server.cpp
@@ -216,11 +216,15 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
break;
case TD::updateBasicGroup::ID:
- ProcessBasicGroup((TD::updateBasicGroup*)response.object.get());
+ ProcessBasicGroup((TD::updateBasicGroup *)response.object.get());
break;
case TD::updateBasicGroupFullInfo::ID:
- ProcessBasicGroupInfo((TD::updateBasicGroupFullInfo *)response.object.get());
+ {
+ auto *pObj = (TD::updateBasicGroupFullInfo *)response.object.get();
+ if (auto *pChat = FindUser(pObj->basic_group_id_))
+ ProcessBasicGroupInfo(pChat, pObj->basic_group_full_info_.get());
+ }
break;
case TD::updateChatAction::ID:
@@ -244,7 +248,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
break;
case TD::updateChatNotificationSettings::ID:
- ProcessChatNotification((TD::updateChatNotificationSettings*)response.object.get());
+ ProcessChatNotification((TD::updateChatNotificationSettings *)response.object.get());
break;
case TD::updateChatPosition::ID:
@@ -260,9 +264,9 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
break;
case TD::updateDeleteMessages::ID:
- ProcessDeleteMessage((TD::updateDeleteMessages*)response.object.get());
+ ProcessDeleteMessage((TD::updateDeleteMessages *)response.object.get());
break;
-
+
case TD::updateConnectionState::ID:
ProcessConnectionState((TD::updateConnectionState *)response.object.get());
break;
@@ -272,7 +276,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
break;
case TD::updateForumTopicInfo::ID:
- ProcessForum((TD::updateForumTopicInfo*)response.object.get());
+ ProcessForum((TD::updateForumTopicInfo *)response.object.get());
break;
case TD::updateMessageContent::ID:
@@ -312,8 +316,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
ProcessChat((TD::updateNewChat *)response.object.get());
break;
- case TD::updateNewMessage::ID:
- {
+ case TD::updateNewMessage::ID: {
auto *pMessage = ((TD::updateNewMessage *)response.object.get())->message_.get();
TG_OWN_MESSAGE tmp(0, 0, msg2id(pMessage));
if (!m_arOwnMsg.find(&tmp))
@@ -338,7 +341,13 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response)
break;
case TD::updateSupergroupFullInfo::ID:
- ProcessSuperGroupInfo((TD::updateSupergroupFullInfo *)response.object.get());
+ {
+ auto *pObj = (TD::updateSupergroupFullInfo *)response.object.get();
+ if (auto *pUser = FindUser(pObj->supergroup_id_))
+ ProcessSuperGroupInfo(pUser, pObj->supergroup_full_info_.get());
+ else
+ debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_);
+ }
break;
case TD::updateUserStatus::ID: