LunaHook-mirror/LunaHost/GUI/pluginmanager.h

76 lines
2.0 KiB
C
Raw Normal View History

2024-02-08 19:12:20 +08:00
#ifndef LUNA_PLUGINMANAGER_H
#define LUNA_PLUGINMANAGER_H
2024-07-21 19:28:47 +08:00
#include "Plugin/extension.h"
#include "textthread.h"
#include <nlohmann/json.hpp>
2024-02-08 19:12:20 +08:00
class LunaHost;
class confighelper;
2024-07-21 19:28:47 +08:00
enum class addpluginresult
{
2024-03-29 15:57:38 +08:00
success,
invaliddll,
isnotaplugins,
dumplicate
};
2024-07-21 19:28:47 +08:00
struct pluginitem
{
std::string path;
bool isQt;
bool isref;
bool enable;
2024-04-24 09:04:02 +08:00
bool vissetting;
2024-07-21 19:28:47 +08:00
pluginitem(const nlohmann::json &);
pluginitem(const std::wstring &, bool);
std::wstring wpath();
nlohmann::json dump() const;
};
2024-04-24 09:04:02 +08:00
class Pluginmanager;
2024-07-21 19:28:47 +08:00
struct plugindata
{
typedef wchar_t *(*OnNewSentence_t)(wchar_t *, const InfoForExtension *);
2024-04-24 09:04:02 +08:00
typedef void (*VisSetting_t)(bool);
std::wstring refpath;
bool isQt;
2024-04-23 20:01:57 +08:00
OnNewSentence_t OnNewSentence;
2024-04-24 09:04:02 +08:00
VisSetting_t VisSetting;
HMODULE hmodule;
2024-04-23 20:01:57 +08:00
void clear();
plugindata(){};
2024-07-21 19:28:47 +08:00
plugindata(const std::wstring &, Pluginmanager *, bool, HMODULE);
2024-04-24 09:04:02 +08:00
bool valid();
2024-07-21 19:28:47 +08:00
void initstatus(const pluginitem &);
};
2024-07-21 19:28:47 +08:00
class Pluginmanager
{
std::unordered_map<std::wstring, plugindata> OnNewSentenceS;
2024-02-08 16:18:33 +08:00
concurrency::reader_writer_lock OnNewSentenceSLock;
2024-07-21 19:28:47 +08:00
bool checkisdump(const std::wstring &);
confighelper *configs;
LunaHost *host;
std::array<InfoForExtension, 20> GetSentenceInfo(TextThread &thread);
void loadqtdlls(std::vector<std::wstring> &collectQtplugs);
2024-02-08 16:18:33 +08:00
public:
2024-07-21 19:28:47 +08:00
Pluginmanager(LunaHost *);
bool dispatch(TextThread &, std::wstring &sentence);
addpluginresult addplugin(const std::wstring &);
std::optional<std::wstring> selectpluginfile();
pluginitem get(int);
2024-07-21 19:28:47 +08:00
std::optional<pluginitem> get(const std::wstring &);
std::wstring getname(int);
bool getenable(int);
2024-07-21 19:28:47 +08:00
void set(int, const pluginitem &);
void setenable(int, bool);
int count();
2024-07-21 19:28:47 +08:00
void add(const pluginitem &);
void remove(const std::wstring &);
void unload(const std::wstring &);
addpluginresult load(const std::wstring &, bool *isqt = 0);
void swaprank(int, int);
2024-04-24 09:04:02 +08:00
bool getvisible(int);
bool getvisible_setable(int);
2024-07-21 19:28:47 +08:00
void setvisible(int, bool);
2024-02-08 16:18:33 +08:00
};
2024-02-08 19:12:20 +08:00
#endif