Ok this is the major rework of quassel we've all been waiting for. For the actual...
[quassel.git] / src / client / client.h
index 3c6b56f..8a824c3 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#ifndef _GUI_H_
-#define _GUI_H_
+#ifndef _CLIENT_H_
+#define _CLIENT_H_
 
-#include <QtCore>
-#include <QtGui>
-#include <QtNetwork>
+#include <QAbstractSocket>
+#include <QTcpSocket>
+#include <QList>
+#include <QPointer>
 
-#include "global.h"
-#include "buffer.h"
-#include "message.h"
-#include "clientproxy.h"
-//#include "bufferviewwidget.h"
+#include "buffer.h" // needed for activity lvl
+class BufferInfo;
+class Message;
 
-class MainWin;
-class ClientProxy;
+class NetworkInfo;
+
+
+class AbstractUi;
+class AbstractUiMsg;
 class BufferTreeModel;
+class SignalProxy;
+
+class QTimer;
+
 
 class Client : public QObject {
   Q_OBJECT
 
-  public:
-    static Client *instance();
-    static void destroy();
-
-    static Buffer *buffer(BufferId);
-    static BufferId statusBufferId(QString net);
-    static BufferId bufferId(QString net, QString buf);
-
-    static BufferTreeModel *bufferModel();
-
-  signals:
-    void sendInput(BufferId, QString message);
-    void showBuffer(Buffer *);
-    void bufferSelected(Buffer *);
-    void bufferUpdated(Buffer *);
-    void bufferActivity(Buffer::ActivityLevel, Buffer *);
-    void bufferDestroyed(Buffer *);
-    void backlogReceived(Buffer *, QList<Message>);
-    void requestBacklog(BufferId, QVariant, QVariant);
-
-    void recvPartialItem(quint32 avail, quint32 size);
-    void coreConnectionError(QString errorMsg);
-
-  public slots:
-    //void selectBuffer(Buffer *);
-    void connectToCore(QString host, quint16 port);
-    void disconnectFromCore();
-
-  private slots:
-    void updateCoreData(UserId, QString);
-    void updateLocalData(QString, QVariant);
-    void recvProxySignal(ClientSignal sig, QVariant arg1, QVariant arg2, QVariant arg3);
-
-    void serverError(QAbstractSocket::SocketError);
-    void serverHasData();
-    void coreConnected();
-    void coreDisconnected();
-
-    void userInput(BufferId, QString);
-    void networkConnected(QString);
-    void networkDisconnected(QString);
-    void recvNetworkState(QString, QVariant);
-    void recvMessage(Message message);
-    void recvStatusMsg(QString network, QString message);
-    void setTopic(QString net, QString buf, QString);
-    void addNick(QString net, QString nick, VarMap props);
-    void removeNick(QString net, QString nick);
-    void renameNick(QString net, QString oldnick, QString newnick);
-    void updateNick(QString net, QString nick, VarMap props);
-    void setOwnNick(QString net, QString nick);
-    void recvBacklogData(BufferId, QList<QVariant>, bool);
-    void updateBufferId(BufferId);
-
-    void layoutMsg();
-
-  private:
-    Client();
-    ~Client();
-    void init();
-    static Client *instanceptr;
-
-    void syncToCore();
-
-    enum ClientMode { LocalCore, RemoteCore };
-    static ClientMode clientMode;
-
-    MainWin *mainWin;
-    ClientProxy *clientProxy;
-    BufferTreeModel *_bufferModel;
-
-    QTcpSocket socket;
-    quint32 blockSize;
-
-    static QHash<BufferId, Buffer *> buffers;
-    static QHash<uint, BufferId> bufferIds;
-    static QHash<QString, QHash<QString, VarMap> > nicks;
-    static QHash<QString, bool> connected;
-    static QHash<QString, QString> ownNick;
-    static QList<BufferId> coreBuffers;
-
-    QTimer *layoutTimer;
-    QList<Message> layoutQueue;
+public:
+  static Client *instance();
+  static void destroy();
+  static void init(AbstractUi *);
+
+  static QList<NetworkInfo *> networkInfos();
+  static NetworkInfo *networkInfo(uint networkid);
+  
+  static QList<BufferInfo> allBufferInfos();
+  static QList<Buffer *> buffers();
+  static Buffer *buffer(uint bufferUid);
+  static Buffer *buffer(BufferInfo);
+  static BufferInfo statusBufferInfo(QString net);
+  static BufferInfo bufferInfo(QString net, QString buf);
+
+  static BufferTreeModel *bufferModel();
+  static SignalProxy *signalProxy();
+
+  static AbstractUiMsg *layoutMsg(const Message &);
+
+  static bool isConnected();
+
+  static void storeSessionData(const QString &key, const QVariant &data);
+  static QVariant retrieveSessionData(const QString &key, const QVariant &def = QVariant());
+  static QStringList sessionDataKeys();
+
+  enum ClientMode { LocalCore, RemoteCore };
+
+signals:
+  void sendInput(BufferInfo, QString message);
+  void showBuffer(Buffer *);
+  void bufferSelected(Buffer *);
+  void bufferUpdated(Buffer *);
+  void bufferActivity(Buffer::ActivityLevel, Buffer *);
+  void bufferDestroyed(Buffer *);
+  void backlogReceived(Buffer *, QList<Message>);
+  void requestBacklog(BufferInfo, QVariant, QVariant);
+  void requestNetworkStates();
+
+  void recvPartialItem(uint avail, uint size);
+  void coreConnectionError(QString errorMsg);
+  void coreConnectionMsg(const QString &msg);
+  void coreConnectionProgress(uint part, uint total);
+
+  void connected();
+  void disconnected();
+
+  void sessionDataChanged(const QString &key);
+  void sessionDataChanged(const QString &key, const QVariant &data);
+  void sendSessionData(const QString &key, const QVariant &data);
+
+public slots:
+  //void selectBuffer(Buffer *);
+  //void connectToLocalCore();
+  void connectToCore(const QVariantMap &);
+  void disconnectFromCore();
+
+private slots:
+  void recvCoreState(const QVariant &state);
+  void recvSessionData(const QString &key, const QVariant &data);
+
+  void coreSocketError(QAbstractSocket::SocketError);
+  void coreHasData();
+  void coreSocketConnected();
+  void coreSocketDisconnected();
+  void coreSocketStateChanged(QAbstractSocket::SocketState);
+
+  void userInput(BufferInfo, QString);
+
+  void networkConnected(uint);
+  void networkDisconnected(uint);
+
+  void updateCoreConnectionProgress();
+  void recvMessage(const Message &message);
+  void recvStatusMsg(QString network, QString message);
+  void recvBacklogData(BufferInfo, QVariantList, bool);
+  void updateBufferInfo(BufferInfo);
+
+  void removeBuffer(Buffer *);
+
+  void layoutMsg();
+
+private:
+  Client(QObject *parent = 0);
+  virtual ~Client();
+  void init();
+  
+  void syncToCore(const QVariant &coreState);
+  QVariant connectToLocalCore(QString user, QString passwd);  // defined in main.cpp
+  void disconnectFromLocalCore();                             // defined in main.cpp
+
+  static QPointer<Client> instanceptr;
+  
+  QPointer<QIODevice> socket;
+  QPointer<SignalProxy> _signalProxy;
+  QPointer<AbstractUi> mainUi;
+  QPointer<BufferTreeModel> _bufferModel;
+
+  ClientMode clientMode;
+
+  quint32 blockSize;
+  bool connectedToCore;
+  
+  QVariantMap coreConnectionInfo;
+  QHash<uint, Buffer *> _buffers;
+  QHash<uint, NetworkInfo*> _networkInfo;
+
+  QTimer *layoutTimer;
+  QList<Buffer *> layoutQueue;
+
+  QVariantMap sessionData;
+
+
 };
 
 #endif