/****************************************************************************** Copyright (C) 2025 by FiniteSingularity 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 2 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 . ******************************************************************************/ #pragma once #include #include #include #include namespace OBS { struct ModuleInfo { std::string display_name; std::string module_name; std::string id; std::string version; bool enabled; bool enabledAtLaunch; std::vector sources; std::vector outputs; std::vector encoders; std::vector services; std::vector sourcesLoaded; std::vector outputsLoaded; std::vector encodersLoaded; std::vector servicesLoaded; }; class PluginManager { private: std::vector modules_ = {}; std::vector disabledSources_ = {}; std::vector disabledOutputs_ = {}; std::vector disabledServices_ = {}; std::vector disabledEncoders_ = {}; std::filesystem::path getConfigFilePath_(); void loadModules_(); void saveModules_(); void disableModules_(); void addModuleTypes_(); void linkUnloadedModules_(); public: void preLoad(); void postLoad(); void open(); friend void addModuleToPluginManagerImpl(void *param, obs_module_t *newModule); }; void addModuleToPluginManagerImpl(void *param, obs_module_t *newModule); }; // namespace OBS // Anonymous namespace function to add module to plugin manager // via libobs's module enumeration. namespace { inline void addModuleToPluginManager(void *param, obs_module_t *newModule) { OBS::addModuleToPluginManagerImpl(param, newModule); } } // namespace