[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [Konversation] 6e06f52: Enhancing server to keep track of nick
From: Gary Cramblitt <garycramblitt () comcast ! net>
Date: 2010-07-01 13:27:17
Message-ID: 20100701132717.873F2BB5582 () projects ! kde ! org
[Download RAW message or body]
A konversation/nickinfo.h [License: UNKNOWN]
A konversation/nickinfo.cpp [License: Trivialfile.]
commit 6e06f52f0a000b055c09fbc98e5f56c44a604396
Author: Gary Cramblitt <garycramblitt@comcast.net>
Date: Sun Jan 18 03:07:55 2004 +0000
Enhancing server to keep track of nick information. Here are some basic data \
structures and methods that will be needed.
svn path=/trunk/kdeextragear-2/konversation/; revision=280647
diff --git a/konversation/Makefile.am b/konversation/Makefile.am
index 3a778db..cbb4410 100644
--- a/konversation/Makefile.am
+++ b/konversation/Makefile.am
@@ -3,7 +3,7 @@ bin_PROGRAMS = konversation
## INCLUDES were found outside kdevelop specific part
-konversation_SOURCES = konviface.skel konversationmainwindow.cpp \
valuelistviewitem.cpp urlcatcher.cpp searchdialog.cpp prefspagehighlight.cpp \
scriptlauncher.cpp rawlog.cpp prefspagenotify.cpp prefspagedialogs.cpp \
prefspagecolorsimages.cpp prefspagebuttons.cpp konvdcop.cpp channellistpanel.cpp \
konsolepanel.cpp dcctransferhandler.cpp prefspageignore.cpp ircresolver.cpp \
identity.cpp statuspanel.cpp prefspageappearance.cpp dccrecipientdialog.cpp \
topiccombobox.cpp prefspagegeneralsettings.cpp prefspagelog.cpp \
prefspagedccsettings.cpp prefspagescripts.cpp nicksonline.cpp prefspageidentity.cpp \
prefspage.cpp prefspageserverlist.cpp dccpanel.cpp dcctransfer.cpp \
ledlistviewitem.cpp highlight.cpp highlightviewitem.cpp nickchangedialog.cpp \
modebutton.cpp ignorelistviewitem.cpp ignorecheckbox.cpp ignore.cpp nicklistview.cpp \
ircinput.cpp ledtabbar.cpp ledtab.cpp ledtabwidget.cpp images.cpp \
editserverdialog.cpp serverlistitem.cpp serverentry.cpp prefsdialog.cpp \
quickbutton.cpp preferences. cpp chatwindow.cpp outputfilter.cpp query.cpp \
konversationapplication.cpp nick.cpp inputfilter.cpp channel.cpp ircview.cpp \
server.cpp ircserversocket.cpp main.cpp prefspageirccolorsui.ui \
prefspageirccolors.cpp irccolorchooserui.ui irccolorchooser.cpp prefspagealiases.cpp \
channellistviewitem.cpp osd.cpp prefspageosd.cpp ircevent.cpp trayicon.cpp \
tabaction.cpp prefspagenickcompletion.cpp prefspagetabbehavior.cpp dccchat.cpp \
logfilereader.cpp prefspagewebbrowser.cpp multilineedit.cpp +konversation_SOURCES = \
konviface.skel konversationmainwindow.cpp valuelistviewitem.cpp urlcatcher.cpp \
searchdialog.cpp prefspagehighlight.cpp scriptlauncher.cpp rawlog.cpp \
prefspagenotify.cpp prefspagedialogs.cpp prefspagecolorsimages.cpp \
prefspagebuttons.cpp konvdcop.cpp channellistpanel.cpp konsolepanel.cpp \
dcctransferhandler.cpp prefspageignore.cpp ircresolver.cpp identity.cpp \
statuspanel.cpp prefspageappearance.cpp dccrecipientdialog.cpp topiccombobox.cpp \
prefspagegeneralsettings.cpp prefspagelog.cpp prefspagedccsettings.cpp \
prefspagescripts.cpp nicksonline.cpp prefspageidentity.cpp prefspage.cpp \
prefspageserverlist.cpp dccpanel.cpp dcctransfer.cpp ledlistviewitem.cpp \
highlight.cpp highlightviewitem.cpp nickchangedialog.cpp modebutton.cpp \
ignorelistviewitem.cpp ignorecheckbox.cpp ignore.cpp nicklistview.cpp ircinput.cpp \
ledtabbar.cpp ledtab.cpp ledtabwidget.cpp images.cpp editserverdialog.cpp \
serverlistitem.cpp serverentry.cpp prefsdialog.cpp quickbutton.cpp preferences. cpp \
chatwindow.cpp outputfilter.cpp query.cpp konversationapplication.cpp nick.cpp \
inputfilter.cpp channel.cpp ircview.cpp server.cpp ircserversocket.cpp main.cpp \
prefspageirccolorsui.ui prefspageirccolors.cpp irccolorchooserui.ui \
irccolorchooser.cpp prefspagealiases.cpp channellistviewitem.cpp osd.cpp \
prefspageosd.cpp ircevent.cpp trayicon.cpp tabaction.cpp prefspagenickcompletion.cpp \
prefspagetabbehavior.cpp dccchat.cpp logfilereader.cpp prefspagewebbrowser.cpp \
multilineedit.cpp nickinfo.cpp konversation_LDADD = $(LIB_KIO) -lm
@@ -45,4 +45,4 @@ messages: rc.cpp
if test -n "$$LIST"; then \
$(XGETTEXT) $$LIST -o $(podir)/konversation.pot; \
fi
-noinst_HEADERS = prefspagetabbehavior.h dccchat.h logfilereader.h \
prefspagewebbrowser.h multilineedit.h +noinst_HEADERS = prefspagetabbehavior.h \
dccchat.h logfilereader.h prefspagewebbrowser.h multilineedit.h \
nickinfo.h
diff --git a/konversation/nickinfo.cpp b/konversation/nickinfo.cpp
new file mode 100644
index 0000000..98ec3ee
--- /dev/null
+++ b/konversation/nickinfo.cpp
@@ -0,0 +1,56 @@
+/*
+ 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 option) any later version.
+*/
+
+/*
+ nickinfo.cpp - Nick Information
+ begin: Sat Jan 17 2004
+ copyright: (C) 2004 by Gary Cramblitt
+ email: garycramblitt@comcast.net
+*/
+
+#include "nickinfo.h"
+
+/*
+ @author Gary Cramblitt
+*/
+
+/*
+ The NickInfo object is a data container for information about a single nickname.
+ It is owned by the Server object and should NOT be deleted by anything other than \
Server. + If using code alters the NickInfo object, it should call \
Server::nickInfoUpdated to + let Server know that the object has been modified.
+*/
+
+NickInfo::NickInfo(Server* server)
+{
+ owningServer = server;
+}
+NickInfo::~NickInfo()
+{
+}
+
+
+// Get properties of NickInfo object.
+QString NickInfo::getHostmask() { return hostmask; }
+bool NickInfo::isAway() { return away; }
+QString NickInfo::getAwayMessage() { return awayMessage; }
+QString NickInfo::getIdentdInfo() { return identdInfo; }
+QString NickInfo::getVersionInfo() { return versionInfo; }
+bool NickInfo::isNotified() { return notified; }
+
+// Return the Server object that owns this NickInfo object.
+Server* NickInfo::getServer() { return owningServer; }
+
+// Set properties of NickInfo object.
+// If any of these are called, call Server::nickInfoUpdated to let Server know about \
the change. +void NickInfo::setHostmask(const QString& newMask) { hostmask = newMask; \
} +void NickInfo::setAway(bool state) { away = state; }
+void NickInfo::setAwayMessage(const QString& newMessage) { awayMessage = newMessage; \
} +void NickInfo::setIdentdInfo(const QString& newIdentdInfo) {identdInfo = \
newIdentdInfo; } +void NickInfo::setVersionInfo(const QString& newVersionInfo) { \
versionInfo = newVersionInfo; } +void NickInfo::setNotified(bool state) { notified = \
state; } +
diff --git a/konversation/nickinfo.h b/konversation/nickinfo.h
new file mode 100644
index 0000000..9d971a3
--- /dev/null
+++ b/konversation/nickinfo.h
@@ -0,0 +1,69 @@
+/*
+ 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 option) any later version.
+*/
+
+/*
+ nickinfo.h - Nick Information
+ begin: Sat Jan 17 2004
+ copyright: (C) 2004 by Gary Cramblitt
+ email: garycramblitt@comcast.net
+*/
+
+#ifndef NICKINFO_H
+#define NICKINFO_H
+
+/*
+ @author Gary Cramblitt
+*/
+
+#include <qstringlist.h>
+
+class Server;
+
+/*
+ The NickInfo object is a data container for information about a single nickname.
+ It is owned by the Server object and should NOT be deleted by anything other than \
Server. + If using code alters the NickInfo object, it should call \
Server::nickInfoUpdated to + let Server know that the object has been modified.
+*/
+
+class NickInfo
+{
+ public:
+ NickInfo(Server* server);
+ ~NickInfo();
+
+ // Get properties of NickInfo object.
+ QString getHostmask();
+ bool isAway();
+ QString getAwayMessage();
+ QString getIdentdInfo();
+ QString getVersionInfo();
+ bool isNotified();
+
+ // Return the Server object that owns this NickInfo object.
+ Server* getServer();
+
+ // Set properties of NickInfo object.
+ // If any of these are called, call Server::nickInfoUpdated to let Server know \
about the change. + void setHostmask(const QString& newMask);
+ void setAway(bool state);
+ void setAwayMessage(const QString& newMessage);
+ void setIdentdInfo(const QString& newIdentdInfo);
+ void setVersionInfo(const QString& newVersionInfo);
+ void setNotified(bool state);
+
+ protected:
+ Server* owningServer;
+ QString hostmask;
+ bool away;
+ QString awayMessage;
+ QString identdInfo;
+ QString versionInfo;
+ bool notified;
+};
+
+#endif
diff --git a/konversation/server.cpp b/konversation/server.cpp
index f184f57..552df67 100644
--- a/konversation/server.cpp
+++ b/konversation/server.cpp
@@ -799,6 +799,81 @@ QString Server::getNumericalIp()
return QString::number(ip.ip4Addr());
}
+// Given a nickname, returns NickInfo object. 0 if not found.
+NickInfo* Server::getNickInfo(const QString& nickName)
+{
+ return allNicks.find(nickName);
+/*
+ NickInfo* nickInfo;
+ NickInfoList* members;
+ // Search joined channels.
+ ChannelMembershipListIterator joinedChannelIterator(joinedChannels);
+ for( ; (members=joinedChannelIterator.current()); ++joinedChannelIterator )
+ {
+ nickInfo = members->find(nickName);
+ if (nickInfo) return nickInfo;
+ }
+ // Search unjoined channels.
+ ChannelMembershipListIterator unjoinedChannelIterator(unjoinedChannels);
+ for( ; (members=unjoinedChannelIterator.current()); ++unjoinedChannelIterator )
+ {
+ nickInfo = members->find(nickName);
+ if (nickInfo) return nickInfo;
+ }
+ // Search Queries.
+ nickInfo = queryNicks.find(nickname);
+ if (nickInfo) return nickInfo;
+ // Search nicks online.
+ nickInfo = nicksOnline.find(nickname);
+ if (nickInfo) return nickInfo;
+ // Search nicks offline.
+ nickInfo = nicksOffline.find(nickname);
+ return nickInfo;
+*/
+}
+
+// Returns the list of members for a channel in the joinedChannels list. 0 if \
channel is not in the joinedChannels list. +// Using code must not alter the list.
+const NickInfoList* Server::getJoinedChannelMembers(const QString& channelName)
+{
+ return joinedChannels.find(channelName);
+}
+
+// Returns the list of members for a channel in the unjoinedChannels list. 0 if \
channel is not in the unjoinedChannels list. +// Using code must not alter the list.
+const NickInfoList* Server::getUnjoinedChannelMembers(const QString& channelName)
+{
+ return unjoinedChannels.find(channelName);
+}
+
+// Searches the Joined and Unjoined lists for the given channel and returns the \
member list. 0 if channel is not in either list. +// Using code must not alter the \
list. +const NickInfoList* Server::getChannelMembers(const QString& channelName)
+{
+ const NickInfoList* members = getJoinedChannelMembers(channelName);
+ if (!members) members = getUnjoinedChannelMembers(channelName);
+ return members;
+}
+
+// Returns a list of all the channels (joined or unjoined) that a nick is in.
+QStringList Server::getNickChannels(QString& nickName)
+{
+ QStringList channellist;
+ NickInfoList* members;
+ ChannelMembershipListIterator joinedChannelIterator(joinedChannels);
+ for( ; (members=joinedChannelIterator.current()); ++joinedChannelIterator )
+ {
+ if (members->find(nickName)) \
channellist.append(joinedChannelIterator.currentKey()); + }
+ ChannelMembershipListIterator unjoinedChannelIterator(unjoinedChannels);
+ for( ; (members=unjoinedChannelIterator.current()); ++unjoinedChannelIterator )
+ {
+ if (members->find(nickName)) \
channellist.append(unjoinedChannelIterator.currentKey()); + }
+ return channellist;
+}
+
+
QString Server::getIp()
{
// Get our own IP address.
diff --git a/konversation/server.h b/konversation/server.h
index 994551e..05e78b9 100644
--- a/konversation/server.h
+++ b/konversation/server.h
@@ -17,6 +17,7 @@
#include <qtimer.h>
#include <qdatetime.h>
+#include <qdict.h>
#include "inputfilter.h"
#include "outputfilter.h"
@@ -24,6 +25,7 @@
#include "ircresolver.h"
#include "dcctransfer.h"
+#include "nickinfo.h"
/*
@author Dario Abatianni
@@ -37,6 +39,15 @@ class KonversationMainWindow;
class RawLog;
class ChannelListPanel;
+// A NickInfoList is a list of NickInfo objects, indexed by nickname.
+typedef QDict<NickInfo> NickInfoList;
+// A ChannelMembershipList is a list of MemberLists, indexed by channel name.
+typedef QDict<NickInfoList> ChannelMembershipList;
+// An iterator for a MemberList.
+typedef QDictIterator<NickInfo> NickInfoListIterator;
+// An iterator for a ChannelMembershipList.
+typedef QDictIterator<NickInfoList> ChannelMembershipListIterator;
+
class Server : public QObject
{
Q_OBJECT
@@ -131,6 +142,20 @@ class Server : public QObject
bool connected();
QString getIp();
QString getNumericalIp();
+
+ // Given a nickname, returns NickInfo object. 0 if not found.
+ NickInfo* getNickInfo(const QString& nickName);
+ // Returns the list of members for a channel in the joinedChannels list. 0 if \
channel is not in the joinedChannels list. + // Using code must not alter the \
list. + const NickInfoList* getJoinedChannelMembers(const QString& channelName);
+ // Returns the list of members for a channel in the unjoinedChannels list. 0 if \
channel is not in the unjoinedChannels list. + // Using code must not alter the \
list. + const NickInfoList* getUnjoinedChannelMembers(const QString& channelName);
+ // Searches the Joined and Unjoined lists for the given channel and returns the \
member list. 0 if channel is not in either list. + // Using code must not alter \
the list. + const NickInfoList* getChannelMembers(const QString& channelName);
+ // Returns a list of all the channels (joined or unjoined) that a nick is in.
+ QStringList getNickChannels(QString& nickName);
signals:
void nicknameChanged(const QString&);
@@ -284,6 +309,21 @@ class Server : public QObject
bool rejoinChannels;
QString nonAwayNick;
+
+ // All nicks known to this server. Note this is NOT a list of nicks on the \
server. + NickInfoList allNicks;
+ // List of membership lists for joined channels. A "joined" channel is a \
channel that user has joined, i.e., + // a tab appears for the channel in the main \
window. + ChannelMembershipList joinedChannels;
+ // List of membership lists for unjoined channels. These come from WHOIS \
responses. Note that this is NOT + // a list of all channels on the server, just \
those we are interested in because of nicks in the Nick Watch List. + \
ChannelMembershipList unjoinedChannels; + // List of nicks in the Nick Watch List \
that are online. + NickInfoList nicksOnline;
+ // List of nicks in the Nick Watch List that are not online.
+ NickInfoList nicksOffline;
+ // List of nicks in Queries.
+ NickInfoList queryNicks;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic