mirror of
https://github.com/znc/znc.git
synced 2026-05-07 22:04:46 +02:00
rework SendBuffer fixing an issue where ClearBuffer() nuked the buffer after playing to the first client
(cherry picked from commit 793c34699a)
Conflicts:
Chan.cpp
This commit is contained in:
@@ -546,12 +546,23 @@ void CChan::SendBuffer(CClient* pClient) {
|
||||
if (m_pUser && m_pUser->IsUserAttached()) {
|
||||
const vector<CString>& vsBuffer = GetBuffer();
|
||||
|
||||
// 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 (vsBuffer.size()) {
|
||||
const vector<CClient*> & vClients = m_pUser->GetClients();
|
||||
for( size_t uClient = 0; uClient < vClients.size(); ++uClient ) {
|
||||
// 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 so thus vClients at this
|
||||
// point can't be empty. Rework this if you like ...
|
||||
|
||||
CClient * pUseClient = ( pClient ? pClient : vClients[uClient] );
|
||||
bool bSkipStatusMsg = false;
|
||||
@@ -567,20 +578,29 @@ void CChan::SendBuffer(CClient* pClient) {
|
||||
m_pUser->PutUser(sLine, pUseClient);
|
||||
}
|
||||
|
||||
if (!KeepBuffer()) {
|
||||
ClearBuffer();
|
||||
}
|
||||
if( pClient )
|
||||
break;
|
||||
|
||||
bSkipStatusMsg = false;
|
||||
}
|
||||
|
||||
if (!KeepBuffer()) {
|
||||
ClearBuffer();
|
||||
}
|
||||
|
||||
for( size_t uClient = 0; uClient < vClients.size(); ++uClient ) {
|
||||
|
||||
CClient * pUseClient = ( pClient ? pClient : vClients[uClient] );
|
||||
bool bSkipStatusMsg = false;
|
||||
MODULECALL(OnChanBufferEnding(*this, *pUseClient), m_pUser, NULL, bSkipStatusMsg = true);
|
||||
|
||||
if (!bSkipStatusMsg) {
|
||||
m_pUser->PutUser(":***!znc@znc.in PRIVMSG " + GetName() + " :Playback Complete.", pUseClient);
|
||||
}
|
||||
|
||||
if( pClient )
|
||||
if( pClient )
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user