From: <ps...@us...> - 2008-10-03 12:53:52
|
Revision: 1238 http://znc.svn.sourceforge.net/znc/?rev=1238&view=rev Author: psychon Date: 2008-10-03 12:53:39 +0000 (Fri, 03 Oct 2008) Log Message: ----------- Fix stickychan to work with disabled channels (e.g. after a kick) This kinda turns stickychan into kickrejoin... well, so what? Thanks to Julian for reporting this. Modified Paths: -------------- trunk/modules/stickychan.cpp Modified: trunk/modules/stickychan.cpp =================================================================== --- trunk/modules/stickychan.cpp 2008-10-02 16:26:09 UTC (rev 1237) +++ trunk/modules/stickychan.cpp 2008-10-03 12:53:39 UTC (rev 1238) @@ -78,15 +78,18 @@ { for (MCString::iterator it = BeginNV(); it != EndNV(); it++) { - if (!m_pUser->FindChan(it->first)) - { - CChan *pChan = new CChan(it->first, m_pUser, true); + CChan *pChan = m_pUser->FindChan(it->first); + if (!pChan) { + pChan = new CChan(it->first, m_pUser, true); if (!it->second.empty()) pChan->SetKey(it->second); m_pUser->AddChan(pChan); - PutModule("Joining [" + it->first + "]"); - PutIRC("JOIN " + it->first + (it->second.empty() ? "" : it->second)); } + if (!pChan->IsOn()) { + PutModule("Joining [" + pChan->GetName() + "]"); + PutIRC("JOIN " + pChan->GetName() + (pChan->GetKey().empty() + ? "" : " " + pChan->GetKey())); + } } } private: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sil...@us...> - 2008-12-21 09:05:19
|
Revision: 1298 http://znc.svn.sourceforge.net/znc/?rev=1298&view=rev Author: silverleo Date: 2008-12-21 09:05:16 +0000 (Sun, 21 Dec 2008) Log Message: ----------- Dont try to join our sticky channels when the irc connection is not available. Modified Paths: -------------- trunk/modules/stickychan.cpp Modified: trunk/modules/stickychan.cpp =================================================================== --- trunk/modules/stickychan.cpp 2008-12-21 09:03:04 UTC (rev 1297) +++ trunk/modules/stickychan.cpp 2008-12-21 09:05:16 UTC (rev 1298) @@ -76,6 +76,9 @@ virtual void RunJob() { + if (!m_pUser->GetIRCSock()) + return; + for (MCString::iterator it = BeginNV(); it != EndNV(); it++) { CChan *pChan = m_pUser->FindChan(it->first); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ps...@us...> - 2009-04-27 18:56:15
|
Revision: 1500 http://znc.svn.sourceforge.net/znc/?rev=1500&view=rev Author: psychon Date: 2009-04-27 18:56:03 +0000 (Mon, 27 Apr 2009) Log Message: ----------- Fix crash bug in stickychan When you are already in #znc and you did 'stick znc' (# prefix missing!), stickychan caused segfaults or different weird behavior. This happened because stickychan didn't handle errors from CUser::AddChan(). AddChan() can only error out if the channel already exists, but since stickychan already checked this, were does the error come from? CChan's constructor does some sanity checks on the channel name. It automatically adds the proper channel prefix (most likely #) if it's missing. This means when stickychan checked for the channel "znc" it correctly didn't find one. When it then tried to add "znc", it really tried adding "#znc" which could fail if the channel was already added. Thanks to DM8Mydog for finding this. Modified Paths: -------------- trunk/modules/stickychan.cpp Modified: trunk/modules/stickychan.cpp =================================================================== --- trunk/modules/stickychan.cpp 2009-04-26 10:14:42 UTC (rev 1499) +++ trunk/modules/stickychan.cpp 2009-04-27 18:56:03 UTC (rev 1500) @@ -86,7 +86,12 @@ pChan = new CChan(it->first, m_pUser, true); if (!it->second.empty()) pChan->SetKey(it->second); - m_pUser->AddChan(pChan); + if (!m_pUser->AddChan(pChan)) { + /* AddChan() deleted that channel */ + PutModule("Could not join [" + it->first + + "] (# prefix missing?)"); + continue; + } } if (!pChan->IsOn()) { PutModule("Joining [" + pChan->GetName() + "]"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ps...@us...> - 2009-06-05 19:57:08
|
Revision: 1534 http://znc.svn.sourceforge.net/znc/?rev=1534&view=rev Author: psychon Date: 2009-06-05 19:56:23 +0000 (Fri, 05 Jun 2009) Log Message: ----------- stickychan: Accept a channel list as module arguments If you now load stickychan with "#chan1,#chan2 bla" as its argument, both channels are stuck where "bla" is the channel key for #chan2. Thanks to FB-eYe for the suggestion. Modified Paths: -------------- trunk/modules/stickychan.cpp Modified: trunk/modules/stickychan.cpp =================================================================== --- trunk/modules/stickychan.cpp 2009-05-30 20:18:29 UTC (rev 1533) +++ trunk/modules/stickychan.cpp 2009-06-05 19:56:23 UTC (rev 1534) @@ -112,6 +112,19 @@ bool CStickyChan::OnLoad(const CString& sArgs, CString& sMessage) { + VCString vsChans; + VCString::iterator it; + sArgs.Split(",", vsChans, false); + + for (it = vsChans.begin(); it != vsChans.end(); it++) { + CString sChan = it->Token(0); + CString sKey = it->Token(1, true); + SetNV(sChan, sKey); + } + + // Since we now have these channels added, clear the argument list + SetArgs(""); + AddTimer(RunTimer, "StickyChanTimer", 15); return(true); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |