You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konversation/konversation/src/nickinfo.h

187 lines
6.8 KiB

/*
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.
*/
/*
Nick Information
begin: Sat Jan 17 2004
copyright: (C) 2004 by Gary Cramblitt
email: garycramblitt@comcast.net
*/
#ifndef NICKINFO_H
#define NICKINFO_H
#include <tqstringlist.h>
#include <tqdatetime.h>
#include <ksharedptr.h>
#include <kabc/addressbook.h>
class Server;
class TQTimer;
/**
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.
A NickInfo is _only_ for online (or away) nicks. Not for offline nicks.
Offline (but watched or in addressbook) nicks are stored in the Server object.
*/
class NickInfo : public TQObject, public TDEShared
{
Q_OBJECT
public:
NickInfo(const TQString& nick, Server* server);
~NickInfo();
// Get properties of NickInfo object.
TQString getNickname() const;
TQString loweredNickname() const;
TQString getHostmask() const;
/** Currently return whether the user has set themselves to away with /away.
* May be changed in the future to parse the nick string and see if it contains
* "|away" or "|afk" or something.
*/
bool isAway() const;
TQString getAwayMessage() const;
TQString getIdentdInfo() const;
TQString getVersionInfo() const;
bool isNotified() const;
TQString getRealName() const;
TQString getNetServer() const;
TQString getNetServerInfo() const;
TQDateTime getOnlineSince() const;
uint getNickColor();
/** Whether this user is identified with nickserv.
* Found only by doing /whois nick
*/
bool isIdentified() const;
/** This returns a string of the date and time that the user has been online since.
* It will return null if a /whois hasn't been issued yet for this nickinfo
* @return a date-string in the form of "Today, 4:23pm", "Yesterday, 12:32pm" or "Mon 3 Mar 2004, 8:02am"
*/
TQString getPrettyOnlineSince() const;
/// Return the Server object that owns this NickInfo object.
Server* getServer() const;
/// Return the kabc (kaddressbook) contact for this nick
KABC::Addressee getAddressee() const;
/** Set properties of NickInfo object. */
void setNickname(const TQString& newNickname);
/** Set properties of NickInfo object. Ignores the request is newmask is empty.*/
void setHostmask(const TQString& newMask);
/** Set properties of NickInfo object. */
void setAway(bool state);
/** Set properties of NickInfo object. */
void setAwayMessage(const TQString& newMessage);
/** Set properties of NickInfo object. */
void setIdentdInfo(const TQString& newIdentdInfo);
/** Set properties of NickInfo object. */
void setVersionInfo(const TQString& newVersionInfo);
/** Set properties of NickInfo object. */
void setNotified(bool state);
/** Set properties of NickInfo object. */
void setRealName(const TQString& newRealName);
/** Set properties of NickInfo object. */
void setNetServer(const TQString& newNetServer);
/** Set properties of NickInfo object. */
void setNetServerInfo(const TQString& newNetServerInfo);
/** Whether this user is identified with nickserv.
* Found only by doing /whois nick
*/
void setIdentified(bool identified);
/** Updates the time online since.
* This will be called from the results of a /whois
* This function also calculates and sets prettyOnlineSince
* @see getPrettyOnlineSince()
*/
void setOnlineSince(const TQDateTime& datetime);
/** Returns html describing this nickInfo - useful for tooltips when hovering over this nick.
*/
TQString tooltip() const;
/** Returns just the <tr><td>.. data for a tooltip.
* Used so that channelNick->tooltip() can call this, then append on its own information.
*/
void tooltipTableData(TQTextStream &tooltip) const;
/** Returns a full name for this contact. Tries to use the name out of addressbook.
* If that is empty, uses the real name from whois. If that fails, use nickname.
*
* @return A string to show the user for the name of this contact
*/
TQString getBestAddresseeName();
/** Open this contact up in a "edit addresee association" window
*/
void showLinkAddressbookUI();
/** Edit the contact in kaddressbook
*/
bool editAddressee() const;
/** Run kmail for this contact
*/
bool sendEmail() const;
void setPrintedOnline(bool printed);
bool getPrintedOnline();
private:
/** After calling, emitNickInfoChanged is guaranteed to be called _within_ 1 second.
* Used to consolidate changed signals.
*/
void startNickInfoChangedTimer();
TQString m_nickname;
TQString m_loweredNickname;
Server* m_owningServer;
TQString m_hostmask;
bool m_away;
TQString m_awayMessage;
TQString m_identdInfo;
TQString m_versionInfo;
bool m_notified;
TQString m_realName;
/** The server they are connected to. */
TQString m_netServer;
TQString m_netServerInfo;
TQDateTime m_onlineSince;
KABC::Addressee m_addressee;
/** Whether this user is identified with nickserv.
* Found only by doing /whois nick
*/
bool m_identified;
TQTimer *m_changedTimer;
/* True if "foo is online" message is printed */
bool m_printedOnline;
/* The color index for lookup on Preferences::NickColor(index).name()
Internally stored as index-1 to allow checking for 0 */
uint m_nickColor;
private slots:
void refreshAddressee();
/** emits NickInfoChanged for this object, and calls the server emitNickInfoChanged.
* Called when the m_changedTimer activates.
*/
void emitNickInfoChanged();
signals:
void nickInfoChanged(void);
};
/** A NickInfoPtr is a pointer to a NickInfo object. Since it is a TDESharedPtr, the NickInfo
* object is automatically destroyed when all references are destroyed.
*/
typedef TDESharedPtr<NickInfo> NickInfoPtr;
/** A NickInfoMap is a list of NickInfo objects, indexed and sorted by lowercase nickname.
*/
typedef TQMap<TQString,NickInfoPtr> NickInfoMap;
typedef TQValueList<NickInfoPtr> NickInfoList;
#endif