44 handlersNameMap_[
ptr->getChatHandlerDetails().at(
"name")] = (
uintptr_t)
ptr.get();
48 ptr->id().substr(0, found));
49 chatHandlers_.emplace_back(std::move(
ptr));
56 auto handlerIt = std::find_if(chatHandlers_.begin(),
59 return (handler.get() == data);
68 return (handlerId == id);
72 (*handlerIt)->detach(chatSubjects_[
toggledList.first]);
76 handlersNameMap_.erase((*handlerIt)->getChatHandlerDetails().at(
"name"));
89ChatServicesManager::registerChatService(PluginManager&
pluginManager)
98 acc->convModule()->sendMessage(
cm->peerId,
cm->data.at(
"body"));
104 }
catch (
const std::exception&
e) {
105 JAMI_ERR(
"Exception during text message sending: %s",
e.what());
112 pluginManager.registerService(
"sendTextMessage", sendTextMessage);
118 return not chatHandlers_.empty();
122std::vector<std::string>
125 std::vector<std::string>
res;
126 res.reserve(chatHandlers_.size());
136 if (message->fromPlugin
or chatHandlers_.empty())
139 std::pair<std::string, std::string>
mPair(message->accountId, message->peerId);
155 toggle = (*allowedIt).second;
176 std::pair<std::string, std::string>
mPair(accountId, peerId);
177 for (
auto it = chatSubjects_.begin();
it != chatSubjects_.end();) {
178 if (peerId.empty() &&
it->first.first == accountId)
179 it = chatSubjects_.erase(
it);
180 else if (!peerId.empty() &&
it->first ==
mPair)
181 it = chatSubjects_.erase(
it);
189 const std::string& accountId,
190 const std::string& peerId,
196std::vector<std::string>
199 std::pair<std::string, std::string>
mPair(accountId, peerId);
200 const auto&
it = allowDenyList_.find(
mPair);
201 std::vector<std::string>
ret;
202 if (
it != allowDenyList_.end()) {
212std::map<std::string, std::string>
226 const std::string&
value,
243 const std::string& accountId,
244 const std::string& peerId,
247 std::pair<std::string, std::string>
mPair(accountId, peerId);
255 return ((uintptr_t) handler.get() == chatHandlerId);
260 (*chatHandlerIt)->notifyChatSubject(
mPair, chatSubjects_[
mPair]);
263 chatAllowDenySet[(*chatHandlerIt)->getChatHandlerDetails().at(
"name")] =
true;
265 (*chatHandlerIt)->detach(chatSubjects_[
mPair]);
267 chatAllowDenySet[(*chatHandlerIt)->getChatHandlerDetails().at(
"name")] =
false;
This abstract class is an API we need to implement from plugin side.
ChatServicesManager(PluginManager &pluginManager)
Constructor registers ChatHandler API services to the PluginManager instance.
std::vector< std::string > getChatHandlerStatus(const std::string &accountId, const std::string &peerId)
Returns a list of active ChatHandlers for a given accountId, peerId pair.
bool setPreference(const std::string &key, const std::string &value, const std::string &rootPath)
Sets a preference that may be changed while ChatHandler is active.
void publishMessage(pluginMessagePtr message)
Publishes every message sent or received in a conversation that has (or should have) an active ChatHa...
std::vector< std::string > getChatHandlers() const
List all ChatHandlers available.
void cleanChatSubjects(const std::string &accountId, const std::string &peerId="")
If an account is unregistered or a contact is erased, we clear all chat subjects related to that acco...
std::map< std::string, std::string > getChatHandlerDetails(const std::string &chatHandlerIdStr)
Gets details from ChatHandler implementation.
void toggleChatHandler(const std::string &chatHandlerId, const std::string &accountId, const std::string &peerId, const bool toggle)
Activates or deactivate a given ChatHandler to a given accountId, peerId pair.
Ring Account is build on top of SIPAccountBase and uses DHT to handle call connectivity.
static LIBJAMI_TEST_EXPORT Manager & instance()
std::shared_ptr< T > getAccount(std::string_view accountId) const
Get an account pointer, looks for account of type T.
uint64_t sendTextMessage(const std::string &accountID, const std::string &to, const std::map< std::string, std::string > &payloads, bool fromPlugin=false, bool onlyConnected=false)
This class manages plugin (un)loading.
static void getAllowDenyListPreferences(ChatHandlerList &list)
Reads ChantHandlers status from allowdeny.msgpack file.
static bool getAlwaysPreference(const std::string &rootPath, const std::string &handlerName, const std::string &accountId)
Read plugin's preferences and returns wheter a specific handler "always" preference is True or False.
static void setAllowDenyListPreferences(const ChatHandlerList &list)
Saves ChantHandlers status provided by list.
static void addAlwaysHandlerPreference(const std::string &handlerName, const std::string &rootPath)
Creates a "always" preference for a handler if this preference doesn't exist yet.
std::unique_ptr< ChatHandler > ChatHandlerPtr
void emitSignal(Args... args)
std::shared_ptr< JamiMessage > pluginMessagePtr
void sendTextMessage(const std::string &accountId, const std::string &callId, const std::map< std::string, std::string > &messages, const std::string &from, bool isMixed)
Contains information about an exchanged message.