X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=420cc62a8ef74710e64937bba43ad60ee5091a33;hp=66fc50b01759a06e67fc9bec8f59388ada5be79c;hb=8f976cfdc7090cf4a752dab08126cc6107aa9626;hpb=258d157a228d2b2b46b01d3b33ab932b9979436a diff --git a/src/core/core.h b/src/core/core.h index 66fc50b0..420cc62a 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -18,8 +18,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef CORE_H -#define CORE_H +#pragma once + +#include +#include #include #include @@ -36,6 +38,7 @@ #include "authenticator.h" #include "bufferinfo.h" +#include "deferredptr.h" #include "message.h" #include "oidentdconfiggenerator.h" #include "sessionthread.h" @@ -528,6 +531,39 @@ public: return instance()->_storage->bufferMarkerLineMsgIds(user); } + //! Update the BufferActivity for a Buffer + /** This Method is used to make the activity 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 setBufferActivity(UserId user, const BufferId &bufferId, const Message::Types &activity) { + return instance()->_storage->setBufferActivity(user, bufferId, activity); + } + + + //! Get a Hash of all buffer activity states + /** This Method is called when the Quassel Core is started to restore the BufferActivity + * \note This method is threadsafe. + * + * \param user The Owner of the buffers + */ + static inline QHash bufferActivities(UserId user) { + return instance()->_storage->bufferActivities(user); + } + + //! Get the bitset of buffer activity states for a buffer + /** This method is used to load the activity state 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 Message::Types bufferActivity(BufferId &bufferId, const MsgId &lastSeenMsgId) { + return instance()->_storage->bufferActivity(bufferId, lastSeenMsgId); + } static inline QDateTime startTime() { return instance()->_startTime; } static inline bool isConfigured() { return instance()->_configured; } @@ -543,19 +579,6 @@ public: static QVariantList backendInfo(); static QVariantList authenticatorInfo(); - /** - * Checks if a storage backend is the default storage backend. This - * hardcodes this information into the core (not the client). - * - * \param backend The backend to check. - * - * @return True if storage backend is default, false otherwise. - */ - static inline bool isStorageBackendDefault(const Storage *backend) - { - return (backend->displayName() == "SQLite") ? true : false; - } - static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap); static inline QTimer &syncTimer() { return instance()->_storageSyncTimer; } @@ -607,34 +630,34 @@ private: //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); QString setupCoreForInternalUsage(); - void registerStorageBackends(); - bool registerStorageBackend(Storage *); - void unregisterStorageBackends(); - void unregisterStorageBackend(Storage *); + bool createUser(); + template + void registerStorageBackend(); + + template + void registerAuthenticator(); + + void registerStorageBackends(); void registerAuthenticators(); - bool registerAuthenticator(Authenticator *); - void unregisterAuthenticators(); - void unregisterAuthenticator(Authenticator *); + + DeferredSharedPtr storageBackend(const QString& backendId) const; + DeferredSharedPtr authenticator(const QString& authenticatorId) const; bool selectBackend(const QString &backend); bool selectAuthenticator(const QString &backend); - bool createUser(); bool saveBackendSettings(const QString &backend, const QVariantMap &settings); void saveAuthenticatorSettings(const QString &backend, const QVariantMap &settings); - QVariantMap promptForSettings(const Storage *storage); - QVariantMap promptForSettings(const Authenticator *authenticator); - QVariantMap promptForSettings(QStringList keys, QVariantMap defaults); + template + QVariantMap promptForSettings(const Backend *backend); private: QSet _connectingClients; QHash _sessions; - - // Have both a storage backend and an authenticator backend. - Storage *_storage; - Authenticator *_authenticator; + DeferredSharedPtr _storage; ///< Active storage backend + DeferredSharedPtr _authenticator; ///< Active authenticator QTimer _storageSyncTimer; #ifdef HAVE_SSL @@ -643,21 +666,18 @@ private: QTcpServer _server, _v6server; #endif - OidentdConfigGenerator *_oidentdConfigGenerator; + OidentdConfigGenerator *_oidentdConfigGenerator {nullptr}; - QHash _storageBackends; - QHash _authenticators; + std::vector> _registeredStorageBackends; + std::vector> _registeredAuthenticators; QDateTime _startTime; bool _configured; - static AbstractSqlMigrationReader *getMigrationReader(Storage *storage); - static AbstractSqlMigrationWriter *getMigrationWriter(Storage *storage); + static std::unique_ptr getMigrationReader(Storage *storage); + static std::unique_ptr getMigrationWriter(Storage *storage); static void stdInEcho(bool on); static inline void enableStdInEcho() { stdInEcho(true); } static inline void disableStdInEcho() { stdInEcho(false); } }; - - -#endif