void CQuery::SendBuffer(CClient* pClient, const CBuffer& Buffer) { if (m_pNetwork && m_pNetwork->IsUserAttached()) { // Based on CChan::SendBuffer() if (!Buffer.IsEmpty()) { MCString msParams; msParams["target"] = m_pNetwork->GetIRCNick().GetNick(); const vector<CClient*> & vClients = m_pNetwork->GetClients(); for (size_t uClient = 0; uClient < vClients.size(); ++uClient) { CClient * pUseClient = (pClient ? pClient : vClients[uClient]); size_t uSize = Buffer.Size(); for (size_t uIdx = 0; uIdx < uSize; uIdx++) { CString sLine = Buffer.GetLine(uIdx, *pUseClient, msParams); bool bContinue = false; NETWORKMODULECALL(OnPrivBufferPlayLine(*pUseClient, sLine), m_pNetwork->GetUser(), m_pNetwork, NULL, &bContinue); if (bContinue) continue; m_pNetwork->PutUser(sLine, pUseClient); } if (pClient) break; } } } }
void CQuery::SendBuffer(CClient* pClient, const CBuffer& Buffer) { if (m_pNetwork && m_pNetwork->IsUserAttached()) { // Based on CChan::SendBuffer() if (!Buffer.IsEmpty()) { MCString msParams; msParams["target"] = m_pNetwork->GetIRCNick().GetNick(); const vector<CClient*> & vClients = m_pNetwork->GetClients(); for (size_t uClient = 0; uClient < vClients.size(); ++uClient) { CClient * pUseClient = (pClient ? pClient : vClients[uClient]); bool bBatch = pUseClient->HasBatch(); CString sBatchName = m_sName.MD5(); if (bBatch) { m_pNetwork->PutUser(":znc.in BATCH +" + sBatchName + " znc.in/playback " + m_sName, pUseClient); } size_t uSize = Buffer.Size(); for (size_t uIdx = 0; uIdx < uSize; uIdx++) { CString sLine = Buffer.GetLine(uIdx, *pUseClient, msParams); if (bBatch) { MCString msBatchTags = CUtils::GetMessageTags(sLine); msBatchTags["batch"] = sBatchName; CUtils::SetMessageTags(sLine, msBatchTags); } bool bContinue = false; NETWORKMODULECALL(OnPrivBufferPlayLine(*pUseClient, sLine), m_pNetwork->GetUser(), m_pNetwork, NULL, &bContinue); if (bContinue) continue; m_pNetwork->PutUser(sLine, pUseClient); } if (bBatch) { m_pNetwork->PutUser(":znc.in BATCH -" + sBatchName, pUseClient); } if (pClient) break; } } } }
void CChan::SendBuffer(CClient* pClient, const CBuffer& Buffer) { if (m_pNetwork && m_pNetwork->IsUserAttached()) { // in the event that pClient is NULL, need to send this to all clients for the user // I'm presuming here that pClient is listed inside vClients thus vClients at this // point can't be empty. // // This loop has to be cycled twice to maintain the existing behavior which is // 1. OnChanBufferStarting // 2. OnChanBufferPlayLine // 3. ClearBuffer() if not keeping the buffer // 4. OnChanBufferEnding // // With the exception of ClearBuffer(), this needs to happen per client, and // if pClient is not NULL, the loops break after the first iteration. // // Rework this if you like ... if (!Buffer.IsEmpty()) { const vector<CClient*> & vClients = m_pNetwork->GetClients(); for (size_t uClient = 0; uClient < vClients.size(); ++uClient) { CClient * pUseClient = (pClient ? pClient : vClients[uClient]); bool bSkipStatusMsg = pUseClient->HasServerTime(); NETWORKMODULECALL(OnChanBufferStarting(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, &bSkipStatusMsg); if (!bSkipStatusMsg) { m_pNetwork->PutUser(":***[email protected] PRIVMSG " + GetName() + " :Buffer Playback...", pUseClient); } bool bBatch = pUseClient->HasBatch(); CString sBatchName = GetName().MD5(); if (bBatch) { m_pNetwork->PutUser(":znc.in BATCH +" + sBatchName + " znc.in/playback " + GetName(), pUseClient); } size_t uSize = Buffer.Size(); for (size_t uIdx = 0; uIdx < uSize; uIdx++) { CString sLine = Buffer.GetLine(uIdx, *pUseClient); if (bBatch) { MCString msBatchTags = CUtils::GetMessageTags(sLine); msBatchTags["batch"] = sBatchName; CUtils::SetMessageTags(sLine, msBatchTags); } bool bNotShowThisLine = false; NETWORKMODULECALL(OnChanBufferPlayLine(*this, *pUseClient, sLine), m_pNetwork->GetUser(), m_pNetwork, NULL, &bNotShowThisLine); if (bNotShowThisLine) continue; m_pNetwork->PutUser(sLine, pUseClient); } bSkipStatusMsg = pUseClient->HasServerTime(); NETWORKMODULECALL(OnChanBufferEnding(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, &bSkipStatusMsg); if (!bSkipStatusMsg) { m_pNetwork->PutUser(":***[email protected] PRIVMSG " + GetName() + " :Playback Complete.", pUseClient); } if (bBatch) { m_pNetwork->PutUser(":znc.in BATCH -" + sBatchName, pUseClient); } if (pClient) break; } } } }