37 callMediaHandlers_.clear();
38 callAVsubjects_.clear();
39 mediaHandlerToggled_.clear();
45 auto predicate = [&data](std::pair<const StreamData, AVSubjectSPtr>
item) {
53 callAVsubjects_[data.
id].emplace_back(data,
subject);
87 callAVsubjects_.erase(callId);
104 ptr->id().substr(0, found));
105 callMediaHandlers_.emplace_back(std::move(
ptr));
112 auto handlerIt = std::find_if(callMediaHandlers_.begin(),
113 callMediaHandlers_.end(),
115 return (handler.get() == data);
118 if (
handlerIt != callMediaHandlers_.end()) {
124 return handlerIdPair.first
125 == (uintptr_t) handlerIt->get()
126 && handlerIdPair.second;
138 pluginManager.registerComponentManager(
"CallMediaHandlerManager",
143std::vector<std::string>
146 std::vector<std::string>
res;
147 res.reserve(callMediaHandlers_.size());
156 const std::string& callId,
161 }
catch (
const std::exception&
e) {
162 JAMI_ERR(
"Error toggling media handler: %s",
e.what());
166std::map<std::string, std::string>
183 const auto&
it =
details.find(
"dataType");
186 std::istringstream(
it->second) >> status;
199 const auto&
it =
details.find(
"attached");
202 std::istringstream(
it->second) >> status;
208std::vector<std::string>
211 std::vector<std::string>
ret;
212 const auto&
it = mediaHandlerToggled_.find(callId);
213 if (
it != mediaHandlerToggled_.end())
222 const std::string&
value,
240 mediaHandlerToggled_.erase(callId);
254 const std::string& callId,
257 auto&
handlers = mediaHandlerToggled_[callId];
260 for (
auto subject : callAVsubjects_[callId]) {
261 auto handlerIt = std::find_if(callMediaHandlers_.begin(),
262 callMediaHandlers_.end(),
264 return ((uintptr_t) handler.get() == mediaHandlerId);
267 if (
handlerIt != callMediaHandlers_.end()) {
273 (*handlerIt)->detach();
284 if (call && !call->isConferenceParticipant()) {
std::shared_ptr< Call > getCall(const std::string &id) const
Return call pointer associated to given ID.Type can optionally be specified.
CallServicesManager(PluginManager &pluginManager)
Constructor registers MediaHandler API services to the PluginManager instance.
void clearAVSubject(const std::string &callId)
Clears all stream subjects related to the callId.
std::vector< std::string > getCallMediaHandlerStatus(const std::string &callId)
Returns a list of active MediaHandlers for a given call.
void toggleCallMediaHandler(const std::string &mediaHandlerId, const std::string &callId, const bool toggle)
(De)Activates a given MediaHandler to a given call.
void clearCallHandlerMaps(const std::string &callId)
Removes call from mediaHandlerToggled_ mapping.
std::map< std::string, std::string > getCallMediaHandlerDetails(const std::string &mediaHandlerIdStr)
Returns details Map from MediaHandler implementation.
void createAVSubject(const StreamData &data, AVSubjectSPtr subject)
Stores a AV stream subject with StreamData properties.
bool setPreference(const std::string &key, const std::string &value, const std::string &rootPath)
Sets a preference that may be changed while MediaHandler is active.
std::vector< std::string > getCallMediaHandlers()
List all MediaHandlers available.
static LIBJAMI_TEST_EXPORT Manager & instance()
This class manages plugin (un)loading.
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 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< CallMediaHandler > CallMediaHandlerPtr
void emitSignal(Args... args)
std::weak_ptr< Observable< AVFrame * > > AVSubjectSPtr
SIPCall are SIP implementation of a normal Call.
Contains information about an AV subject.