[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