From c81ee3954f95848ccb0ed8b3a1346c06a6c3820c Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 19 May 2024 19:33:11 +0300 Subject: =?UTF-8?q?fixes=20#4421=20(Telegram:=20=D0=BD=D0=B5=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D0=BF=D0=BE=D0=BA=D0=B8=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=87=D0=B0=D1=82=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BA=D0=B0=D0=BC=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Telegram/src/groupchat.cpp | 5 ++++- protocols/Telegram/src/proto.h | 2 ++ protocols/Telegram/src/server.cpp | 17 +++++------------ protocols/Telegram/src/utils.cpp | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 13 deletions(-) (limited to 'protocols/Telegram/src') diff --git a/protocols/Telegram/src/groupchat.cpp b/protocols/Telegram/src/groupchat.cpp index 7529281288..80d217aff6 100644 --- a/protocols/Telegram/src/groupchat.cpp +++ b/protocols/Telegram/src/groupchat.cpp @@ -435,6 +435,7 @@ void CTelegramProto::ProcessForum(TD::updateForumTopicInfo *pForum) si->pParent = pUser->m_si; SetId(si->hContact, pForum->info_->message_thread_id_, DBKEY_THREAD); + SetId(si->hContact, pUser->id, DBKEY_OWNER); Chat_Mute(si->hContact, Chat_IsMuted(pUser->hContact)); Clist_SetGroup(si->hContact, ptrW(Clist_GetGroup(pUser->hContact))); @@ -461,16 +462,18 @@ void CTelegramProto::ProcessSuperGroup(TD::updateSupergroup *pObj) if (iStatusId == TD::chatMemberStatusLeft::ID) { auto *pUser = AddFakeUser(tmp.id, true); + pUser->isForum = pGroup->group->is_forum_; if (pUser->hContact == INVALID_CONTACT_ID) { // cache some information for the search if (pUser->wszNick.IsEmpty()) pUser->wszNick = Utf2T(getName(pGroup->group->usernames_.get())); pUser->wszLastName.Format(TranslateT("%d member(s)"), pGroup->group->member_count_); } - else Contact::RemoveFromList(pUser->hContact); + else RemoveFromClist(pUser); } else { auto *pChat = AddUser(tmp.id, true); + pChat->isForum = pGroup->group->is_forum_; if (!pGroup->group->is_channel_) pChat->bLoadMembers = true; diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index deff69a9b0..76c6c5d3d0 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -2,6 +2,7 @@ #define DBKEY_ID "id" #define DBKEY_COMPAT "Compatibility" +#define DBKEY_OWNER "OwnerId" #define DBKEY_THREAD "ThreadId" #define DBKEY_LAST_MSG "LastMessageId" #define DBKEY_AUTHORIZED "Authorized" @@ -355,6 +356,7 @@ class CTelegramProto : public PROTO void SetId(MCONTACT, int64_t id, const char *pszSetting = DBKEY_ID); MCONTACT GetRealContact(const TG_USER *pUser); + void RemoveFromClist(TG_USER *pUser); // Menus HGENMENU hmiForward, hmiReaction; diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 5b82721765..02582fa653 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -525,8 +525,7 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) int64_t userId; auto *pChat = pObj->chat_.get(); std::string szTitle; - bool isForum = false; - + switch (pChat->type_->get_id()) { case TD::chatTypePrivate::ID: case TD::chatTypeSecret::ID: @@ -541,14 +540,6 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) case TD::chatTypeSupergroup::ID: userId = ((TD::chatTypeSupergroup *)pChat->type_.get())->supergroup_id_; szTitle = pChat->title_; - { - TG_SUPER_GROUP tmp(userId, 0); - if (auto *pGroup = m_arSuperGroups.find(&tmp)) - isForum = pGroup->group->is_forum_; - - if (isForum) - SendQuery(new TD::getForumTopics(pChat->id_, "", 0, 0, 0, 100), &CTelegramProto::OnGetForumTopics); - } break; default: @@ -563,7 +554,9 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) } pUser->chatId = pChat->id_; - pUser->isForum = isForum; + if (pUser->isForum) + SendQuery(new TD::getForumTopics(pChat->id_, "", 0, 0, 0, 100), &CTelegramProto::OnGetForumTopics); + MCONTACT hContact = (pUser->id == m_iOwnId) ? 0 : pUser->hContact; if (!m_arChats.find(pUser)) @@ -1108,7 +1101,7 @@ void CTelegramProto::ProcessUser(TD::updateUser *pObj) case TD::userTypeRegular::ID: auto *pu = AddFakeUser(pUser->id_, false); if (pu->hContact != INVALID_CONTACT_ID) - Contact::RemoveFromList(pu->hContact); + RemoveFromClist(pu); pu->wszFirstName = Utf2T(pUser->first_name_.c_str()); pu->wszLastName = Utf2T(pUser->last_name_.c_str()); diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp index 7c3e9f8741..bda59c0768 100644 --- a/protocols/Telegram/src/utils.cpp +++ b/protocols/Telegram/src/utils.cpp @@ -179,6 +179,20 @@ CMStringW TG_USER::getDisplayName() const return wszNick; } +void CTelegramProto::RemoveFromClist(TG_USER *pUser) +{ + Contact::RemoveFromList(pUser->hContact); + + if (pUser->isForum) { + if (MGROUP hGroup = Clist_GroupExists(ptrW(Clist_GetGroup(pUser->hContact)))) + Clist_GroupDelete(hGroup, true); + + for (auto &cc : AccContacts()) + if (pUser->id == GetId(cc, DBKEY_OWNER)) + Contact::RemoveFromList(cc); + } +} + MCONTACT CTelegramProto::GetRealContact(const TG_USER *pUser) { return (pUser->hContact != 0) ? pUser->hContact : m_iSavedMessages; -- cgit v1.2.3