37 callMediaHandlers_.clear();
38 callAVsubjects_.clear();
39 mediaHandlerToggled_.clear();
45 auto predicate = [&data](
const std::pair<const StreamData, AVSubjectSPtr>&
item) {
52 callAVsubjects_[data.
id].emplace_back(data,
subject);
86 callAVsubjects_.erase(callId);
102 ptr->id().substr(0, found));
103 callMediaHandlers_.emplace_back(std::move(
ptr));
110 auto handlerIt = std::find_if(callMediaHandlers_.begin(),
111 callMediaHandlers_.end(),
114 if (
handlerIt != callMediaHandlers_.end()) {
119 return handlerIdPair.first == (uintptr_t) handlerIt->get()
120 && handlerIdPair.second;
135std::vector<std::string>
138 std::vector<std::string>
res;
139 res.reserve(callMediaHandlers_.size());
148 const std::string& callId,
153 }
catch (
const std::exception&
e) {
154 JAMI_ERR(
"Error toggling media handler: %s",
e.what());
158std::map<std::string, std::string>
175 const auto&
it =
details.find(
"dataType");
178 std::istringstream(
it->second) >> status;
191 const auto&
it =
details.find(
"attached");
194 std::istringstream(
it->second) >> status;
200std::vector<std::string>
203 std::vector<std::string>
ret;
204 const auto&
it = mediaHandlerToggled_.find(callId);
205 if (
it != mediaHandlerToggled_.end())
230 mediaHandlerToggled_.erase(callId);
245 auto&
handlers = mediaHandlerToggled_[callId];
248 for (
auto subject : callAVsubjects_[callId]) {
249 auto handlerIt = std::find_if(callMediaHandlers_.begin(),
250 callMediaHandlers_.end(),
252 return ((uintptr_t) handler.get() == mediaHandlerId);
255 if (
handlerIt != callMediaHandlers_.end()) {
261 (*handlerIt)->detach();
272 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.