diff options
author | George Hazan <ghazan@miranda.im> | 2021-03-27 12:45:28 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-03-27 12:45:28 +0300 |
commit | fe9692f49580dcefa033524caf19e04ab074da19 (patch) | |
tree | ffaf28439363829b96a3502dea0728015d2d4951 | |
parent | 729c3fb4042bf334c94eff81aea4b45ce21719b1 (diff) |
IRCG:
- fixes #2810 (own messages are invisible);
- fixes #2809 (Perform on Event' broken);
- code cleaning
-rw-r--r-- | protocols/IRCG/src/commandmonitor.cpp | 60 | ||||
-rw-r--r-- | protocols/IRCG/src/input.cpp | 15 | ||||
-rw-r--r-- | protocols/IRCG/src/irclib.cpp | 2 | ||||
-rw-r--r-- | protocols/IRCG/src/ircproto.cpp | 14 | ||||
-rw-r--r-- | protocols/IRCG/src/ircproto.h | 1 | ||||
-rw-r--r-- | protocols/IRCG/src/scripting.cpp | 6 | ||||
-rw-r--r-- | protocols/IRCG/src/services.cpp | 8 | ||||
-rw-r--r-- | protocols/IRCG/src/tools.cpp | 9 |
8 files changed, 55 insertions, 60 deletions
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<CIrcProto> 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;
|