/*---------------------------------------------------------*\ | ProfileManager.h | | | | OpenRGB profile manager | | | | Adam Honse 09 Nov 2025 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ #pragma once #include "RGBController.h" #include "filesystem.h" class ProfileManagerInterface { public: virtual void DeleteProfile(std::string profile_name) = 0; virtual std::string GetActiveProfile() = 0; virtual std::vector GetControllerListFromProfile(nlohmann::json profile_json) = 0; virtual std::vector GetControllerListFromSizes() = 0; virtual std::vector GetProfileList() = 0; virtual unsigned char * GetProfileListDescription() = 0; virtual bool LoadControllerFromListWithOptions ( std::vector& temp_controllers, std::vector& temp_controller_used, RGBController* load_controller, bool load_size, bool load_settings ) = 0; virtual bool LoadProfile(std::string profile_name) = 0; virtual nlohmann::json ReadProfileJSON(std::string profile_name) = 0; virtual bool SaveProfile(std::string profile_name) = 0; virtual bool SaveProfileFromJSON(nlohmann::json profile_json) = 0; virtual bool SaveSizes() = 0; virtual void SetConfigurationDirectory(const filesystem::path& directory) = 0; virtual void SetProfileListFromDescription(char * data_buf) = 0; virtual void UpdateProfileList() = 0; protected: virtual ~ProfileManagerInterface() {}; }; class ProfileManager: public ProfileManagerInterface { public: ProfileManager(const filesystem::path& config_dir); ~ProfileManager(); void DeleteProfile(std::string profile_name); std::string GetActiveProfile(); std::vector GetControllerListFromProfile(nlohmann::json profile_json); std::vector GetControllerListFromSizes(); std::vector GetProfileList(); unsigned char * GetProfileListDescription(); bool LoadAutoProfileExit(); bool LoadAutoProfileOpen(); bool LoadAutoProfileResume(); bool LoadAutoProfileSuspend(); bool LoadControllerFromListWithOptions ( std::vector& temp_controllers, std::vector& temp_controller_used, RGBController* load_controller, bool load_size, bool load_settings ); bool LoadProfile(std::string profile_name); nlohmann::json ReadProfileJSON(std::string profile_name); bool SaveProfile(std::string profile_name); bool SaveProfileFromJSON(nlohmann::json profile_json); bool SaveSizes(); void SetConfigurationDirectory(const filesystem::path& directory); void SetProfileListFromDescription(char * data_buf); void UpdateProfileList(); private: /*-----------------------------------------------------*\ | List of available profiles | \*-----------------------------------------------------*/ std::vector profile_list; /*-----------------------------------------------------*\ | Active profile string | \*-----------------------------------------------------*/ std::string active_profile; /*-----------------------------------------------------*\ | Profile paths | \*-----------------------------------------------------*/ filesystem::path configuration_directory; filesystem::path profile_directory; /*-----------------------------------------------------*\ | Private functions | \*-----------------------------------------------------*/ bool LoadAutoProfile(std::string setting_name); bool LoadProfileWithOptions ( std::string profile_name, bool load_size, bool load_settings ); nlohmann::json ReadProfileFileJSON(filesystem::path profile_filepath); };