mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
plugin: exposing plugins to linux ui
Change-Id: I0919a3a78f4066122773a2ee9ab85d8e406e7e8f
This commit is contained in:
@ -4,7 +4,7 @@
|
|||||||
<interface name="cx.ring.Ring.PluginManagerInterface">
|
<interface name="cx.ring.Ring.PluginManagerInterface">
|
||||||
<!-- METHODS !-->
|
<!-- METHODS !-->
|
||||||
<method name="loadPlugin" tp:name-for-bindings="loadPlugin">
|
<method name="loadPlugin" tp:name-for-bindings="loadPlugin">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="loaded" direction="out">
|
<arg type="b" name="loaded" direction="out">
|
||||||
@ -12,7 +12,7 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="unloadPlugin" tp:name-for-bindings="unloadPlugin">
|
<method name="unloadPlugin" tp:name-for-bindings="unloadPlugin">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="unloaded" direction="out">
|
<arg type="b" name="unloaded" direction="out">
|
||||||
@ -20,7 +20,7 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="togglePlugin" tp:name-for-bindings="togglePlugin">
|
<method name="togglePlugin" tp:name-for-bindings="togglePlugin">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="toggle" direction="in">
|
<arg type="b" name="toggle" direction="in">
|
||||||
@ -28,7 +28,8 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="getPluginDetails" tp:name-for-bindings="getPluginDetails">
|
<method name="getPluginDetails" tp:name-for-bindings="getPluginDetails">
|
||||||
<tp:added version="0.0.0"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
@ -37,7 +38,8 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="getPluginPreferences" tp:name-for-bindings="getPluginPreferences">
|
<method name="getPluginPreferences" tp:name-for-bindings="getPluginPreferences">
|
||||||
<tp:added version="0.0.0"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
|
||||||
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
|
||||||
@ -46,7 +48,7 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="setPluginPreference" tp:name-for-bindings="setPluginPreference">
|
<method name="setPluginPreference" tp:name-for-bindings="setPluginPreference">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="s" name="key" direction="in">
|
<arg type="s" name="key" direction="in">
|
||||||
@ -58,7 +60,8 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="getPluginPreferencesValues" tp:name-for-bindings="getPluginPreferencesValues">
|
<method name="getPluginPreferencesValues" tp:name-for-bindings="getPluginPreferencesValues">
|
||||||
<tp:added version="0.0.0"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
@ -67,7 +70,7 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="resetPluginPreferencesValues" tp:name-for-bindings="resetPluginPreferencesValues">
|
<method name="resetPluginPreferencesValues" tp:name-for-bindings="resetPluginPreferencesValues">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="path" direction="in">
|
<arg type="s" name="path" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="reset" direction="out">
|
<arg type="b" name="reset" direction="out">
|
||||||
@ -75,19 +78,19 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="listAvailablePlugins" tp:name-for-bindings="listAvailablePlugins">
|
<method name="listAvailablePlugins" tp:name-for-bindings="listAvailablePlugins">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="as" name="availablePlugins" direction="out">
|
<arg type="as" name="availablePlugins" direction="out">
|
||||||
</arg>
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="listLoadedPlugins" tp:name-for-bindings="listLoadedPlugins">
|
<method name="listLoadedPlugins" tp:name-for-bindings="listLoadedPlugins">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="as" name="LoadedPlugins" direction="out">
|
<arg type="as" name="LoadedPlugins" direction="out">
|
||||||
</arg>
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="installPlugin" tp:name-for-bindings="installPlugin">
|
<method name="installPlugin" tp:name-for-bindings="installPlugin">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="jplPath" direction="in">
|
<arg type="s" name="jplPath" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="force" direction="in">
|
<arg type="b" name="force" direction="in">
|
||||||
@ -97,7 +100,7 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="uninstallPlugin" tp:name-for-bindings="uninstallPlugin">
|
<method name="uninstallPlugin" tp:name-for-bindings="uninstallPlugin">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="pluginRootPath" direction="in">
|
<arg type="s" name="pluginRootPath" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="i" name="uninstaled" direction="out">
|
<arg type="i" name="uninstaled" direction="out">
|
||||||
@ -105,13 +108,13 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="listCallMediaHandlers" tp:name-for-bindings="listCallMediaHandlers">
|
<method name="listCallMediaHandlers" tp:name-for-bindings="listCallMediaHandlers">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="as" name="listCallMediaHandlers" direction="out">
|
<arg type="as" name="listCallMediaHandlers" direction="out">
|
||||||
</arg>
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="toggleCallMediaHandler" tp:name-for-bindings="toggleCallMediaHandler">
|
<method name="toggleCallMediaHandler" tp:name-for-bindings="toggleCallMediaHandler">
|
||||||
<tp:added version="0.0.0"/>
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="id" direction="in">
|
<arg type="s" name="id" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
<arg type="b" name="toggle" direction="in">
|
<arg type="b" name="toggle" direction="in">
|
||||||
@ -119,11 +122,37 @@
|
|||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="getCallMediaHandlerDetails" tp:name-for-bindings="getCallMediaHandlerDetails">
|
<method name="getCallMediaHandlerDetails" tp:name-for-bindings="getCallMediaHandlerDetails">
|
||||||
<tp:added version="0.0.0"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
|
<tp:added version="9.2.0"/>
|
||||||
<arg type="s" name="id" direction="in">
|
<arg type="s" name="id" direction="in">
|
||||||
</arg>
|
</arg>
|
||||||
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
<arg type="a{ss}" name="CallMediaHandlerDetails" direction="out">
|
<arg type="a{ss}" name="CallMediaHandlerDetails" direction="out">
|
||||||
</arg>
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
<method name="getPluginsEnabled" tp:name-for-bindings="getPluginsEnabled">
|
||||||
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="Bool"/>
|
||||||
|
<tp:added version="9.3.0"/>
|
||||||
|
<arg type="b" name="state" direction="out">
|
||||||
|
<tp:docstring>Returns true if plugins are enabled, false otherwise</tp:docstring>
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
<method name="setPluginsEnabled" tp:name-for-bindings="setPluginsEnabled">
|
||||||
|
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="Bool"/>
|
||||||
|
<tp:added version="9.3.0"/>
|
||||||
|
<arg type="b" name="state" direction="in">
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
<method name="getCallMediaHandlerStatus" tp:name-for-bindings="getCallMediaHandlerStatus">
|
||||||
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
|
<tp:added version="9.3.0"/>
|
||||||
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
|
||||||
|
<arg type="a{ss}" name="getCallMediaHandlerStatus" direction="out">
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
*
|
*
|
||||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
@ -97,8 +97,8 @@ DBusPluginManagerInterface::uninstallPlugin(const std::string& pluginRootPath)
|
|||||||
return DRing::uninstallPlugin(pluginRootPath);
|
return DRing::uninstallPlugin(pluginRootPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string>
|
auto
|
||||||
DBusPluginManagerInterface::listCallMediaHandlers( )
|
DBusPluginManagerInterface::listCallMediaHandlers() -> decltype(DRing::listCallMediaHandlers())
|
||||||
{
|
{
|
||||||
return DRing::listCallMediaHandlers();
|
return DRing::listCallMediaHandlers();
|
||||||
}
|
}
|
||||||
@ -114,3 +114,21 @@ DBusPluginManagerInterface::getCallMediaHandlerDetails(const std::string& id)
|
|||||||
{
|
{
|
||||||
return DRing::getCallMediaHandlerDetails(id);
|
return DRing::getCallMediaHandlerDetails(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
DBusPluginManagerInterface::getPluginsEnabled()
|
||||||
|
{
|
||||||
|
return DRing::getPluginsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DBusPluginManagerInterface::setPluginsEnabled(const bool& state)
|
||||||
|
{
|
||||||
|
DRing::setPluginsEnabled(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string,std::string>
|
||||||
|
DBusPluginManagerInterface::getCallMediaHandlerStatus()
|
||||||
|
{
|
||||||
|
return DRing::getCallMediaHandlerStatus();
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
*
|
*
|
||||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
@ -67,4 +67,8 @@ class DRING_PUBLIC DBusPluginManagerInterface :
|
|||||||
std::vector<std::string> listCallMediaHandlers();
|
std::vector<std::string> listCallMediaHandlers();
|
||||||
void toggleCallMediaHandler(const std::string& id, const bool& toggle);
|
void toggleCallMediaHandler(const std::string& id, const bool& toggle);
|
||||||
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
||||||
|
|
||||||
|
bool getPluginsEnabled();
|
||||||
|
void setPluginsEnabled(const bool& state);
|
||||||
|
std::map<std::string,std::string> getCallMediaHandlerStatus();
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* Authors: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
%header %{
|
%header %{
|
||||||
|
|
||||||
#include "dring/dring.h"
|
#include "dring/dring.h"
|
||||||
@ -20,4 +39,7 @@ int uninstallPlugin(const std::string& pluginRootPath);
|
|||||||
std::vector<std::string> listCallMediaHandlers();
|
std::vector<std::string> listCallMediaHandlers();
|
||||||
void toggleCallMediaHandler(const std::string& id, bool toggle);
|
void toggleCallMediaHandler(const std::string& id, bool toggle);
|
||||||
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
||||||
|
bool getPluginsEnabled();
|
||||||
|
void setPluginsEnabled(bool state);
|
||||||
|
std::map<std::string,std::string> getCallMediaHandlerStatus();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ dnl Jami - configure.ac for automake 1.9 and autoconf 2.59
|
|||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_PREREQ([2.65])
|
AC_PREREQ([2.65])
|
||||||
AC_INIT([Jami Daemon],[9.2.0],[ring@gnu.org],[jami])
|
AC_INIT([Jami Daemon],[9.3.0],[ring@gnu.org],[jami])
|
||||||
|
|
||||||
AC_COPYRIGHT([[Copyright (c) Savoir-faire Linux 2004-2019]])
|
AC_COPYRIGHT([[Copyright (c) Savoir-faire Linux 2004-2019]])
|
||||||
AC_REVISION([$Revision$])
|
AC_REVISION([$Revision$])
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -92,4 +94,20 @@ namespace DRing
|
|||||||
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id) {
|
std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id) {
|
||||||
return jami::Manager::instance().getJamiPluginManager().getCallServicesManager().getCallMediaHandlerDetails(id);
|
return jami::Manager::instance().getJamiPluginManager().getCallServicesManager().getCallMediaHandlerDetails(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool getPluginsEnabled()
|
||||||
|
{
|
||||||
|
return jami::Manager::instance().pluginPreferences.getPluginsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPluginsEnabled(bool state)
|
||||||
|
{
|
||||||
|
jami::Manager::instance().pluginPreferences.setPluginsEnabled(state);
|
||||||
|
jami::Manager::instance().saveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string,std::string> getCallMediaHandlerStatus()
|
||||||
|
{
|
||||||
|
return jami::Manager::instance().getJamiPluginManager().getCallServicesManager().getCallMediaHandlerStatus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
||||||
*
|
*
|
||||||
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
* Authors: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
||||||
|
* Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -47,4 +48,15 @@ parseVectorMap(const YAML::Node &node, const std::initializer_list<std::string>
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::set<std::string>
|
||||||
|
parseVector(const YAML::Node &node)
|
||||||
|
{
|
||||||
|
std::set<std::string> result;
|
||||||
|
for (const auto &n : node) {
|
||||||
|
std::string t;
|
||||||
|
t = n.as<std::string>("");
|
||||||
|
result.emplace(t);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}} // namespace jami::yaml_utils
|
}} // namespace jami::yaml_utils
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
||||||
*
|
*
|
||||||
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
* Authors: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
||||||
|
* Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -50,5 +51,6 @@ void parsePath(const YAML::Node &node, const char *key, std::string& path, const
|
|||||||
|
|
||||||
std::vector<std::map<std::string, std::string>>
|
std::vector<std::map<std::string, std::string>>
|
||||||
parseVectorMap(const YAML::Node &node, const std::initializer_list<std::string> &keys);
|
parseVectorMap(const YAML::Node &node, const std::initializer_list<std::string> &keys);
|
||||||
|
std::set<std::string> parseVector(const YAML::Node &node);
|
||||||
|
|
||||||
}} // namespace jami::yaml_utils
|
}} // namespace jami::yaml_utils
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -47,5 +49,7 @@ namespace DRing
|
|||||||
DRING_PUBLIC std::vector<std::string> listCallMediaHandlers();
|
DRING_PUBLIC std::vector<std::string> listCallMediaHandlers();
|
||||||
DRING_PUBLIC void toggleCallMediaHandler(const std::string& id, bool toggle);
|
DRING_PUBLIC void toggleCallMediaHandler(const std::string& id, bool toggle);
|
||||||
DRING_PUBLIC std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
DRING_PUBLIC std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id);
|
||||||
|
DRING_PUBLIC bool getPluginsEnabled();
|
||||||
|
DRING_PUBLIC void setPluginsEnabled(bool state);
|
||||||
|
DRING_PUBLIC std::map<std::string,std::string> getCallMediaHandlerStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -698,6 +698,9 @@ Manager::Manager()
|
|||||||
, shortcutPreferences()
|
, shortcutPreferences()
|
||||||
#ifdef ENABLE_VIDEO
|
#ifdef ENABLE_VIDEO
|
||||||
, videoPreferences()
|
, videoPreferences()
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
, pluginPreferences()
|
||||||
#endif
|
#endif
|
||||||
, callFactory()
|
, callFactory()
|
||||||
, accountFactory()
|
, accountFactory()
|
||||||
@ -1701,6 +1704,9 @@ Manager::saveConfig()
|
|||||||
audioPreference.serialize(out);
|
audioPreference.serialize(out);
|
||||||
#ifdef ENABLE_VIDEO
|
#ifdef ENABLE_VIDEO
|
||||||
videoPreferences.serialize(out);
|
videoPreferences.serialize(out);
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
pluginPreferences.serialize(out);
|
||||||
#endif
|
#endif
|
||||||
shortcutPreferences.serialize(out);
|
shortcutPreferences.serialize(out);
|
||||||
|
|
||||||
@ -2755,6 +2761,15 @@ Manager::loadAccountMap(const YAML::Node& node)
|
|||||||
shortcutPreferences.unserialize(node);
|
shortcutPreferences.unserialize(node);
|
||||||
#ifdef ENABLE_VIDEO
|
#ifdef ENABLE_VIDEO
|
||||||
videoPreferences.unserialize(node);
|
videoPreferences.unserialize(node);
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
pluginPreferences.unserialize(node);
|
||||||
|
|
||||||
|
std::vector<std::string> loadedPlugins = pluginPreferences.getLoadedPlugins();
|
||||||
|
for (const std::string& plugin : loadedPlugins)
|
||||||
|
{
|
||||||
|
jami::Manager::instance().getJamiPluginManager().loadPlugin(plugin);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
} catch (const YAML::Exception &e) {
|
} catch (const YAML::Exception &e) {
|
||||||
JAMI_ERR("%s: Preferences node unserialize error: ", e.what());
|
JAMI_ERR("%s: Preferences node unserialize error: ", e.what());
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
||||||
* Author: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
|
* Author: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
|
||||||
* Author: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
|
* Author: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -99,6 +100,13 @@ class DRING_TESTABLE Manager {
|
|||||||
*/
|
*/
|
||||||
ShortcutPreferences shortcutPreferences;
|
ShortcutPreferences shortcutPreferences;
|
||||||
|
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
/**
|
||||||
|
* Plugin preferences
|
||||||
|
*/
|
||||||
|
PluginPreferences pluginPreferences;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_VIDEO
|
#ifdef ENABLE_VIDEO
|
||||||
/**
|
/**
|
||||||
* Video preferences
|
* Video preferences
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2019 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -31,6 +33,12 @@ using MediaHandlerPtr = std::unique_ptr<MediaHandler>;
|
|||||||
using CallMediaHandlerPtr = std::unique_ptr<CallMediaHandler>;
|
using CallMediaHandlerPtr = std::unique_ptr<CallMediaHandler>;
|
||||||
using AVSubjectSPtr = std::weak_ptr<Observable<AVFrame*>>;
|
using AVSubjectSPtr = std::weak_ptr<Observable<AVFrame*>>;
|
||||||
|
|
||||||
|
struct MediaHandlerToggled
|
||||||
|
{
|
||||||
|
std::string name = "";
|
||||||
|
std::string state = "false";
|
||||||
|
};
|
||||||
|
|
||||||
class CallServicesManager{
|
class CallServicesManager{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -132,9 +140,13 @@ public:
|
|||||||
if(pair.second && getCallHandlerId(pair.second) == id) {
|
if(pair.second && getCallHandlerId(pair.second) == id) {
|
||||||
pair.first = toggle;
|
pair.first = toggle;
|
||||||
if(pair.first) {
|
if(pair.first) {
|
||||||
|
mediaHandlerToggled_.name = id;
|
||||||
|
mediaHandlerToggled_.state = "true";
|
||||||
listAvailableSubjects(pair.second);
|
listAvailableSubjects(pair.second);
|
||||||
} else {
|
} else {
|
||||||
pair.second->detach();
|
pair.second->detach();
|
||||||
|
mediaHandlerToggled_.name = "";
|
||||||
|
mediaHandlerToggled_.state = "false";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,6 +167,11 @@ public:
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::map<std::string,std::string> getCallMediaHandlerStatus()
|
||||||
|
{
|
||||||
|
return { {"name", mediaHandlerToggled_.name}, {"state", mediaHandlerToggled_.state}};
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -213,6 +230,8 @@ private:
|
|||||||
* It is pushed to this list list
|
* It is pushed to this list list
|
||||||
*/
|
*/
|
||||||
std::list<std::pair<const StreamData, AVSubjectSPtr>> callAVsubjects;
|
std::list<std::pair<const StreamData, AVSubjectSPtr>> callAVsubjects;
|
||||||
|
|
||||||
|
MediaHandlerToggled mediaHandlerToggled_;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
//Manager
|
//Manager
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
|
#include "preferences.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <archive.h>
|
#include <archive.h>
|
||||||
@ -269,6 +270,8 @@ bool JamiPluginManager::loadPlugin(const std::string &rootPath)
|
|||||||
bool status = pm_.load(getPluginDetails(rootPath).at("soPath"));
|
bool status = pm_.load(getPluginDetails(rootPath).at("soPath"));
|
||||||
JAMI_INFO() << "PLUGIN: load status - " << status;
|
JAMI_INFO() << "PLUGIN: load status - " << status;
|
||||||
|
|
||||||
|
jami::Manager::instance().pluginPreferences.saveStateLoadedPlugins(rootPath, status);
|
||||||
|
jami::Manager::instance().saveConfig();
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
} catch(const std::exception& e)
|
} catch(const std::exception& e)
|
||||||
@ -285,6 +288,9 @@ bool JamiPluginManager::unloadPlugin(const std::string &rootPath)
|
|||||||
bool status = pm_.unload(getPluginDetails(rootPath).at("soPath"));
|
bool status = pm_.unload(getPluginDetails(rootPath).at("soPath"));
|
||||||
JAMI_INFO() << "PLUGIN: unload status - " << status;
|
JAMI_INFO() << "PLUGIN: unload status - " << status;
|
||||||
|
|
||||||
|
jami::Manager::instance().pluginPreferences.saveStateLoadedPlugins(rootPath, false);
|
||||||
|
jami::Manager::instance().saveConfig();
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
} catch(const std::exception& e)
|
} catch(const std::exception& e)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
|
* Copyright (C) 2020 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
||||||
* Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
|
* Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -146,6 +147,13 @@ static constexpr const char* RECORD_PREVIEW_KEY {"recordPreview"};
|
|||||||
static constexpr const char* RECORD_QUALITY_KEY {"recordQuality"};
|
static constexpr const char* RECORD_QUALITY_KEY {"recordQuality"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
// plugin preferences
|
||||||
|
constexpr const char * const PluginPreferences::CONFIG_LABEL;
|
||||||
|
static constexpr const char* JAMI_PLUGIN_KEY {"pluginsEnabled"};
|
||||||
|
static constexpr const char* JAMI_PLUGINS_LOADED_KEY {"loadedPlugins"};
|
||||||
|
#endif
|
||||||
|
|
||||||
static constexpr int PULSE_LENGTH_DEFAULT {250}; /** Default DTMF length */
|
static constexpr int PULSE_LENGTH_DEFAULT {250}; /** Default DTMF length */
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
static constexpr const char* ALSA_DFT_CARD {"0"}; /** Default sound card index */
|
static constexpr const char* ALSA_DFT_CARD {"0"}; /** Default sound card index */
|
||||||
@ -641,4 +649,36 @@ void VideoPreferences::unserialize(const YAML::Node &in)
|
|||||||
}
|
}
|
||||||
#endif // ENABLE_VIDEO
|
#endif // ENABLE_VIDEO
|
||||||
|
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
PluginPreferences::PluginPreferences()
|
||||||
|
: pluginsEnabled_(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void PluginPreferences::serialize(YAML::Emitter &out) const
|
||||||
|
{
|
||||||
|
out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
|
||||||
|
out << YAML::Key << JAMI_PLUGIN_KEY << YAML::Value << pluginsEnabled_;
|
||||||
|
out << YAML::Key << JAMI_PLUGINS_LOADED_KEY << YAML::Value << loadedPlugins_;
|
||||||
|
out << YAML::EndMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginPreferences::unserialize(const YAML::Node &in)
|
||||||
|
{
|
||||||
|
// values may or may not be present
|
||||||
|
const auto &node = in[CONFIG_LABEL];
|
||||||
|
try {
|
||||||
|
parseValue(node, JAMI_PLUGIN_KEY, pluginsEnabled_);
|
||||||
|
} catch (...) {
|
||||||
|
pluginsEnabled_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &loadedPluginsNode = node[JAMI_PLUGINS_LOADED_KEY];
|
||||||
|
try {
|
||||||
|
loadedPlugins_ = yaml_utils::parseVector(loadedPluginsNode);
|
||||||
|
} catch (...) {
|
||||||
|
// loadedPlugins_ = {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // ENABLE_PLUGIN
|
||||||
|
|
||||||
} // namespace jami
|
} // namespace jami
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
|
||||||
* Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
|
* Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
|
||||||
|
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#include "client/ring_signal.h"
|
#include "client/ring_signal.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace YAML {
|
namespace YAML {
|
||||||
@ -522,6 +524,46 @@ class VideoPreferences : public Serializable {
|
|||||||
};
|
};
|
||||||
#endif // ENABLE_VIDEO
|
#endif // ENABLE_VIDEO
|
||||||
|
|
||||||
|
#ifdef ENABLE_PLUGIN
|
||||||
|
class PluginPreferences : public Serializable {
|
||||||
|
public:
|
||||||
|
PluginPreferences();
|
||||||
|
|
||||||
|
void serialize(YAML::Emitter &out) const override;
|
||||||
|
void unserialize(const YAML::Node &in) override;
|
||||||
|
|
||||||
|
bool getPluginsEnabled() const {
|
||||||
|
return pluginsEnabled_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPluginsEnabled(bool pluginsEnabled) {
|
||||||
|
pluginsEnabled_ = pluginsEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> getLoadedPlugins() const {
|
||||||
|
std::vector<std::string> v(loadedPlugins_.begin(), loadedPlugins_.end());
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveStateLoadedPlugins(std::string plugin, bool loaded) {
|
||||||
|
if (loaded) {
|
||||||
|
if (loadedPlugins_.find(plugin) != loadedPlugins_.end()) return;
|
||||||
|
loadedPlugins_.emplace(plugin);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
auto it = loadedPlugins_.find(plugin);
|
||||||
|
if (it != loadedPlugins_.end())
|
||||||
|
loadedPlugins_.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool pluginsEnabled_;
|
||||||
|
std::set<std::string> loadedPlugins_;
|
||||||
|
constexpr static const char* const CONFIG_LABEL = "plugins";
|
||||||
|
};
|
||||||
|
#endif // ENABLE_PLUGIN
|
||||||
|
|
||||||
} // namespace jami
|
} // namespace jami
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user