aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2010-03-05 14:20:02 +0000
committerGravatar Fabio Bas2010-03-05 14:20:02 +0000
commitd2e3a40243e63caeb6f63b0f36200c4f02223c8c (patch)
treee40ef223bf010db1a4a1269f98fdc027ce918598 /src
parentsmall fix to previous commit (diff)
downloadKVIrc-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.h82
-rw-r--r--src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.cpp39
-rw-r--r--src/kvirc/kernel/kvi_ircconnectionasyncwhoisdata.h18
-rw-r--r--src/kvirc/kvs/kvi_kvs_corecallbackcommands.cpp2
-rw-r--r--src/kvirc/sparser/kvi_sp_numeric.cpp16
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);