/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include namespace Swift { class IQRouter; class SWIFTEN_API MUCBookmarkManager { public: MUCBookmarkManager(IQRouter* iqRouter); void addBookmark(const MUCBookmark& bookmark); void removeBookmark(const MUCBookmark& bookmark); void replaceBookmark(const MUCBookmark& oldBookmark, const MUCBookmark& newBookmark); const std::vector& getBookmarks() const; boost::optional lookupBookmark(const JID& bookmarkJID) const; public: boost::signals2::signal onBookmarkAdded; boost::signals2::signal onBookmarkRemoved; /** * When server bookmarks are ready to be used (request response has been received). */ boost::signals2::signal onBookmarksReady; private: bool containsEquivalent(const std::vector& list, const MUCBookmark& bookmark); void handleBookmarksReceived(std::shared_ptr payload, ErrorPayload::ref error); void flush(); private: bool ready_; bool handlingReceivedBookmarks_; std::vector bookmarks_; IQRouter* iqRouter_; std::shared_ptr storage_; }; }