X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=dad8ee2d8f734b0a690ec338ef4f341e94306c1c;hb=fbb06e36ee772862c0d70ab43c9000225e9f8c42;hp=98e2612e7e3c8ae148b98b755a4678052de5e335;hpb=c382e0c11f80fb37307ecc42c487aa433c97ad8c;p=quassel.git diff --git a/src/core/core.h b/src/core/core.h index 98e2612e..dad8ee2d 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -60,10 +60,9 @@ class Core : public QObject public: static Core *instance(); - static void destroy(); - static void saveState(); - static void restoreState(); + Core(); + ~Core() override; /*** Storage access ***/ // These methods are threadsafe. @@ -429,6 +428,22 @@ public: } + //! Request a certain number messages stored in a given buffer, matching certain filters + /** \param buffer The buffer we request messages from + * \param first if != -1 return only messages with a MsgId >= first + * \param last if != -1 return only messages with a MsgId < last + * \param limit if != -1 limit the returned list to a max of \limit entries + * \param type The Message::Types that should be returned + * \return The requested list of messages + */ + static inline QList requestMsgsFiltered(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, + int limit = -1, Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) + { + return instance()->_storage->requestMsgsFiltered(user, bufferId, first, last, limit, type, flags); + } + + //! Request a certain number of messages across all buffers /** \param first if != -1 return only messages with a MsgId >= first * \param last if != -1 return only messages with a MsgId < last @@ -441,6 +456,21 @@ public: } + //! Request a certain number of messages across all buffers, matching certain filters + /** \param first if != -1 return only messages with a MsgId >= first + * \param last if != -1 return only messages with a MsgId < last + * \param limit Max amount of messages + * \param type The Message::Types that should be returned + * \return The requested list of messages + */ + static inline QList requestAllMsgsFiltered(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) + { + return instance()->_storage->requestAllMsgsFiltered(user, first, last, limit, type, flags); + } + + //! Request a list of all buffers known to a user. /** This method is used to get a list of all buffers we have stored a backlog from. * \note This method is threadsafe. @@ -606,18 +636,50 @@ public: return instance()->_storage->bufferActivity(bufferId, lastSeenMsgId); } + //! Update the highlight count for a Buffer + /** This Method is used to make the highlight count state of a Buffer persistent + * \note This method is threadsafe. + * + * \param user The Owner of that Buffer + * \param bufferId The buffer id + * \param MsgId The Message id where the marker line should be placed + */ + static inline void setHighlightCount(UserId user, BufferId bufferId, int highlightCount) { + return instance()->_storage->setHighlightCount(user, bufferId, highlightCount); + } + + + //! Get a Hash of all highlight count states + /** This Method is called when the Quassel Core is started to restore the highlight count + * \note This method is threadsafe. + * + * \param user The Owner of the buffers + */ + static inline QHash highlightCounts(UserId user) { + return instance()->_storage->highlightCounts(user); + } + //! Get the highlight count states for a buffer + /** This method is used to load the highlight count of a buffer when its last seen message changes. + * \note This method is threadsafe. + * + * \param bufferId The buffer + * \param lastSeenMsgId The last seen message + */ + static inline int highlightCount(BufferId bufferId, MsgId lastSeenMsgId) { + return instance()->_storage->highlightCount(bufferId, lastSeenMsgId); + } + static inline QDateTime startTime() { return instance()->_startTime; } static inline bool isConfigured() { return instance()->_configured; } - static bool sslSupported(); /** - * Reloads SSL certificates used for connection with clients + * Whether or not strict ident mode is enabled, locking users' idents to Quassel username * - * @return True if certificates reloaded successfully, otherwise false. + * @return True if strict mode enabled, otherwise false */ - static bool reloadCerts(); + static inline bool strictIdentEnabled() { return instance()->_strictIdentEnabled; } - static void cacheSysIdent(); + static bool sslSupported(); static QVariantList backendInfo(); static QVariantList authenticatorInfo(); @@ -631,10 +693,23 @@ public: static const int AddClientEventId; public slots: - //! Make storage data persistent - /** \note This method is threadsafe. + bool init(); + + /** Persist storage. + * + * @note This method is threadsafe. */ void syncStorage(); + + /** + * Reload SSL certificates used for connection with clients. + * + * @return True if certificates reloaded successfully, otherwise false. + */ + bool reloadCerts(); + + void cacheSysIdent(); + void setupInternalClientSession(InternalPeer *clientConnection); QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap); @@ -646,7 +721,7 @@ signals: void sessionState(const Protocol::SessionState &sessionState); protected: - virtual void customEvent(QEvent *event); + void customEvent(QEvent *event) override; private slots: bool startListening(); @@ -654,8 +729,12 @@ private slots: void incomingConnection(); void clientDisconnected(); - bool initStorage(const QString &backend, const QVariantMap &settings, bool setup = false); - bool initAuthenticator(const QString &backend, const QVariantMap &settings, bool setup = false); + bool initStorage(const QString &backend, const QVariantMap &settings, + const QProcessEnvironment &environment, bool loadFromEnvironment, + bool setup = false); + bool initAuthenticator(const QString &backend, const QVariantMap &settings, + const QProcessEnvironment &environment, bool loadFromEnvironment, + bool setup = false); void socketError(QAbstractSocket::SocketError err, const QString &errorString); void setupClientSession(RemotePeer *, UserId); @@ -663,11 +742,6 @@ private slots: bool changeUserPass(const QString &username); private: - Core(); - ~Core(); - void init(); - static Core *instanceptr; - SessionThread *sessionForUser(UserId userId, bool restoreState = false); void addClientHelper(RemotePeer *peer, UserId uid); //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); @@ -693,10 +767,14 @@ private: bool saveBackendSettings(const QString &backend, const QVariantMap &settings); void saveAuthenticatorSettings(const QString &backend, const QVariantMap &settings); + void saveState(); + void restoreState(); + template QVariantMap promptForSettings(const Backend *backend); private: + static Core *_instance; QSet _connectingClients; QHash _sessions; DeferredSharedPtr _storage; ///< Active storage backend @@ -719,6 +797,9 @@ private: bool _configured; + /// Whether or not strict ident mode is enabled, locking users' idents to Quassel username + bool _strictIdentEnabled; + static std::unique_ptr getMigrationReader(Storage *storage); static std::unique_ptr getMigrationWriter(Storage *storage); static void stdInEcho(bool on);