Backlogdata is now made persistent every 10 minutes.
[quassel.git] / src / core / core.h
index 7669317..091c0f7 100644 (file)
@@ -25,6 +25,7 @@
 #include <QMutex>
 #include <QString>
 #include <QVariant>
+#include <QTimer>
 #include <QTcpServer>
 #include <QTcpSocket>
 
@@ -37,6 +38,7 @@
 class CoreSession;
 class SessionThread;
 class Storage;
+struct NetworkInfo;
 
 class Core : public QObject {
   Q_OBJECT
@@ -51,6 +53,15 @@ class Core : public QObject {
     /*** Storage access ***/
     // These methods are threadsafe.
 
+    //! Create a NetworkId in the Storage and store it in the given NetworkInfo
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \param networkInfo a NetworkInfo definition to store the newly created ID in
+     *  \return true if successfull.
+     */
+    static bool createNetworkId(UserId user, NetworkInfo &info);
+       
     //! Get the NetworkId for a network name.
     /** \note This method is threadsafe.
      *
@@ -63,12 +74,12 @@ class Core : public QObject {
     //! Get the unique BufferInfo for the given combination of network and buffername for a user.
     /** \note This method is threadsafe.
      *
-     *  \param user    The core user who owns this buffername
-     *  \param network The network name
-     *  \param buffer  The buffer name (if empty, the net's status buffer is returned)
+     *  \param user      The core user who owns this buffername
+     *  \param networkId The network id
+     *  \param buffer    The buffer name (if empty, the net's status buffer is returned)
      *  \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found
      */
-    static BufferInfo bufferInfo(UserId user, const QString &network, const QString &buffer = "");
+    static BufferInfo bufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "");
 
     //! Store a Message in the backlog.
     /** \note This method is threadsafe.
@@ -120,6 +131,12 @@ class Core : public QObject {
      */
     static QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime());
 
+  public slots:
+    //! Make storage data persistent
+    /** \note This method is threadsafe.
+     */
+    void syncStorage();
+  
   signals:
     //! Sent when a BufferInfo is updated in storage.
     void bufferInfoUpdated(UserId user, const BufferInfo &info);
@@ -139,7 +156,7 @@ class Core : public QObject {
     void init();
     static Core *instanceptr;
 
-    SessionThread *createSession(UserId userId);
+    SessionThread *createSession(UserId userId, bool restoreState = false);
     void setupClientSession(QTcpSocket *socket, UserId uid);
     void processCoreSetup(QTcpSocket *socket, QVariantMap &msg);
 
@@ -148,6 +165,7 @@ class Core : public QObject {
     UserId guiUser;
     QHash<UserId, SessionThread *> sessions;
     Storage *storage;
+    QTimer _storageSyncTimer;
 
     QTcpServer server; // TODO: implement SSL
     QHash<QTcpSocket *, quint32> blocksizes;