From 51b101998a48c5d8705a14713c3b3e14607bd434 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 19 Dec 2022 14:46:58 -0500
Subject: [PATCH] plugin: allow to build the plugin API without plugin support

Allows to have a unified daemon API/ABI with optional features

Change-Id: I7db8bd2aa294af1d389cb1fc43445b734e2570d2
---
 src/client/plugin_manager_interface.cpp | 74 +++++++++++++++++++++++--
 1 file changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/client/plugin_manager_interface.cpp b/src/client/plugin_manager_interface.cpp
index e5c148c33a..2d58440180 100644
--- a/src/client/plugin_manager_interface.cpp
+++ b/src/client/plugin_manager_interface.cpp
@@ -19,42 +19,55 @@
  */
 
 #include "plugin_manager_interface.h"
+
+#ifdef ENABLE_PLUGIN
 #include "manager.h"
 #include "plugin/jamipluginmanager.h"
-#include "logger.h"
-#include <iostream>
+#endif
 
 namespace libjami {
 bool
 loadPlugin(const std::string& path)
 {
+#ifdef ENABLE_PLUGIN
     bool status = jami::Manager::instance().getJamiPluginManager().loadPlugin(path);
 
     jami::Manager::instance().pluginPreferences.saveStateLoadedPlugins(path, status);
     jami::Manager::instance().saveConfig();
     return status;
+#endif
+    return false;
 }
 
 bool
 unloadPlugin(const std::string& path)
 {
+#ifdef ENABLE_PLUGIN
     bool status = jami::Manager::instance().getJamiPluginManager().unloadPlugin(path);
 
     jami::Manager::instance().pluginPreferences.saveStateLoadedPlugins(path, false);
     jami::Manager::instance().saveConfig();
     return status;
+#endif
+    return false;
 }
 
 std::map<std::string, std::string>
 getPluginDetails(const std::string& path)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().getPluginDetails(path);
+#endif
+    return {};
 }
 
 std::vector<std::map<std::string, std::string>>
 getPluginPreferences(const std::string& path, const std::string& accountId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().getPluginPreferences(path, accountId);
+#endif
+    return {};
 }
 
 bool
@@ -63,78 +76,106 @@ setPluginPreference(const std::string& path,
                     const std::string& key,
                     const std::string& value)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().setPluginPreference(path,
                                                                                 accountId,
                                                                                 key,
                                                                                 value);
+#endif
+    return {};
 }
 
 std::map<std::string, std::string>
 getPluginPreferencesValues(const std::string& path, const std::string& accountId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().getPluginPreferencesValuesMap(path,
                                                                                           accountId);
+#endif
+    return {};
 }
 bool
 resetPluginPreferencesValues(const std::string& path, const std::string& accountId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .resetPluginPreferencesValuesMap(path, accountId);
+#endif
 }
 
 std::vector<std::string>
 getInstalledPlugins()
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().getInstalledPlugins();
+#endif
+    return {};
 }
 
 std::vector<std::string>
 getLoadedPlugins()
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().pluginPreferences.getLoadedPlugins();
+#endif
+    return {};
 }
 
 int
 installPlugin(const std::string& jplPath, bool force)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().getJamiPluginManager().installPlugin(jplPath, force);
+#endif
+    return -1;
 }
 
 int
 uninstallPlugin(const std::string& pluginRootPath)
 {
+#ifdef ENABLE_PLUGIN
     int status = jami::Manager::instance().getJamiPluginManager().uninstallPlugin(pluginRootPath);
     jami::Manager::instance().pluginPreferences.saveStateLoadedPlugins(pluginRootPath, false);
     jami::Manager::instance().saveConfig();
     return status;
+#endif
+    return -1;
 }
 
 std::vector<std::string>
 getCallMediaHandlers()
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getCallServicesManager()
         .getCallMediaHandlers();
+#endif
+    return {};
 }
 
 std::vector<std::string>
 getChatHandlers()
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getChatServicesManager()
         .getChatHandlers();
+#endif
+    return {};
 }
 
 void
 toggleCallMediaHandler(const std::string& mediaHandlerId, const std::string& callId, bool toggle)
 {
-    return jami::Manager::instance()
+#ifdef ENABLE_PLUGIN
+    jami::Manager::instance()
         .getJamiPluginManager()
         .getCallServicesManager()
         .toggleCallMediaHandler(mediaHandlerId, callId, toggle);
+#endif
 }
 
 void
@@ -143,57 +184,75 @@ toggleChatHandler(const std::string& chatHandlerId,
                   const std::string& peerId,
                   bool toggle)
 {
-    return jami::Manager::instance()
+#ifdef ENABLE_PLUGIN
+    jami::Manager::instance()
         .getJamiPluginManager()
         .getChatServicesManager()
         .toggleChatHandler(chatHandlerId, accountId, peerId, toggle);
+#endif
 }
 
 std::map<std::string, std::string>
 getCallMediaHandlerDetails(const std::string& mediaHandlerId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getCallServicesManager()
         .getCallMediaHandlerDetails(mediaHandlerId);
+#endif
+    return {};
 }
 
 std::vector<std::string>
 getCallMediaHandlerStatus(const std::string& callId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getCallServicesManager()
         .getCallMediaHandlerStatus(callId);
+#endif
+    return {};
 }
 
 std::map<std::string, std::string>
 getChatHandlerDetails(const std::string& chatHandlerId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getChatServicesManager()
         .getChatHandlerDetails(chatHandlerId);
+#endif
+    return {};
 }
 
 std::vector<std::string>
 getChatHandlerStatus(const std::string& accountId, const std::string& peerId)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getChatServicesManager()
         .getChatHandlerStatus(accountId, peerId);
+#endif
+    return {};
 }
 
 bool
 getPluginsEnabled()
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance().pluginPreferences.getPluginsEnabled();
+#endif
+    return false;
 }
 
 void
 setPluginsEnabled(bool state)
 {
+#ifdef ENABLE_PLUGIN
     jami::Manager::instance().pluginPreferences.setPluginsEnabled(state);
     for (auto& item : jami::Manager::instance().pluginPreferences.getLoadedPlugins()) {
         if (state)
@@ -202,6 +261,7 @@ setPluginsEnabled(bool state)
             jami::Manager::instance().getJamiPluginManager().unloadPlugin(item);
     }
     jami::Manager::instance().saveConfig();
+#endif
 }
 
 void
@@ -210,10 +270,12 @@ sendWebViewMessage(const std::string& pluginId,
                    const std::string& messageId,
                    const std::string& payload)
 {
+#ifdef ENABLE_PLUGIN
     jami::Manager::instance()
         .getJamiPluginManager()
         .getWebViewServicesManager()
         .sendWebViewMessage(pluginId, webViewId, messageId, payload);
+#endif
 }
 
 std::string
@@ -222,18 +284,22 @@ sendWebViewAttach(const std::string& pluginId,
                   const std::string& webViewId,
                   const std::string& action)
 {
+#ifdef ENABLE_PLUGIN
     return jami::Manager::instance()
         .getJamiPluginManager()
         .getWebViewServicesManager()
         .sendWebViewAttach(pluginId, accountId, webViewId, action);
+#endif
 }
 
 void
 sendWebViewDetach(const std::string& pluginId, const std::string& webViewId)
 {
+#ifdef ENABLE_PLUGIN
     jami::Manager::instance()
         .getJamiPluginManager()
         .getWebViewServicesManager()
         .sendWebViewDetach(pluginId, webViewId);
+#endif
 }
 } // namespace libjami
-- 
GitLab