diff options
-rw-r--r-- | protocols/Telegram/src/proto.cpp | 12 | ||||
-rw-r--r-- | protocols/Telegram/src/proto.h | 4 | ||||
-rw-r--r-- | protocols/Telegram/src/server.cpp | 12 |
3 files changed, 20 insertions, 8 deletions
diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp index fff388caa5..cc386b8a11 100644 --- a/protocols/Telegram/src/proto.cpp +++ b/protocols/Telegram/src/proto.cpp @@ -68,6 +68,7 @@ CTelegramProto::CTelegramProto(const char* protoName, const wchar_t* userName) : HookProtoEvent(ME_HISTORY_EMPTY, &CTelegramProto::OnEmptyHistory); HookProtoEvent(ME_OPT_INITIALISE, &CTelegramProto::OnOptionsInit); + HookProtoEvent(ME_MSG_WINDOWEVENT, &CTelegramProto::OnWindowEvent); // avatar CreateDirectoryTreeW(GetAvatarPath()); @@ -160,6 +161,17 @@ void CTelegramProto::OnShutdown() m_bTerminated = true; } +int CTelegramProto::OnWindowEvent(WPARAM wParam, LPARAM lParam) +{ + if (wParam == MSG_WINDOW_EVT_OPENING) { + auto *pDlg = (CMsgDialog *)lParam; + auto *pUser = FindUser(GetId(pDlg->m_hContact)); + if (pUser->chatId == -1 && !pDlg->isChat()) + SendQuery(new TD::createPrivateChat(pUser->id, true)); + } + return 0; +} + ///////////////////////////////////////////////////////////////////////////////////////// void CTelegramProto::OnBuildProtoMenu() diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index b90f6e9d45..c5566472d8 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -92,7 +92,6 @@ struct TG_USER : public MZeroedObject hContact(_2), isGroupChat(_3) { - chatId = (isGroupChat) ? -1 : id; } ~TG_USER() @@ -100,7 +99,7 @@ struct TG_USER : public MZeroedObject delete pReactions; } - int64_t id, chatId; + int64_t id, chatId = -1; MCONTACT hContact; bool isGroupChat, bLoadMembers; CMStringA szAvatarHash; @@ -363,6 +362,7 @@ public: int __cdecl OnEmptyHistory(WPARAM, LPARAM); int __cdecl OnOptionsInit(WPARAM, LPARAM); + int __cdecl OnWindowEvent(WPARAM, LPARAM); int __cdecl GcMenuHook(WPARAM, LPARAM); int __cdecl GcMuteHook(WPARAM, LPARAM); diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 0bd26786be..e2eb723e68 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -418,23 +418,23 @@ void CTelegramProto::ProcessBasicGroup(TD::updateBasicGroup *pObj) void CTelegramProto::ProcessChat(TD::updateNewChat *pObj)
{
- int64_t chatId;
+ int64_t userId;
auto *pChat = pObj->chat_.get();
std::string szTitle;
switch(pChat->type_->get_id()) {
case TD::chatTypePrivate::ID:
case TD::chatTypeSecret::ID:
- chatId = pChat->id_;
+ userId = pChat->id_;
break;
case TD::chatTypeBasicGroup::ID:
- chatId = ((TD::chatTypeBasicGroup*)pChat->type_.get())->basic_group_id_;
+ userId = ((TD::chatTypeBasicGroup*)pChat->type_.get())->basic_group_id_;
szTitle = pChat->title_;
break;
case TD::chatTypeSupergroup::ID:
- chatId = ((TD::chatTypeSupergroup *)pChat->type_.get())->supergroup_id_;
+ userId = ((TD::chatTypeSupergroup *)pChat->type_.get())->supergroup_id_;
szTitle = pChat->title_;
break;
@@ -443,7 +443,7 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) return;
}
- if (auto *pUser = FindUser(chatId)) {
+ if (auto *pUser = FindUser(userId)) {
pUser->chatId = pChat->id_;
MCONTACT hContact = (pUser->id == m_iOwnId) ? 0 : pUser->hContact;
@@ -463,7 +463,7 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) if (pUser->isGroupChat && pUser->hContact != INVALID_CONTACT_ID)
InitGroupChat(pUser, pChat);
}
- else debugLogA("Unknown chat id %lld, ignoring", chatId);
+ else debugLogA("Unknown user id %lld, ignoring", userId);
}
void CTelegramProto::ProcessChatLastMessage(TD::updateChatLastMessage *pObj)
|