X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fstorage.h;h=84d77556c1a3b7199dcba7add1be02c2f860f86b;hb=152e7c35efbf97e40d91c60cdb9c3ba734f09fb2;hp=30c1c0bd376267c29ca1f615b876a4cb850099aa;hpb=23ebdc0a422294764ff3be3f8d7e56cc2b323185;p=quassel.git diff --git a/src/core/storage.h b/src/core/storage.h index 30c1c0bd..84d77556 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 @@ -115,12 +152,13 @@ class Storage : public QObject { /* Buffer handling */ //! Get the unique BufferInfo for the given combination of network and buffername for a user. - /** \param user The core user who owns this buffername - * \param network The network name + /** \param user The core user who owns this buffername + * \param networkId The network id + * \param type The type of the buffer (StatusBuffer, Channel, etc.) * \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 */ - virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "") = 0; + virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "") = 0; //! Request a list of all buffers known to a user since a certain point in time. /** This method is used to get a list of all buffers we have stored a backlog from.