From fe9692f49580dcefa033524caf19e04ab074da19 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 27 Mar 2021 12:45:28 +0300 Subject: IRCG: - fixes #2810 (own messages are invisible); - fixes #2809 (Perform on Event' broken); - code cleaning --- protocols/IRCG/src/commandmonitor.cpp | 60 ++++++++++++++++------------------- protocols/IRCG/src/input.cpp | 15 ++++----- protocols/IRCG/src/irclib.cpp | 2 +- protocols/IRCG/src/ircproto.cpp | 14 +++++++- protocols/IRCG/src/ircproto.h | 1 - protocols/IRCG/src/scripting.cpp | 6 ++-- protocols/IRCG/src/services.cpp | 8 ++--- protocols/IRCG/src/tools.cpp | 9 +----- 8 files changed, 55 insertions(+), 60 deletions(-) (limited to 'protocols') diff --git a/protocols/IRCG/src/commandmonitor.cpp b/protocols/IRCG/src/commandmonitor.cpp index c3f356564a..5779eeca10 100644 --- a/protocols/IRCG/src/commandmonitor.cpp +++ b/protocols/IRCG/src/commandmonitor.cpp @@ -383,10 +383,8 @@ bool CIrcProto::OnIrc_PART(const CIrcMessage *pmsg) if (pmsg->parameters.getCount() > 0 && pmsg->m_bIncoming) { CMStringW host = pmsg->prefix.sUser + L"@" + pmsg->prefix.sHost; DoEvent(GC_EVENT_PART, pmsg->parameters[0], pmsg->prefix.sNick, pmsg->parameters.getCount() > 1 ? pmsg->parameters[1].c_str() : nullptr, nullptr, host, NULL, true, false); - if (pmsg->prefix.sNick == m_info.sNick) { - CMStringW S = MakeWndID(pmsg->parameters[0]); - Chat_Control(m_szModuleName, S, SESSION_OFFLINE); - } + if (pmsg->prefix.sNick == m_info.sNick) + Chat_Control(m_szModuleName, pmsg->parameters[0], SESSION_OFFLINE); } else ShowMessage(pmsg); @@ -401,11 +399,10 @@ bool CIrcProto::OnIrc_KICK(const CIrcMessage *pmsg) ShowMessage(pmsg); if (pmsg->parameters[1] == m_info.sNick) { - CMStringW S = MakeWndID(pmsg->parameters[0]); - Chat_Control(m_szModuleName, S, SESSION_OFFLINE); + Chat_Control(m_szModuleName, pmsg->parameters[0], SESSION_OFFLINE); if (m_rejoinIfKicked) { - CHANNELINFO *wi = (CHANNELINFO *)Chat_GetUserInfo(m_szModuleName, MakeWndID(pmsg->parameters[0])); + CHANNELINFO *wi = (CHANNELINFO *)Chat_GetUserInfo(m_szModuleName, pmsg->parameters[0]); if (wi && wi->pszPassword) PostIrcMessage(L"/JOIN %s %s", pmsg->parameters[0].c_str(), wi->pszPassword); else @@ -489,8 +486,7 @@ bool CIrcProto::OnIrc_MODE(const CIrcMessage *pmsg) if ((int)pmsg->parameters.getCount() > iParametercount) { if (!mir_wstrcmp(pmsg->parameters[2], m_info.sNick)) { char cModeBit = -1; - CMStringW windowName = MakeWndID(pmsg->parameters[0]); - CHANNELINFO *wi = (CHANNELINFO*)Chat_GetUserInfo(m_szModuleName, windowName); + CHANNELINFO *wi = (CHANNELINFO*)Chat_GetUserInfo(m_szModuleName, pmsg->parameters[0]); switch (*p1) { case 'v': cModeBit = 0; break; case 'h': cModeBit = 1; break; @@ -507,7 +503,7 @@ bool CIrcProto::OnIrc_MODE(const CIrcMessage *pmsg) wi->OwnMode &= ~(1 << cModeBit); } - Chat_SetUserInfo(m_szModuleName, windowName, wi); + Chat_SetUserInfo(m_szModuleName, pmsg->parameters[0], wi); } DoEvent(bAdd ? GC_EVENT_ADDSTATUS : GC_EVENT_REMOVESTATUS, pmsg->parameters[0], pmsg->parameters[iParametercount], pmsg->prefix.sNick, sStatus, nullptr, NULL, m_oldStyleModes ? false : true, false); iParametercount++; @@ -597,11 +593,12 @@ bool CIrcProto::OnIrc_NOTICE(const CIrcMessage *pmsg) return true; if (!m_ignore || !IsIgnored(pmsg->prefix.sNick, pmsg->prefix.sUser, pmsg->prefix.sHost, 'n')) { - CMStringW S; - CMStringW S2; + CMStringW S, S2, S3 = m_szModuleName; if (pmsg->prefix.sNick.GetLength() > 0) S = pmsg->prefix.sNick; + else + S = m_szModuleName; if (IsChannel(pmsg->parameters[0])) S2 = pmsg->parameters[0]; @@ -614,16 +611,12 @@ bool CIrcProto::OnIrc_NOTICE(const CIrcMessage *pmsg) if (str[0] == '[' && str[1] == '#' && str[str.GetLength() - 1] == ']') { str.Delete(str.GetLength() - 1, 1); str.Delete(0, 1); - CMStringW Wnd = MakeWndID(str); - gci.pszID = Wnd; + gci.pszID = str; if (!Chat_GetInfo(&gci) && gci.iType == GCW_CHATROOM) S2 = GetWord(gci.pszID, 0); - else - S2 = L""; } - else S2 = L""; } - DoEvent(GC_EVENT_NOTICE, S2.IsEmpty() ? nullptr : S2.c_str(), S, pmsg->parameters[1], nullptr, L"IRC", NULL, true, false); + DoEvent(GC_EVENT_NOTICE, S2.IsEmpty() ? nullptr : S2.c_str(), S, pmsg->parameters[1], nullptr, S3, NULL, true, false); } } else ShowMessage(pmsg); @@ -1255,10 +1248,9 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) sChanName++; // Add a new chat window - CMStringW sID = MakeWndID(sChanName); BYTE btOwnMode = 0; - SESSION_INFO *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, sID, sChanName); + SESSION_INFO *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, sChanName, sChanName); if (si) { PostIrcMessage(L"/MODE %s", sChanName); @@ -1285,7 +1277,7 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) sTemp.Delete(0, 1); GCEVENT gce = { m_szModuleName, 0, GC_EVENT_JOIN }; - gce.pszID.w = sID; + gce.pszID.w = sChanName; gce.pszUID.w = sTemp; gce.pszNick.w = sTemp; gce.pszStatus.w = sStat; @@ -1314,7 +1306,7 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) sTemp2.Delete(0, 1); sStat = PrefixToStatus(sTemp2[0]); while (sStat != pwszNormal) { - DoEvent(GC_EVENT_ADDSTATUS, sID, sTemp, L"system", sStat, nullptr, NULL, false, false, 0); + DoEvent(GC_EVENT_ADDSTATUS, sChanName, sTemp, L"system", sStat, nullptr, NULL, false, false, 0); sTemp2.Delete(0, 1); sStat = PrefixToStatus(sTemp2[0]); } @@ -1327,7 +1319,7 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) //Set the item data for the window { - CHANNELINFO *wi = (CHANNELINFO *)Chat_GetUserInfo(m_szModuleName, sID); + CHANNELINFO *wi = (CHANNELINFO *)Chat_GetUserInfo(m_szModuleName, sChanName); if (!wi) wi = new CHANNELINFO; wi->OwnMode = btOwnMode; @@ -1336,7 +1328,7 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) wi->pszPassword = nullptr; wi->pszTopic = nullptr; wi->codepage = getCodepage(); - Chat_SetUserInfo(m_szModuleName, sID, wi); + Chat_SetUserInfo(m_szModuleName, sChanName, wi); if (!sTopic.IsEmpty() && !mir_wstrcmpi(GetWord(sTopic, 0), sChanName)) { DoEvent(GC_EVENT_TOPIC, sChanName, sTopicName.IsEmpty() ? nullptr : sTopicName.c_str(), GetWordAddress(sTopic, 1), nullptr, sTopicTime.IsEmpty() ? nullptr : sTopicTime.c_str(), NULL, true, false); @@ -1369,17 +1361,17 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) save += GetWordAddress(dbv.pwszVal, k); switch (command[0]) { case 'M': - Chat_Control(m_szModuleName, sID, WINDOW_HIDDEN); + Chat_Control(m_szModuleName, sChanName, WINDOW_HIDDEN); break; case 'X': - Chat_Control(m_szModuleName, sID, WINDOW_VISIBLE); + Chat_Control(m_szModuleName, sChanName, WINDOW_VISIBLE); break; default: - Chat_Control(m_szModuleName, sID, SESSION_INITDONE); + Chat_Control(m_szModuleName, sChanName, SESSION_INITDONE); break; } } - else Chat_Control(m_szModuleName, sID, SESSION_INITDONE); + else Chat_Control(m_szModuleName, sChanName, SESSION_INITDONE); if (save.IsEmpty()) db_unset(0, m_szModuleName, "JTemp"); @@ -1387,9 +1379,9 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg) setWString("JTemp", save); db_free(&dbv); } - else Chat_Control(m_szModuleName, sID, SESSION_INITDONE); + else Chat_Control(m_szModuleName, sChanName, SESSION_INITDONE); - Chat_Control(m_szModuleName, sID, SESSION_ONLINE); + Chat_Control(m_szModuleName, sChanName, SESSION_ONLINE); } } } @@ -2337,7 +2329,7 @@ bool CIrcProto::DoOnConnect(const CIrcMessage*) if (m_perform) { if (IsConnected()) { - DoPerform("Connect"); + DoPerform("Event: Connect"); switch (Temp) { case ID_STATUS_FREECHAT: DoPerform("Event: Free for chat"); break; case ID_STATUS_ONLINE: DoPerform("Event: Available"); break; @@ -2422,7 +2414,11 @@ int CIrcProto::IsIgnored(CMStringW user, char type) if (!wcschr(C.flags, type)) continue; - return i + 1; + if (C.network.IsEmpty()) + return i + 1; + + if (IsConnected() && !mir_wstrcmpi(C.network, _A2T(m_szModuleName))) + return i + 1; } } diff --git a/protocols/IRCG/src/input.cpp b/protocols/IRCG/src/input.cpp index fe5f53ebde..c43e7a1e84 100644 --- a/protocols/IRCG/src/input.cpp +++ b/protocols/IRCG/src/input.cpp @@ -170,6 +170,7 @@ CMStringW CIrcProto::DoIdentifiers(CMStringW text, const wchar_t*) text.Replace(L"%module", _A2T(m_szModuleName)); text.Replace(L"%name", m_name); text.Replace(L"%newl", L"\r\n"); + text.Replace(L"%network", _A2T(m_szModuleName)); text.Replace(L"%me", m_info.sNick.c_str()); char mirver[100]; @@ -240,12 +241,9 @@ BOOL CIrcProto::DoHardcodedCommand(CMStringW text, wchar_t *window, MCONTACT hCo if (one == L"server") S = SERVERWINDOW; else - S = MakeWndID(one.c_str()); + S = one; } - else if (mir_wstrcmpi(window, SERVERWINDOW) == 0) - S = window; - else - S = MakeWndID(window); + else S = window; Chat_Control(m_szModuleName, S, WINDOW_CLEARLOG); return true; @@ -293,7 +291,7 @@ BOOL CIrcProto::DoHardcodedCommand(CMStringW text, wchar_t *window, MCONTACT hCo CMStringW szNetwork; if (three.IsEmpty()) - szNetwork = "IRC"; + szNetwork = m_szModuleName; else szNetwork = three; @@ -358,11 +356,10 @@ BOOL CIrcProto::DoHardcodedCommand(CMStringW text, wchar_t *window, MCONTACT hCo if (command == L"/nusers") { wchar_t szTemp[40]; - CMStringW S = MakeWndID(window); GC_INFO gci = { 0 }; gci.Flags = GCF_BYID | GCF_NAME | GCF_COUNT; gci.pszModule = m_szModuleName; - gci.pszID = S.c_str(); + gci.pszID = window; if (!Chat_GetInfo(&gci)) mir_snwprintf(szTemp, L"users: %u", gci.iCount); @@ -469,7 +466,7 @@ BOOL CIrcProto::DoHardcodedCommand(CMStringW text, wchar_t *window, MCONTACT hCo return true; } - Chat_Terminate(m_szModuleName, MakeWndID(window)); + Chat_Terminate(m_szModuleName, window); PostIrcMessage(L"/JOIN %s", GetWordAddress(text, 1)); return true; diff --git a/protocols/IRCG/src/irclib.cpp b/protocols/IRCG/src/irclib.cpp index 50a5b51079..af2cb873ef 100644 --- a/protocols/IRCG/src/irclib.cpp +++ b/protocols/IRCG/src/irclib.cpp @@ -200,7 +200,7 @@ bool CIrcProto::Connect(const CIrcSessionInfo& info) con = Netlib_OpenConnection(m_hNetlibUser, &ncon); if (con == nullptr) { wchar_t szTemp[300]; - mir_snwprintf(szTemp, L"%c%s (%S: %u).", irc::COLOR, TranslateT("Failed to connect to"), m_sessionInfo.sServer.c_str(), m_sessionInfo.iPort); + mir_snwprintf(szTemp, L"%c5%s %c%s%c (%S: %u).", irc::COLOR, TranslateT("Failed to connect to"), irc::BOLD, m_tszUserName, irc::BOLD, m_sessionInfo.sServer.c_str(), m_sessionInfo.iPort); DoEvent(GC_EVENT_INFORMATION, SERVERWINDOW, nullptr, szTemp, nullptr, nullptr, NULL, true, false); return false; } diff --git a/protocols/IRCG/src/ircproto.cpp b/protocols/IRCG/src/ircproto.cpp index dc96b7342a..6607277681 100644 --- a/protocols/IRCG/src/ircproto.cpp +++ b/protocols/IRCG/src/ircproto.cpp @@ -191,7 +191,7 @@ void CIrcProto::OnModulesLoaded() nlu.szDescriptiveName.w = name; hNetlibDCC = Netlib_RegisterUser(&nlu); - m_pServer = Chat_NewSession(GCW_SERVER, m_szModuleName, SERVERWINDOW, TranslateT("Server window")); + m_pServer = Chat_NewSession(GCW_SERVER, m_szModuleName, SERVERWINDOW, m_tszUserName); if (m_useServer && !m_hideServerWindow) Chat_Control(m_szModuleName, SERVERWINDOW, WINDOW_VISIBLE); @@ -211,6 +211,18 @@ void CIrcProto::OnModulesLoaded() delSetting("Network"); } + if (getByte("CompatibilityLevel") < 1) { + for (auto &cc : AccContacts()) { + CMStringW chatId(getMStringW(cc, "ChatRoomID")); + int idx = chatId.Find(L" - "); + if (idx != -1) { + chatId.Truncate(idx); + setWString(cc, "ChatRoomID", chatId); + } + } + setByte("CompatibilityLevel", 1); + } + InitIgnore(); HookProtoEvent(ME_USERINFO_INITIALISE, &CIrcProto::OnInitUserInfo); diff --git a/protocols/IRCG/src/ircproto.h b/protocols/IRCG/src/ircproto.h index bbf980d830..a4ab1ce5bd 100644 --- a/protocols/IRCG/src/ircproto.h +++ b/protocols/IRCG/src/ircproto.h @@ -278,7 +278,6 @@ struct CIrcProto : public PROTO bool IsChannel(const char* sName); bool IsChannel(const wchar_t* sName); void KillChatTimer(UINT_PTR &nIDEvent); - CMStringW MakeWndID(const wchar_t* sWindow); CMStringW ModeToStatus(int sMode); CMStringW PrefixToStatus(int cPrefix); int SetChannelSBText(CMStringW sWindow, CHANNELINFO *wi); diff --git a/protocols/IRCG/src/scripting.cpp b/protocols/IRCG/src/scripting.cpp index 07bd9f533e..8d15cc6da4 100644 --- a/protocols/IRCG/src/scripting.cpp +++ b/protocols/IRCG/src/scripting.cpp @@ -124,11 +124,10 @@ INT_PTR __cdecl CIrcProto::Scripting_GetIrcData(WPARAM, LPARAM lparam) (m_IPFromServer) ? m_myHost : m_myLocalHost); else if (sRequest == "usercount" && !sChannel.IsEmpty()) { - CMStringW S = MakeWndID(sChannel.c_str()); GC_INFO gci = { 0 }; gci.Flags = GCF_BYID | GCF_COUNT; gci.pszModule = m_szModuleName; - gci.pszID = S.c_str(); + gci.pszID = sChannel.c_str(); if (!Chat_GetInfo(&gci)) { wchar_t szTemp[40]; mir_snwprintf(szTemp, L"%u", gci.iCount); @@ -136,11 +135,10 @@ INT_PTR __cdecl CIrcProto::Scripting_GetIrcData(WPARAM, LPARAM lparam) } } else if (sRequest == "userlist" && !sChannel.IsEmpty()) { - CMStringW S = MakeWndID(sChannel.c_str()); GC_INFO gci = { 0 }; gci.Flags = GCF_BYID | GCF_USERS; gci.pszModule = m_szModuleName; - gci.pszID = S.c_str(); + gci.pszID = sChannel.c_str(); if (!Chat_GetInfo(&gci)) return (INT_PTR)mir_strdup(gci.pszUsers); } diff --git a/protocols/IRCG/src/services.cpp b/protocols/IRCG/src/services.cpp index 2e7cf56bfb..17562e9c72 100644 --- a/protocols/IRCG/src/services.cpp +++ b/protocols/IRCG/src/services.cpp @@ -177,7 +177,7 @@ void CIrcProto::OnContactDeleted(MCONTACT hContact) if (type != 0) { CMStringW S; if (type == GCW_CHATROOM) - S = MakeWndID(dbv.pwszVal); + S = dbv.pwszVal; if (type == GCW_SERVER) S = SERVERWINDOW; int i = Chat_Terminate(m_szModuleName, S); @@ -220,7 +220,7 @@ INT_PTR __cdecl CIrcProto::OnLeaveChat(WPARAM wp, LPARAM) if (!getWString((MCONTACT)wp, "Nick", &dbv)) { if (getByte((MCONTACT)wp, "ChatRoom", 0) == GCW_CHATROOM) { PostIrcMessage(L"/PART %s %s", dbv.pwszVal, m_userInfo); - Chat_Terminate(m_szModuleName, MakeWndID(dbv.pwszVal)); + Chat_Terminate(m_szModuleName, dbv.pwszVal); } db_free(&dbv); } @@ -477,7 +477,7 @@ int __cdecl CIrcProto::GCEventHook(WPARAM, LPARAM lParam) case 3: PostIrcMessage(L"/PART %s %s", p1, m_userInfo); - Chat_Terminate(m_szModuleName, MakeWndID(p1)); + Chat_Terminate(m_szModuleName, p1); break; case 4: // show server window @@ -976,7 +976,7 @@ void CIrcProto::ConnectToServer(void) InterlockedIncrement((long *)&m_bConnectRequested); wchar_t szTemp[300]; - mir_snwprintf(szTemp, L"\033%s %S:%u", TranslateT("Connecting to"), m_sessionInfo.sServer.c_str(), m_sessionInfo.iPort); + mir_snwprintf(szTemp, L"\033%s %c%s%c (%S: %u)", TranslateT("Connecting to"), irc::BOLD, m_tszUserName, irc::BOLD, m_sessionInfo.sServer.c_str(), m_sessionInfo.iPort); DoEvent(GC_EVENT_INFORMATION, SERVERWINDOW, nullptr, szTemp, nullptr, nullptr, NULL, true, false); } diff --git a/protocols/IRCG/src/tools.cpp b/protocols/IRCG/src/tools.cpp index e0ebfd64fe..6cc196b42c 100644 --- a/protocols/IRCG/src/tools.cpp +++ b/protocols/IRCG/src/tools.cpp @@ -500,7 +500,7 @@ void CIrcProto::KillChatTimer(UINT_PTR &nIDEvent) ///////////////////////////////////////////////////////////////////////////////////////// -int CIrcProto::SetChannelSBText(CMStringW sWindow, CHANNELINFO * wi) +int CIrcProto::SetChannelSBText(CMStringW sWindow, CHANNELINFO *wi) { CMStringW sTemp = L""; if (wi->pszMode) { @@ -515,13 +515,6 @@ int CIrcProto::SetChannelSBText(CMStringW sWindow, CHANNELINFO * wi) return 0; } -CMStringW CIrcProto::MakeWndID(const wchar_t* sWindow) -{ - wchar_t buf[200]; - mir_snwprintf(buf, L"%s - %s", sWindow, (IsConnected()) ? m_tszUserName : TranslateT("Offline")); - return CMStringW(buf); -} - bool CIrcProto::FreeWindowItemData(CMStringW window, CHANNELINFO *wis) { CHANNELINFO *wi; -- cgit v1.2.3