00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #ifndef IRC_SESSION_H
00016 #define IRC_SESSION_H
00017 
00018 #include <ircglobal.h>
00019 #include <QObject>
00020 
00021 QT_FORWARD_DECLARE_CLASS(QAbstractSocket)
00022 QT_FORWARD_DECLARE_CLASS(QStringList)
00023 
00024 namespace Irc
00025 {
00026     class Buffer;
00027     class SessionPrivate;
00028 
00029     class IRC_EXPORT Session : public QObject
00030     {
00031         Q_OBJECT
00032         Q_PROPERTY(QStringList autoJoinChannels READ autoJoinChannels WRITE setAutoJoinChannels)
00033         Q_PROPERTY(int autoReconnectDelay READ autoReconnectDelay WRITE setAutoReconnectDelay)
00034         Q_PROPERTY(QByteArray encoding READ encoding WRITE setEncoding)
00035         Q_PROPERTY(QString host READ host WRITE setHost)
00036         Q_PROPERTY(QString ident READ ident WRITE setIdent)
00037         Q_PROPERTY(QString nick READ nick WRITE setNick)
00038         Q_PROPERTY(Options options READ options WRITE setOptions)
00039         Q_PROPERTY(QString password READ password WRITE setPassword)
00040         Q_PROPERTY(quint16 port READ port WRITE setPort)
00041         Q_PROPERTY(QString realName READ realName WRITE setRealName)
00042         Q_PROPERTY(QStringList supportedCapabilities READ supportedCapabilities)
00043         Q_PROPERTY(QStringList enabledCapabilities READ enabledCapabilities)
00044         Q_FLAGS(Options)
00045         Q_ENUMS(Option)
00046 
00047     public:
00048         Session(QObject* parent = 0);
00049         ~Session();
00050 
00051         QStringList autoJoinChannels() const;
00052         void addAutoJoinChannel(const QString& channel);
00053         void removeAutoJoinChannel(const QString& channel);
00054         void setAutoJoinChannels(const QStringList& channels);
00055 
00056         int autoReconnectDelay() const;
00057         void setAutoReconnectDelay(int seconds);
00058 
00059         QByteArray encoding() const;
00060         void setEncoding(const QByteArray& encoding);
00061 
00062         QString ident() const;
00063         void setIdent(const QString& ident);
00064 
00065         QString nick() const;
00066         void setNick(const QString& nick);
00067 
00068         QString password() const;
00069         void setPassword(const QString& password);
00070 
00071         QString realName() const;
00072         void setRealName(const QString& realName);
00073 
00074         QString host() const;
00075         void setHost(const QString& host);
00076 
00077         quint16 port() const;
00078         void setPort(quint16 port);
00079 
00080         enum Option
00081         {
00082             NoOptions = 0x0,
00083             StripNicks = 0x1,
00084             EchoMessages = 0x2
00085         };
00086         Q_DECLARE_FLAGS(Options, Option)
00087 
00088         Options options() const;
00089         void setOptions(Options options);
00090 
00091         QAbstractSocket* socket() const;
00092         void setSocket(QAbstractSocket* socket);
00093 
00094         QList<Buffer*> buffers() const;
00095         Buffer* buffer(const QString& receiver = QString()) const;
00096         Buffer* addBuffer(const QString& receiver);
00097 
00098         Buffer* defaultBuffer() const;
00099         void setDefaultBuffer(Buffer* buffer);
00100 
00101         QStringList supportedCapabilities() const;
00102         QStringList enabledCapabilities() const;
00103         bool capabilityEnabled(const QString& name) const;
00104 
00105     public Q_SLOTS:
00106         void connectToServer(const QString& hostName = QString(), quint16 port = 6667);
00107         void reconnectToServer();
00108         void disconnectFromServer();
00109 
00110         bool raw(const QString& message);
00111         bool motd();
00112         bool join(const QString& channel, const QString& key = QString());
00113         bool part(const QString& channel, const QString& reason = QString());
00114         bool quit(const QString& reason = QString());
00115         bool names(const QString& channel);
00116         bool list(const QString& channel = QString());
00117         bool whois(const QString& nick);
00118         bool whowas(const QString& nick);
00119         bool mode(const QString& target, const QString& mode = QString());
00120         bool topic(const QString& channel, const QString& topic = QString());
00121         bool invite(const QString& nick, const QString& channel);
00122         bool kick(const QString& nick, const QString& channel, const QString& reason = QString());
00123         bool message(const QString& receiver, const QString& message);
00124         bool notice(const QString& receiver, const QString& notice);
00125         bool ctcpAction(const QString& receiver, const QString& action);
00126         bool ctcpRequest(const QString& nick, const QString& request);
00127         bool ctcpReply(const QString& nick, const QString& reply);
00128 
00129         void requestCapabilities(const QStringList& capabilities);
00130         void clearCapabilities();
00131 
00132 #ifndef IRC_NO_DEPRECATED
00133         
00134         Q_DECL_DEPRECATED bool sendRaw(const QString& message);
00135         Q_DECL_DEPRECATED bool cmdJoin(const QString& channel, const QString& key = QString());
00136         Q_DECL_DEPRECATED bool cmdPart(const QString& channel, const QString& reason = QString());
00137         Q_DECL_DEPRECATED bool cmdQuit(const QString& reason = QString());
00138         Q_DECL_DEPRECATED bool cmdNames(const QString& channel);
00139         Q_DECL_DEPRECATED bool cmdList(const QString& channel = QString());
00140         Q_DECL_DEPRECATED bool cmdWhois(const QString& nick);
00141         Q_DECL_DEPRECATED bool cmdMode(const QString& target, const QString& mode = QString());
00142         Q_DECL_DEPRECATED bool cmdTopic(const QString& channel, const QString& topic = QString());
00143         Q_DECL_DEPRECATED bool cmdInvite(const QString& nick, const QString& channel);
00144         Q_DECL_DEPRECATED bool cmdKick(const QString& nick, const QString& channel, const QString& reason = QString());
00145         Q_DECL_DEPRECATED bool cmdMessage(const QString& receiver, const QString& message);
00146         Q_DECL_DEPRECATED bool cmdNotice(const QString& receiver, const QString& notice);
00147         Q_DECL_DEPRECATED bool cmdCtcpAction(const QString& receiver, const QString& action);
00148         Q_DECL_DEPRECATED bool cmdCtcpRequest(const QString& nick, const QString& request);
00149         Q_DECL_DEPRECATED bool cmdCtcpReply(const QString& nick, const QString& reply);
00150 #endif // IRC_NO_DEPRECATED
00151 
00152     Q_SIGNALS:
00153         void connected();
00154         void welcomed();
00155         void reconnecting();
00156         void disconnected();
00157 
00158         void bufferAdded(Irc::Buffer* buffer);
00159         void bufferRemoved(Irc::Buffer* buffer);
00160 
00161         void capabilitiesListed(const QStringList& capabilities);
00162         void capabilitiesAcked(const QStringList& capabilities);
00163         void capabilitiesNotAcked(const QStringList& capabilities);
00164 
00165 #ifndef IRC_NO_DEPRECATED
00166         
00167         Q_DECL_DEPRECATED void msgJoined(const QString& origin, const QString& channel);
00168         Q_DECL_DEPRECATED void msgParted(const QString& origin, const QString& channel, const QString& message);
00169         Q_DECL_DEPRECATED void msgQuit(const QString& origin, const QString& message);
00170         Q_DECL_DEPRECATED void msgNickChanged(const QString& origin, const QString& nick);
00171         Q_DECL_DEPRECATED void msgModeChanged(const QString& origin, const QString& receiver, const QString& mode, const QString& args);
00172         Q_DECL_DEPRECATED void msgTopicChanged(const QString& origin, const QString& channel, const QString& topic);
00173         Q_DECL_DEPRECATED void msgInvited(const QString& origin, const QString& receiver, const QString& channel);
00174         Q_DECL_DEPRECATED void msgKicked(const QString& origin, const QString& channel, const QString& nick, const QString& message);
00175         Q_DECL_DEPRECATED void msgMessageReceived(const QString& origin, const QString& receiver, const QString& message);
00176         Q_DECL_DEPRECATED void msgNoticeReceived(const QString& origin, const QString& receiver, const QString& notice);
00177         Q_DECL_DEPRECATED void msgCtcpRequestReceived(const QString& origin, const QString& request);
00178         Q_DECL_DEPRECATED void msgCtcpReplyReceived(const QString& origin, const QString& reply);
00179         Q_DECL_DEPRECATED void msgCtcpActionReceived(const QString& origin, const QString& receiver, const QString& action);
00180         Q_DECL_DEPRECATED void msgNumericMessageReceived(const QString& origin, uint code, const QStringList& params);
00181         Q_DECL_DEPRECATED void msgUnknownMessageReceived(const QString& origin, const QStringList& params);
00182 #endif // IRC_NO_DEPRECATED
00183 
00184     protected:
00185         virtual Buffer* createBuffer(const QString& receiver);
00186 
00187     private:
00188         SessionPrivate* const d_ptr;
00189         Q_DECLARE_PRIVATE(Session)
00190         Q_DISABLE_COPY(Session)
00191 
00192         Q_PRIVATE_SLOT(d_func(), void _q_connected())
00193         Q_PRIVATE_SLOT(d_func(), void _q_disconnected())
00194         Q_PRIVATE_SLOT(d_func(), void _q_reconnect())
00195         Q_PRIVATE_SLOT(d_func(), void _q_error())
00196         Q_PRIVATE_SLOT(d_func(), void _q_state(QAbstractSocket::SocketState))
00197         Q_PRIVATE_SLOT(d_func(), void _q_readData())
00198 
00199 #ifndef IRC_NO_DEPRECATED
00200         
00201         Q_PRIVATE_SLOT(d_func(), void _q_joined(const QString&));
00202         Q_PRIVATE_SLOT(d_func(), void _q_parted(const QString&, const QString&));
00203         Q_PRIVATE_SLOT(d_func(), void _q_quit(const QString&, const QString&));
00204         Q_PRIVATE_SLOT(d_func(), void _q_nickChanged(const QString&, const QString&));
00205         Q_PRIVATE_SLOT(d_func(), void _q_modeChanged(const QString&, const QString&, const QString&));
00206         Q_PRIVATE_SLOT(d_func(), void _q_topicChanged(const QString&, const QString&));
00207         Q_PRIVATE_SLOT(d_func(), void _q_invited(const QString&, const QString&, const QString&));
00208         Q_PRIVATE_SLOT(d_func(), void _q_kicked(const QString&, const QString&, const QString&));
00209         Q_PRIVATE_SLOT(d_func(), void _q_messageReceived(const QString&, const QString&));
00210         Q_PRIVATE_SLOT(d_func(), void _q_noticeReceived(const QString&, const QString&));
00211         Q_PRIVATE_SLOT(d_func(), void _q_ctcpRequestReceived(const QString&, const QString&));
00212         Q_PRIVATE_SLOT(d_func(), void _q_ctcpReplyReceived(const QString&, const QString&));
00213         Q_PRIVATE_SLOT(d_func(), void _q_ctcpActionReceived(const QString&, const QString&));
00214         Q_PRIVATE_SLOT(d_func(), void _q_numericMessageReceived(const QString&, uint code, const QStringList&));
00215         Q_PRIVATE_SLOT(d_func(), void _q_unknownMessageReceived(const QString&, const QStringList&));
00216 #endif // IRC_NO_DEPRECATED
00217 
00218         friend class Buffer;
00219         friend class BufferPrivate;
00220     };
00221 }
00222 
00223 #ifndef QT_NO_DEBUG_STREAM
00224 IRC_EXPORT QDebug operator<<(QDebug debug, const Irc::Session* session);
00225 #endif // QT_NO_DEBUG_STREAM
00226 
00227 Q_DECLARE_OPERATORS_FOR_FLAGS(Irc::Session::Options)
00228 
00229 #endif // IRC_SESSION_H