Emit a new signal CoreSession::networkDisconnected(NetworkId)
[quassel.git] / src / core / coresession.h
index 6e718be..25bf012 100644 (file)
 
 #include "corecoreinfo.h"
 #include "corealiasmanager.h"
+#include "coreignorelistmanager.h"
 #include "message.h"
+#include "storage.h"
 
 class CoreBacklogManager;
 class CoreBufferSyncer;
 class CoreBufferViewManager;
-class CoreIrcListHelper;
-class Identity;
 class CoreIdentity;
-class NetworkConnection;
+class CoreIrcListHelper;
 class CoreNetwork;
-struct NetworkInfo;
+class CoreNetworkConfig;
+class CoreSessionEventProcessor;
+class EventManager;
+class EventStringifier;
+class IrcParser;
+class MessageEvent;
+class NetworkConnection;
 class SignalProxy;
 
+struct NetworkInfo;
+
 class QScriptEngine;
 
 class CoreSession : public QObject {
@@ -51,8 +59,9 @@ public:
   QList<BufferInfo> buffers() const;
   inline UserId user() const { return _user; }
   CoreNetwork *network(NetworkId) const;
-  NetworkConnection *networkConnection(NetworkId) const;
   CoreIdentity *identity(IdentityId) const;
+  inline CoreNetworkConfig *networkConfig() const { return _networkConfig; }
+  NetworkConnection *networkConnection(NetworkId) const;
 
   QVariant sessionState();
 
@@ -61,12 +70,17 @@ public:
   const AliasManager &aliasManager() const { return _aliasManager; }
   AliasManager &aliasManager() { return _aliasManager; }
 
+  inline EventManager *eventManager() const { return _eventManager; }
+  inline EventStringifier *eventStringifier() const { return _eventStringifier; }
+  inline CoreSessionEventProcessor *eventProcessor() const { return _eventProcessor; }
+  inline IrcParser *ircParser() const { return _ircParser; }
+
   inline CoreIrcListHelper *ircListHelper() const { return _ircListHelper; }
 
+  inline CoreIgnoreListManager *ignoreListManager() { return &_ignoreListManager; }
 //   void attachNetworkConnection(NetworkConnection *conn);
 
   //! Return necessary data for restoring the session after restarting the core
-  void saveSessionState() const;
   void restoreSessionState();
 
 public slots:
@@ -105,6 +119,9 @@ public slots:
 
   QHash<QString, QString> persistentChannels(NetworkId) const;
 
+  //! Marks us away (or unaway) on all networks
+  void globalAway(const QString &msg = QString());
+
 signals:
   void initialized();
   void sessionState(const QVariant &);
@@ -129,12 +146,13 @@ signals:
 
   void networkCreated(NetworkId);
   void networkRemoved(NetworkId);
+  void networkDisconnected(NetworkId);
 
 private slots:
   void removeClient(QIODevice *dev);
 
   void recvStatusMsgFromServer(QString msg);
-  void recvMessageFromServer(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", Message::Flags flags = Message::None);
+  void recvMessageFromServer(NetworkId networkId, Message::Type, BufferInfo::Type, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None);
 
   void destroyNetwork(NetworkId);
 
@@ -145,9 +163,18 @@ private slots:
 
   void updateIdentityBySender();
 
+  void saveSessionState() const;
+
+protected:
+  virtual void customEvent(QEvent *event);
+
 private:
   void loadSettings();
   void initScriptEngine();
+  void processMessages();
+
+  /// Hook for converting events to the old displayMsg() handlers
+  Q_INVOKABLE void processMessageEvent(MessageEvent *event);
 
   UserId _user;
 
@@ -162,10 +189,31 @@ private:
   CoreBacklogManager *_backlogManager;
   CoreBufferViewManager *_bufferViewManager;
   CoreIrcListHelper *_ircListHelper;
+  CoreNetworkConfig *_networkConfig;
   CoreCoreInfo _coreInfo;
 
+  EventManager *_eventManager;
+  EventStringifier *_eventStringifier; // should eventually move into client
+  CoreSessionEventProcessor *_eventProcessor;
+  IrcParser *_ircParser;
+
   QScriptEngine *scriptEngine;
 
+  QList<RawMessage> _messageQueue;
+  bool _processMessages;
+  CoreIgnoreListManager _ignoreListManager;
+};
+
+struct RawMessage {
+  NetworkId networkId;
+  Message::Type type;
+  BufferInfo::Type bufferType;
+  QString target;
+  QString text;
+  QString sender;
+  Message::Flags flags;
+  RawMessage(NetworkId networkId, Message::Type type, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender, Message::Flags flags)
+    : networkId(networkId), type(type), bufferType(bufferType), target(target), text(text), sender(sender), flags(flags) {}
 };
 
 #endif