diff options
| author | 2010-03-05 14:20:02 +0000 | |
|---|---|---|
| committer | 2010-03-05 14:20:02 +0000 | |
| commit | d2e3a40243e63caeb6f63b0f36200c4f02223c8c (patch) | |
| tree | e40ef223bf010db1a4a1269f98fdc027ce918598 /src | |
| parent | small fix to previous commit (diff) | |
| download | KVIrc-d2e3a40243e63caeb6f63b0f36200c4f02223c8c.tar.gz KVIrc-d2e3a40243e63caeb6f63b0f36200c4f02223c8c.tar.bz2 KVIrc-d2e3a40243e63caeb6f63b0f36200c4f02223c8c.zip | |
applied patch for awhois by ankou29666, thank you!
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4093 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
| -rw-r--r-- | src/kvirc/kernel/kvi_ircconnectionasynctemplatedata.h | 82 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp | 39 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h | 18 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp | 2 | ||||
| -rw-r--r-- | src/kvirc/sparser/kvi_sp_numeric.cpp | 16 |
5 files changed, 100 insertions, 57 deletions
diff --git a/src/kvirc/kernel/kvi_ircconnectionasynctemplatedata.h b/src/kvirc/kernel/kvi_ircconnectionasynctemplatedata.h new file mode 100644 index 000000000..0f4604614 --- /dev/null +++ b/src/kvirc/kernel/kvi_ircconnectionasynctemplatedata.h @@ -0,0 +1,82 @@ +#ifndef _KVI_IRCCONNECTIONASYNCTEMPLATEDATA_H_ +#define _KVI_IRCCONNECTIONASYNCTEMPLATEDATA_H_ +//============================================================================= +// +// File : kvi_ircconnectionasyncwhoisdata.h +// Creation date : Sat 26 Jun 2004 19:40:20 by Szymon Stefanek +// +// This file is part of the KVIrc IRC client distribution +// Copyright (C) 2004-2008 Szymon Stefanek <pragma at kvirc dot net> +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//============================================================================= + +// This template class will be used to create some other classes for future commands +// KviIrcConnectionAsyncWhoData for creating an awho command +// KviIrcConnectionAsyncWhowasData for creating an awhowas command +// It is now also used by KviIrcConnectionAsyncWhoisData + +template <class T> +class KVIRC_API KviIrcConnectionAsyncTemplateData +{ +public: + KviIrcConnectionAsyncTemplateData() + { + m_pInfoList = 0; + } + + ~KviIrcConnectionAsyncTemplateData() + { + if(m_pInfoList)delete m_pInfoList; + } + +protected: + KviPointerList<T> * m_pInfoList; // awhois pending stuff +public: + void add(T * i) + { + if(!m_pInfoList) + { + m_pInfoList = new KviPointerList<T>; + m_pInfoList->setAutoDelete(true); + } + m_pInfoList->append(i); + } + + T * lookup(const QString &nick) + { + if(!m_pInfoList)return 0; + for(T * i = m_pInfoList->first();i;i = m_pInfoList->next()) + { + if(KviQString::equalCI(nick,i->szNick))return i; + } + return 0; + } + + void remove(T * i) + { + if(!m_pInfoList)return; + m_pInfoList->removeRef(i); + if(m_pInfoList->isEmpty()) + { + delete m_pInfoList; + m_pInfoList = 0; + } + } +}; + +#endif + diff --git a/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp b/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp index f5f50915a..1e2038743 100644 --- a/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp +++ b/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp @@ -39,43 +39,4 @@ KviAsyncWhoisInfo::~KviAsyncWhoisInfo() if(pMagic)delete pMagic; } -KviIrcConnectionAsyncWhoisData::KviIrcConnectionAsyncWhoisData() -{ - m_pWhoisInfoList = 0; -} -KviIrcConnectionAsyncWhoisData::~KviIrcConnectionAsyncWhoisData() -{ - if(m_pWhoisInfoList)delete m_pWhoisInfoList; -} - -void KviIrcConnectionAsyncWhoisData::add(KviAsyncWhoisInfo * i) -{ - if(!m_pWhoisInfoList) - { - m_pWhoisInfoList = new KviPointerList<KviAsyncWhoisInfo>; - m_pWhoisInfoList->setAutoDelete(true); - } - m_pWhoisInfoList->append(i); -} - -KviAsyncWhoisInfo * KviIrcConnectionAsyncWhoisData::lookup(const QString &nick) -{ - if(!m_pWhoisInfoList)return 0; - for(KviAsyncWhoisInfo * i = m_pWhoisInfoList->first();i;i = m_pWhoisInfoList->next()) - { - if(KviQString::equalCI(nick,i->szNick))return i; - } - return 0; -} - -void KviIrcConnectionAsyncWhoisData::remove(KviAsyncWhoisInfo * i) -{ - if(!m_pWhoisInfoList)return; - m_pWhoisInfoList->removeRef(i); - if(m_pWhoisInfoList->isEmpty()) - { - delete m_pWhoisInfoList; - m_pWhoisInfoList = 0; - } -} diff --git a/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h b/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h index 8d2fed1c3..5314eccde 100644 --- a/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h +++ b/src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h @@ -27,6 +27,7 @@ #include "kvi_settings.h" #include "kvi_qstring.h" #include "kvi_pointerlist.h" +#include "kvi_ircconnectionasynctemplatedata.h" class KviWindow; class KviKvsScript; @@ -43,7 +44,7 @@ public: QString szIdle; QString szSignon; QString szChannels; - QString szSpecial; + QString szAway; // The szSpecial member is renamed szAway as its sole purpose is to tell whether the user is away or not KviKvsScript * pCallback; KviKvsVariant * pMagic; KviWindow * pWindow; @@ -54,17 +55,12 @@ public: -class KVIRC_API KviIrcConnectionAsyncWhoisData +// KviIrcConnectionAsyncWhoisData is now recreated using a template +// I'm using inheritance as i haven't been able to use a typedef +// This line didn't build +// typedef KviIrcConnectionAsyncTemplateData<KviAsyncWhoisInfo> KviIrcConnectionAsyncWhoisData +class KVIRC_API KviIrcConnectionAsyncWhoisData : public KviIrcConnectionAsyncTemplateData<KviAsyncWhoisInfo> { -public: - KviIrcConnectionAsyncWhoisData(); - ~KviIrcConnectionAsyncWhoisData(); -protected: - KviPointerList<KviAsyncWhoisInfo> * m_pWhoisInfoList; // awhois pending stuff -public: - void add(KviAsyncWhoisInfo * i); - KviAsyncWhoisInfo * lookup(const QString &nick); - void remove(KviAsyncWhoisInfo * i); }; #endif //!_KVI_IRCCONNECTIONASYNCWHOISDATA_H_ diff --git a/src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp b/src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp index 6325aa85f..84aa829c2 100644 --- a/src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp +++ b/src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp @@ -322,7 +322,7 @@ namespace KviKvsCoreCallbackCommands $6 = signon time (may be empty)[br] $7 = channels (may be empty)[br] $8 = server that provided the information[br] - $9 = special information (may be empty)[br] + $9 = away message (empty if user hasn't set an away message)[br] $10 = magic string evaluated at awhois call (may be empty)[br] If the -i switch is specified , the whois message is sent to the server that the <nickname> user is connected to; in this way you will probably diff --git a/src/kvirc/sparser/kvi_sp_numeric.cpp b/src/kvirc/sparser/kvi_sp_numeric.cpp index e69e63c50..3e9df7271 100644 --- a/src/kvirc/sparser/kvi_sp_numeric.cpp +++ b/src/kvirc/sparser/kvi_sp_numeric.cpp @@ -1141,20 +1141,20 @@ void KviServerParser::parseNumericWhoisAway(KviIrcMessage * msg) if(e)e->setAway(true); KviQuery * q = msg->connection()->findQuery(szNk); if(q) q->updateLabelText(); + QString szWText = msg->connection()->decodeText(msg->safeTrailing()); KviAsyncWhoisInfo * i = msg->connection()->asyncWhoisData()->lookup(szNk); if(i) { - if(!i->szSpecial.isEmpty()) - i->szSpecial.append(","); - i->szSpecial.append("away"); + // The szAway (previously szSpecial) is only modified by parseNumericWhoisAway + // So no use appending here + i->szAway = szWText ; return; } if(!msg->haltOutput()) { KviWindow * pOut = (KviWindow *)(msg->connection()->findQuery(szNk)); - QString szWText = pOut ? pOut->decodeText(msg->safeTrailing()) : msg->connection()->decodeText(msg->safeTrailing()); if(!pOut)pOut = KVI_OPTION_BOOL(KviOption_boolWhoisRepliesToActiveWindow) ? msg->console()->activeWindow() : (KviWindow *)(msg->console()); @@ -1398,7 +1398,11 @@ void KviServerParser::parseNumericWhoisServer(KviIrcMessage *msg) KviAsyncWhoisInfo * i = msg->connection()->asyncWhoisData()->lookup(msg->safeParam(1)); if(i) { - i->szServer = szServ; + // assigning to i->szServer erases everything that was previously appended in parseNumericWhoisOther + // this causes the lost of "is registered nick" info on unrealircd servers + // prepending solves the problem + if(!(i->szServer.isEmpty()))i->szServer.prepend(','); + i->szServer.prepend(szServ); return; } @@ -1493,7 +1497,7 @@ void KviServerParser::parseNumericEndOfWhois(KviIrcMessage *msg) vl.append(new KviKvsVariant(i->szSignon)); vl.append(new KviKvsVariant(i->szChannels)); vl.append(new KviKvsVariant(QString(msg->safePrefix()))); - vl.append(new KviKvsVariant(i->szSpecial)); + vl.append(new KviKvsVariant(i->szAway)); // szSpecial is renamed szAway vl.append(new KviKvsVariant(*(i->pMagic))); i->pCallback->run(i->pWindow,&vl,0,KviKvsScript::PreserveParams); msg->connection()->asyncWhoisData()->remove(i); |
