/* * Copyright (c) 2010-2017 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Swift { class UIEventStream; class UIEvent; class UserSearchWindow; class UserSearchWindowFactory; class IQRouter; class DiscoServiceWalker; class RosterController; class VCardManager; class ContactSuggester; class AvatarManager; class PresenceOracle; class ProfileSettingsProvider; class UserSearchResult { public: UserSearchResult(const JID& jid, const std::map& fields) : jid_(jid), fields_(fields) {} const JID& getJID() const {return jid_;} const std::map& getFields() const {return fields_;} private: JID jid_; std::map fields_; }; class UserSearchController { public: enum class Type {AddContact, StartChat, InviteToChat}; UserSearchController(Type type, const JID& jid, UIEventStream* uiEventStream, VCardManager* vcardManager, UserSearchWindowFactory* userSearchWindowFactory, IQRouter* iqRouter, RosterController* rosterController, ContactSuggester* contactSuggester, AvatarManager* avatarManager, PresenceOracle* presenceOracle, ProfileSettingsProvider* settings); ~UserSearchController(); UserSearchWindow* getUserSearchWindow(); void setCanInitiateImpromptuMUC(bool supportsImpromptu); private: void handleUIEvent(std::shared_ptr event); void handleFormRequested(const JID& service); void handleDiscoServiceFound(const JID& jid, std::shared_ptr info); void handleDiscoWalkFinished(); void handleFormResponse(std::shared_ptr items, ErrorPayload::ref error); void handleSearch(std::shared_ptr fields, const JID& jid); void handleSearchResponse(std::shared_ptr results, ErrorPayload::ref error); void handleNameSuggestionRequest(const JID& jid); void handleContactSuggestionsRequested(std::string text); void handleVCardChanged(const JID& jid, VCard::ref vcard); void handleAvatarChanged(const JID& jid); void handlePresenceChanged(Presence::ref presence); void handleJIDUpdateRequested(const std::vector& jids); void handleJIDAddRequested(const std::vector& jids); void handleJIDEditingFinished(const JID& jid); Contact::ref convertJIDtoContact(const JID& jid); void endDiscoWalker(); void initializeUserWindow(); void loadSavedDirectories(); void addToSavedDirectories(const JID& jid); private: Type type_; JID jid_; JID suggestionsJID_; UIEventStream* uiEventStream_; VCardManager* vcardManager_; UserSearchWindowFactory* factory_; IQRouter* iqRouter_; RosterController* rosterController_; UserSearchWindow* window_; DiscoServiceWalker* discoWalker_; ContactSuggester* contactSuggester_; AvatarManager* avatarManager_; PresenceOracle* presenceOracle_; std::vector savedDirectories_; ProfileSettingsProvider* settings_; }; }