From a2110da245236098ca19c3f73babdc133ddc5fa0 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 5 Sep 2015 01:49:35 +0200 Subject: [PATCH] CIRCSock::OnJoinMessage() handler --- include/znc/IRCSock.h | 1 + src/IRCSock.cpp | 84 +++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 38 deletions(-) diff --git a/include/znc/IRCSock.h b/include/znc/IRCSock.h index f370d3c4..cf1792b1 100644 --- a/include/znc/IRCSock.h +++ b/include/znc/IRCSock.h @@ -57,6 +57,7 @@ public: bool OnChanMsg(CMessage& Message); bool OnPrivNotice(CMessage& Message); bool OnChanNotice(CMessage& Message); + bool OnJoinMessage(CJoinMessage& Message); bool OnNickMessage(CNickMessage& Message); bool OnQuitMessage(CQuitMessage& Message); bool OnServerCapAvailable(const CString& sCap); diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index aab0bfca..0325eed9 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -520,44 +520,8 @@ void CIRCSock::ReadLine(const CString& sData) { } } else if (Message.GetType() == CMessage::Type::Join) { CJoinMessage& JoinMsg = static_cast(Message); - CString sChan = JoinMsg.GetParam(0); - CChan* pChan = nullptr; - - if (Nick.NickEquals(GetNick())) { - m_pNetwork->AddChan(sChan, false); - pChan = m_pNetwork->FindChan(sChan); - if (pChan) { - pChan->Enable(); - pChan->SetIsOn(true); - PutIRC("MODE " + sChan); - } - } else { - pChan = m_pNetwork->FindChan(sChan); - } - - if (pChan) { - pChan->AddNick(Nick.GetNickMask()); - JoinMsg.SetChan(pChan); - IRCSOCKMODULECALL(OnJoinMessage(JoinMsg), NOTHING); - - if (pChan->IsDetached()) { - return; - } - - if (HasExtendedJoin()) { - CString sExtendedLine = sLine; - sLine = ":" + Nick.GetNickMask() + " JOIN " + pChan->GetName(); - - const vector& vClients = m_pNetwork->GetClients(); - for (CClient* pClient : vClients) { - if (pClient->HasExtendedJoin()) { - m_pNetwork->PutUser(sExtendedLine, pClient); - } else { - m_pNetwork->PutUser(sLine, pClient); - } - } - return; - } + if (OnJoinMessage(JoinMsg)) { + return; } } else if (Message.GetType() == CMessage::Type::Part) { CPartMessage& PartMsg = static_cast(Message); @@ -1032,6 +996,50 @@ bool CIRCSock::OnChanMsg(CMessage& Message) { return ((pChan) && (pChan->IsDetached())); } +bool CIRCSock::OnJoinMessage(CJoinMessage& Message) { + const CNick& Nick = Message.GetNick(); + CString sChan = Message.GetParam(0); + CChan* pChan = nullptr; + + if (Nick.NickEquals(GetNick())) { + m_pNetwork->AddChan(sChan, false); + pChan = m_pNetwork->FindChan(sChan); + if (pChan) { + pChan->Enable(); + pChan->SetIsOn(true); + PutIRC("MODE " + sChan); + } + } else { + pChan = m_pNetwork->FindChan(sChan); + } + + if (pChan) { + pChan->AddNick(Nick.GetNickMask()); + Message.SetChan(pChan); + IRCSOCKMODULECALL(OnJoinMessage(Message), NOTHING); + + if (pChan->IsDetached()) { + return true; + } + + if (HasExtendedJoin()) { + CString sLine = ":" + Nick.GetNickMask() + " JOIN " + pChan->GetName(); + + const vector& vClients = m_pNetwork->GetClients(); + for (CClient* pClient : vClients) { + if (pClient->HasExtendedJoin()) { + m_pNetwork->PutUser(Message, pClient); + } else { + m_pNetwork->PutUser(sLine, pClient); + } + } + return true; + } + } + + return false; +} + bool CIRCSock::OnNickMessage(CNickMessage& Message) { const CNick& Nick = Message.GetNick(); CString sNewNick = Message.GetNewNick();