mirror of
https://github.com/znc/znc.git
synced 2026-08-11 11:23:18 +02:00
Merge pull request #681 from jpnurmi/setuservars
Fix #680 - make channels follow user-level settings when appropriate
This commit is contained in:
+25
-9
@@ -37,8 +37,10 @@ CChan::CChan(const CString& sName, CIRCNetwork* pNetwork, bool bInConfig, CConfi
|
||||
m_Nick.SetNetwork(m_pNetwork);
|
||||
m_bDetached = false;
|
||||
m_bDisabled = false;
|
||||
SetBufferCount(m_pNetwork->GetUser()->GetBufferCount(), true);
|
||||
SetAutoClearChanBuffer(m_pNetwork->GetUser()->AutoClearChanBuffer());
|
||||
m_bHasBufferCountSet = false;
|
||||
m_bHasAutoClearChanBufferSet = false;
|
||||
m_Buffer.SetLineCount(m_pNetwork->GetUser()->GetBufferCount(), true);
|
||||
m_bAutoClearChanBuffer = m_pNetwork->GetUser()->AutoClearChanBuffer();
|
||||
Reset();
|
||||
|
||||
if (pConfig) {
|
||||
@@ -80,11 +82,10 @@ void CChan::Reset() {
|
||||
|
||||
CConfig CChan::ToConfig() {
|
||||
CConfig config;
|
||||
CUser *pUser = m_pNetwork->GetUser();
|
||||
|
||||
if (pUser->GetBufferCount() != GetBufferCount())
|
||||
if (m_bHasBufferCountSet)
|
||||
config.AddKeyValuePair("Buffer", CString(GetBufferCount()));
|
||||
if (pUser->AutoClearChanBuffer() != AutoClearChanBuffer())
|
||||
if (m_bHasAutoClearChanBufferSet)
|
||||
config.AddKeyValuePair("AutoClearChanBuffer", CString(AutoClearChanBuffer()));
|
||||
if (IsDetached())
|
||||
config.AddKeyValuePair("Detached", "true");
|
||||
@@ -232,6 +233,7 @@ void CChan::SetModes(const CString& sModes) {
|
||||
}
|
||||
|
||||
void CChan::SetAutoClearChanBuffer(bool b) {
|
||||
m_bHasAutoClearChanBufferSet = true;
|
||||
m_bAutoClearChanBuffer = b;
|
||||
|
||||
if (m_bAutoClearChanBuffer && !IsDetached() && m_pNetwork->IsUserOnline()) {
|
||||
@@ -239,6 +241,16 @@ void CChan::SetAutoClearChanBuffer(bool b) {
|
||||
}
|
||||
}
|
||||
|
||||
void CChan::InheritAutoClearChanBuffer(bool b) {
|
||||
if (!m_bHasAutoClearChanBufferSet) {
|
||||
m_bAutoClearChanBuffer = b;
|
||||
|
||||
if (m_bAutoClearChanBuffer && !IsDetached() && m_pNetwork->IsUserOnline()) {
|
||||
ClearBuffer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CChan::OnWho(const CString& sNick, const CString& sIdent, const CString& sHost) {
|
||||
CNick* pNick = FindNick(sNick);
|
||||
|
||||
@@ -352,17 +364,21 @@ void CChan::ModeChange(const CString& sModes, const CNick* pOpNick) {
|
||||
}
|
||||
|
||||
CString CChan::GetOptions() const {
|
||||
CString sRet;
|
||||
VCString vsRet;
|
||||
|
||||
if (IsDetached()) {
|
||||
sRet += (sRet.empty()) ? "Detached" : ", Detached";
|
||||
vsRet.push_back("Detached");
|
||||
}
|
||||
|
||||
if (AutoClearChanBuffer()) {
|
||||
sRet += (sRet.empty()) ? "AutoClearChanBuffer" : ", AutoClearChanBuffer";
|
||||
if (HasAutoClearChanBufferSet()) {
|
||||
vsRet.push_back("AutoClearChanBuffer");
|
||||
} else {
|
||||
vsRet.push_back("AutoClearChanBuffer (default)");
|
||||
}
|
||||
}
|
||||
|
||||
return sRet;
|
||||
return CString(", ").Join(vsRet.begin(), vsRet.end());
|
||||
}
|
||||
|
||||
CString CChan::GetModeArg(unsigned char uMode) const {
|
||||
|
||||
@@ -459,6 +459,7 @@ void CClient::UserCommand(CString& sLine) {
|
||||
Table.AddColumn("Status");
|
||||
Table.AddColumn("Conf");
|
||||
Table.AddColumn("Buf");
|
||||
Table.AddColumn("Clear");
|
||||
Table.AddColumn("Modes");
|
||||
Table.AddColumn("Users");
|
||||
|
||||
@@ -477,7 +478,8 @@ void CClient::UserCommand(CString& sLine) {
|
||||
Table.SetCell("Name", pChan->GetPermStr() + pChan->GetName());
|
||||
Table.SetCell("Status", ((vChans[a]->IsOn()) ? ((vChans[a]->IsDetached()) ? "Detached" : "Joined") : ((vChans[a]->IsDisabled()) ? "Disabled" : "Trying")));
|
||||
Table.SetCell("Conf", CString((pChan->InConfig()) ? "yes" : ""));
|
||||
Table.SetCell("Buf", CString((pChan->AutoClearChanBuffer()) ? "*" : "") + CString(pChan->GetBufferCount()));
|
||||
Table.SetCell("Buf", CString((pChan->HasBufferCountSet()) ? "*" : "") + CString(pChan->GetBufferCount()));
|
||||
Table.SetCell("Clear", CString((pChan->HasAutoClearChanBufferSet()) ? "*" : "") + CString((pChan->AutoClearChanBuffer()) ? "yes" : ""));
|
||||
Table.SetCell("Modes", pChan->GetModeString());
|
||||
Table.SetCell("Users", CString(pChan->GetNickCount()));
|
||||
|
||||
|
||||
+14
-1
@@ -19,6 +19,7 @@
|
||||
#include <znc/FileUtils.h>
|
||||
#include <znc/IRCNetwork.h>
|
||||
#include <znc/IRCSock.h>
|
||||
#include <znc/Chan.h>
|
||||
#include <math.h>
|
||||
|
||||
using std::vector;
|
||||
@@ -1116,12 +1117,24 @@ void CUser::SetDenySetBindHost(bool b) { m_bDenySetBindHost = b; }
|
||||
void CUser::SetDefaultChanModes(const CString& s) { m_sDefaultChanModes = s; }
|
||||
void CUser::SetClientEncoding(const CString& s) { m_sClientEncoding = s; }
|
||||
void CUser::SetQuitMsg(const CString& s) { m_sQuitMsg = s; }
|
||||
void CUser::SetAutoClearChanBuffer(bool b) { m_bAutoClearChanBuffer = b; }
|
||||
void CUser::SetAutoClearChanBuffer(bool b) {
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
for (CChan* pChan : pNetwork->GetChans()) {
|
||||
pChan->InheritAutoClearChanBuffer(b);
|
||||
}
|
||||
}
|
||||
m_bAutoClearChanBuffer = b;
|
||||
}
|
||||
void CUser::SetAutoClearQueryBuffer(bool b) { m_bAutoClearQueryBuffer = b; }
|
||||
|
||||
bool CUser::SetBufferCount(unsigned int u, bool bForce) {
|
||||
if (!bForce && u > CZNC::Get().GetMaxBufferSize())
|
||||
return false;
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
for (CChan* pChan : pNetwork->GetChans()) {
|
||||
pChan->InheritBufferCount(u, bForce);
|
||||
}
|
||||
}
|
||||
m_uBufferCount = u;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user