From ecc5973aed27f8e9527e3c088f144bc210747f64 Mon Sep 17 00:00:00 2001 From: psychon Date: Fri, 4 Sep 2009 12:25:05 +0000 Subject: [PATCH] savebuff: Honour the KeepBuffer setting Before this, savebuff also added messages if a client was connected and a channel had KeepBuffer = false which is obviously wrong. Thanks to _marix for reporting this. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1616 726aef4b-f618-498e-8847-2d620e286838 --- modules/buffextras.cpp | 2 +- modules/savebuff.cpp | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/buffextras.cpp b/modules/buffextras.cpp index c9316369..daa3236f 100644 --- a/modules/buffextras.cpp +++ b/modules/buffextras.cpp @@ -17,7 +17,7 @@ public: virtual ~CBuffExtras() {} void AddBuffer(CChan& Channel, const CString& sMessage) { - // If they have keep buffer disabled, only add messages if a client is connected + // If they have keep buffer disabled, only add messages if no client is connected if (!Channel.KeepBuffer() && m_pUser->IsUserAttached()) return; diff --git a/modules/savebuff.cpp b/modules/savebuff.cpp index ab16c980..337831d8 100644 --- a/modules/savebuff.cpp +++ b/modules/savebuff.cpp @@ -223,15 +223,23 @@ public: return(sReturn); } + void AddBuffer(CChan& chan, const CString &sLine) + { + // If they have keep buffer disabled, only add messages if no client is connected + if (!chan.KeepBuffer() && m_pUser->IsUserAttached()) + return; + chan.AddBuffer(sLine); + } + virtual void OnRawMode(const CNick& cOpNick, CChan& cChannel, const CString& sModes, const CString& sArgs) { - cChannel.AddBuffer(SpoofChanMsg(cChannel.GetName(), cOpNick.GetNickMask() + " MODE " + sModes + " " + sArgs)); + AddBuffer(cChannel, SpoofChanMsg(cChannel.GetName(), cOpNick.GetNickMask() + " MODE " + sModes + " " + sArgs)); } virtual void OnQuit(const CNick& cNick, const CString& sMessage, const vector& vChans) { for (u_int a = 0; a < vChans.size(); a++) { - vChans[a]->AddBuffer(SpoofChanMsg(vChans[a]->GetName(), cNick.GetNickMask() + " QUIT " + sMessage)); + AddBuffer(*vChans[a], SpoofChanMsg(vChans[a]->GetName(), cNick.GetNickMask() + " QUIT " + sMessage)); } if (cNick.GetNick().Equals(m_pUser->GetNick())) SaveBufferToDisk(); // need to force a save here to see this! @@ -241,12 +249,12 @@ public: { for (u_int a = 0; a < vChans.size(); a++) { - vChans[a]->AddBuffer(SpoofChanMsg(vChans[a]->GetName(), cNick.GetNickMask() + " NICK " + sNewNick)); + AddBuffer(*vChans[a], SpoofChanMsg(vChans[a]->GetName(), cNick.GetNickMask() + " NICK " + sNewNick)); } } virtual void OnKick(const CNick& cNick, const CString& sOpNick, CChan& cChannel, const CString& sMessage) { - cChannel.AddBuffer(SpoofChanMsg(cChannel.GetName(), sOpNick + " KICK " + cNick.GetNickMask() + " " + sMessage)); + AddBuffer(cChannel, SpoofChanMsg(cChannel.GetName(), sOpNick + " KICK " + cNick.GetNickMask() + " " + sMessage)); } virtual void OnJoin(const CNick& cNick, CChan& cChannel) { @@ -256,11 +264,11 @@ public: if (!cChannel.GetBuffer().empty()) Replay(cChannel.GetName()); } - cChannel.AddBuffer(SpoofChanMsg(cChannel.GetName(), cNick.GetNickMask() + " JOIN")); + AddBuffer(cChannel, SpoofChanMsg(cChannel.GetName(), cNick.GetNickMask() + " JOIN")); } virtual void OnPart(const CNick& cNick, CChan& cChannel) { - cChannel.AddBuffer(SpoofChanMsg(cChannel.GetName(), cNick.GetNickMask() + " PART")); + AddBuffer(cChannel, SpoofChanMsg(cChannel.GetName(), cNick.GetNickMask() + " PART")); if (cNick.GetNick().Equals(m_pUser->GetNick())) SaveBufferToDisk(); // need to force a save here to see this! }