X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fstorage.h;h=95bbb2d3d233b4154196b442420314e5f490efd2;hb=12493689255317b4816000b22bccd1961dbfd8d8;hp=30c1c0bd376267c29ca1f615b876a4cb850099aa;hpb=23ebdc0a422294764ff3be3f8d7e56cc2b323185;p=quassel.git diff --git a/src/core/storage.h b/src/core/storage.h index 30c1c0bd..95bbb2d3 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -25,7 +25,7 @@ #include "types.h" #include "message.h" -struct NetworkInfo; +#include "network.h" class Storage : public QObject { Q_OBJECT @@ -42,25 +42,36 @@ class Storage : public QObject { * prerequisites are in place (e.g. we have an appropriate DB driver etc.). * \return True if and only if the storage class can be successfully used. */ - static bool isAvailable() { return false; } + virtual bool isAvailable() const = 0; //! Returns the display name of the storage backend - /** \return A string that can be used by the GUI to describe the storage backend */ - static QString displayName() { return ""; } + /** \return A string that can be used by the client to name the storage backend */ + virtual QString displayName() const = 0; + + //! Returns a description of this storage backend + /** \return A string that can be displayed by the client to describe the storage backend */ + virtual QString description() const = 0; //! Setup the storage provider. /** This prepares the storage provider (e.g. create tables, etc.) for use within Quassel. * \param settings Hostname, port, username, password, ... * \return True if and only if the storage provider was initialized successfully. */ - virtual bool setup(const QVariantMap &settings = QVariantMap()) { Q_UNUSED(settings); return false; } - + virtual bool setup(const QVariantMap &settings = QVariantMap()) = 0; + //! Initialize the storage provider /** \param settings Hostname, port, username, password, ... * \return True if and only if the storage provider was initialized successfully. */ virtual bool init(const QVariantMap &settings = QVariantMap()) = 0; - + + //! Makes temp data persistent + /** This Method is periodically called by the Quassel Core to make temporary + * data persistant. This reduces the data loss drastically in the + * unlikely case of a Core crash. + */ + virtual void sync() = 0; + // TODO: Add functions for configuring the backlog handling, i.e. defining auto-cleanup settings etc /* User handling */ @@ -98,13 +109,39 @@ class Storage : public QObject { /* Network handling */ - //! Create a new unique Network in the storage backend + //! Create a new Network in the storage backend and return it unique Id /** \param user The core user who owns this network * \param networkInfo The networkInfo holding the network definition * \return the NetworkId of the newly created Network. Possibly invalid. */ - virtual NetworkId createNetworkId(UserId user, const NetworkInfo &info) = 0; + virtual NetworkId createNetwork(UserId user, const NetworkInfo &info) = 0; + //! Apply the changes to NetworkInfo info to the storage engine + /** \note This method is thredsafe. + * + * \param user The core user + * \param networkInfo The Updated NetworkInfo + * \return true if successfull. + */ + virtual bool updateNetwork(UserId user, const NetworkInfo &info) = 0; + + //! Permanently remove a Network and all the data associated with it. + /** \note This method is thredsafe. + * + * \param user The core user + * \param networkId The network to delete + * \return true if successfull. + */ + virtual bool removeNetwork(UserId user, const NetworkId &networkId) = 0; + + //! Returns a list of all NetworkInfos for the given UserId user + /** \note This method is thredsafe. + * + * \param user The core user + * \return QList. + */ + virtual QList networks(UserId user) = 0; + //! Get the unique NetworkId of the network for a user. /** \param user The core user who owns this network * \param network The network name