feat: 初步增加插件系统 API 监视功能;

This commit is contained in:
寂静的羽夏 2025-06-22 22:37:30 +08:00
parent 44f25c0ef3
commit fd53521b3a
7 changed files with 1009 additions and 179 deletions

View File

@ -306,12 +306,12 @@
<location filename="../testplugin.cpp" line="423"/>
<location filename="../testplugin.cpp" line="430"/>
<location filename="../testplugin.cpp" line="438"/>
<location filename="../testplugin.cpp" line="469"/>
<location filename="../testplugin.cpp" line="477"/>
<location filename="../testplugin.cpp" line="485"/>
<location filename="../testplugin.cpp" line="493"/>
<location filename="../testplugin.cpp" line="502"/>
<location filename="../testplugin.cpp" line="509"/>
<location filename="../testplugin.cpp" line="467"/>
<location filename="../testplugin.cpp" line="475"/>
<location filename="../testplugin.cpp" line="483"/>
<location filename="../testplugin.cpp" line="491"/>
<location filename="../testplugin.cpp" line="500"/>
<location filename="../testplugin.cpp" line="507"/>
<source>InvalidParamsCount</source>
<translation></translation>
</message>
@ -322,7 +322,7 @@
<translation></translation>
</message>
<message>
<location filename="../testplugin.cpp" line="460"/>
<location filename="../testplugin.cpp" line="458"/>
<source>AllocArrayFailed</source>
<translation></translation>
</message>

View File

@ -438,23 +438,21 @@ TestPlugin::colorTable(const QList<void *> &params) {
return generateScriptCallError(-1, tr("InvalidParamsCount"));
}
void *array;
void *array = nullptr;
QVector<void *> colors;
for (auto &c : colorTable()) {
colors.append(new QColor(c));
}
// TODO
// auto invoked =
// invokeService(QStringLiteral("WingAngelAPI"), "vector2AsArray",
// WINGAPI_RETURN_ARG(array),
// WINGAPI_ARG(MetaType::Color), WINGAPI_ARG(colors));
// if (invoked) {
// if (array) {
// qDeleteAll(colors);
// return array;
// }
// }
auto invoked =
invokeService(QStringLiteral("WingAngelAPI"), "vector2AsArray",
qReturnArg(array), MetaType::Color, colors);
if (invoked) {
if (array) {
qDeleteAll(colors);
return array;
}
}
qDeleteAll(colors);
return generateScriptCallError(-2, tr("AllocArrayFailed"));

@ -1 +1 @@
Subproject commit 8541087abd410facd5559038f67949a58a39aa50
Subproject commit 2c7f2af9d42211d9c2a7eaaa47b10bcfe86adfbd

View File

@ -2285,195 +2285,200 @@
<context>
<name>PluginSystem</name>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2295"/>
<location filename="../../src/class/pluginsystem.cpp" line="3089"/>
<source>LoadingPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2313"/>
<location filename="../../src/class/pluginsystem.cpp" line="3107"/>
<source>InvalidPluginBrokenInfo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2746"/>
<location filename="../../src/class/pluginsystem.cpp" line="3540"/>
<source>AppClosingCanceled:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2823"/>
<location filename="../../src/class/pluginsystem.cpp" line="3617"/>
<source>- PluginID:</source>
<translation>- ID</translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2845"/>
<location filename="../../src/class/pluginsystem.cpp" line="3639"/>
<source>FoundDrvPluginCount</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2910"/>
<location filename="../../src/class/pluginsystem.cpp" line="3680"/>
<source>PluginManagerNeedSingleton</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3738"/>
<source>RegisterScriptFnUnSupportedTypes:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2920"/>
<location filename="../../src/class/pluginsystem.cpp" line="2988"/>
<location filename="../../src/class/pluginsystem.cpp" line="3748"/>
<location filename="../../src/class/pluginsystem.cpp" line="3816"/>
<source>RegisterScriptFnInvalidSig:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2928"/>
<location filename="../../src/class/pluginsystem.cpp" line="2996"/>
<location filename="../../src/class/pluginsystem.cpp" line="3756"/>
<location filename="../../src/class/pluginsystem.cpp" line="3824"/>
<source>RegisterScriptFnConflitSig:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3047"/>
<location filename="../../src/class/pluginsystem.cpp" line="3875"/>
<source>InvalidEnumName:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3057"/>
<location filename="../../src/class/pluginsystem.cpp" line="3885"/>
<source>InvalidEnumValue:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3092"/>
<location filename="../../src/class/pluginsystem.cpp" line="3920"/>
<source>InvalidMarcosRegister:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3337"/>
<location filename="../../src/class/pluginsystem.cpp" line="4164"/>
<source>ErrLoadPluginSDKVersion</source>
<translation> SDK </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3341"/>
<location filename="../../src/class/pluginsystem.cpp" line="4168"/>
<source>ErrLoadPluginNoName</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3362"/>
<location filename="../../src/class/pluginsystem.cpp" line="4189"/>
<source>ErrLoadInitPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3369"/>
<location filename="../../src/class/pluginsystem.cpp" line="4196"/>
<source>PluginName :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3370"/>
<location filename="../../src/class/pluginsystem.cpp" line="4197"/>
<source>PluginAuthor :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3371"/>
<location filename="../../src/class/pluginsystem.cpp" line="4198"/>
<source>PluginWidgetRegister</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3475"/>
<location filename="../../src/class/pluginsystem.cpp" line="4302"/>
<source>ErrLoadExtPluginSDKVersion</source>
<translation> SDK </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3478"/>
<location filename="../../src/class/pluginsystem.cpp" line="4305"/>
<source>ExtPluginAuthor :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3479"/>
<location filename="../../src/class/pluginsystem.cpp" line="4306"/>
<source>ExtPluginWidgetRegister</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3495"/>
<location filename="../../src/class/pluginsystem.cpp" line="4322"/>
<source>ErrLoadInitExtPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3520"/>
<location filename="../../src/class/pluginsystem.cpp" line="4347"/>
<source>ChooseFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3527"/>
<location filename="../../src/class/pluginsystem.cpp" line="3532"/>
<location filename="../../src/class/pluginsystem.cpp" line="4354"/>
<location filename="../../src/class/pluginsystem.cpp" line="4359"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3528"/>
<location filename="../../src/class/pluginsystem.cpp" line="4355"/>
<source>FileNotExist</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3533"/>
<location filename="../../src/class/pluginsystem.cpp" line="4360"/>
<source>FilePermission</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3563"/>
<location filename="../../src/class/pluginsystem.cpp" line="4390"/>
<source>EmptyNameDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3573"/>
<location filename="../../src/class/pluginsystem.cpp" line="4400"/>
<source>InvalidNameDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3581"/>
<location filename="../../src/class/pluginsystem.cpp" line="4408"/>
<source>InvalidNullDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3648"/>
<location filename="../../src/class/pluginsystem.cpp" line="4475"/>
<source>Not allowed operation in non-UI thread</source>
<translation> UI 线</translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2871"/>
<location filename="../../src/class/pluginsystem.cpp" line="3665"/>
<source>UnsafePluginDir</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2320"/>
<location filename="../../src/class/pluginsystem.cpp" line="3114"/>
<source>InvalidPluginID</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2323"/>
<location filename="../../src/class/pluginsystem.cpp" line="3117"/>
<source>InvalidDupPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2788"/>
<location filename="../../src/class/pluginsystem.cpp" line="3582"/>
<source>FoundPluginCount</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2819"/>
<location filename="../../src/class/pluginsystem.cpp" line="3613"/>
<source>PluginLoadingFailedSummary</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2824"/>
<location filename="../../src/class/pluginsystem.cpp" line="3618"/>
<source>- Dependencies:</source>
<translation>- </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2826"/>
<location filename="../../src/class/pluginsystem.cpp" line="3620"/>
<source>PUID:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2827"/>
<location filename="../../src/class/pluginsystem.cpp" line="3621"/>
<source>Version:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2834"/>
<location filename="../../src/class/pluginsystem.cpp" line="3628"/>
<source>PluginLoadingFinished</source>
<translation></translation>
</message>

View File

@ -2285,195 +2285,200 @@
<context>
<name>PluginSystem</name>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2295"/>
<location filename="../../src/class/pluginsystem.cpp" line="3089"/>
<source>LoadingPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2313"/>
<location filename="../../src/class/pluginsystem.cpp" line="3107"/>
<source>InvalidPluginBrokenInfo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2746"/>
<location filename="../../src/class/pluginsystem.cpp" line="3540"/>
<source>AppClosingCanceled:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2823"/>
<location filename="../../src/class/pluginsystem.cpp" line="3617"/>
<source>- PluginID:</source>
<translation>- ID</translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2845"/>
<location filename="../../src/class/pluginsystem.cpp" line="3639"/>
<source>FoundDrvPluginCount</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2910"/>
<location filename="../../src/class/pluginsystem.cpp" line="3680"/>
<source>PluginManagerNeedSingleton</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3738"/>
<source>RegisterScriptFnUnSupportedTypes:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2920"/>
<location filename="../../src/class/pluginsystem.cpp" line="2988"/>
<location filename="../../src/class/pluginsystem.cpp" line="3748"/>
<location filename="../../src/class/pluginsystem.cpp" line="3816"/>
<source>RegisterScriptFnInvalidSig:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2928"/>
<location filename="../../src/class/pluginsystem.cpp" line="2996"/>
<location filename="../../src/class/pluginsystem.cpp" line="3756"/>
<location filename="../../src/class/pluginsystem.cpp" line="3824"/>
<source>RegisterScriptFnConflitSig:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3047"/>
<location filename="../../src/class/pluginsystem.cpp" line="3875"/>
<source>InvalidEnumName:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3057"/>
<location filename="../../src/class/pluginsystem.cpp" line="3885"/>
<source>InvalidEnumValue:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3092"/>
<location filename="../../src/class/pluginsystem.cpp" line="3920"/>
<source>InvalidMarcosRegister:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3337"/>
<location filename="../../src/class/pluginsystem.cpp" line="4164"/>
<source>ErrLoadPluginSDKVersion</source>
<translation> SDK </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3341"/>
<location filename="../../src/class/pluginsystem.cpp" line="4168"/>
<source>ErrLoadPluginNoName</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3362"/>
<location filename="../../src/class/pluginsystem.cpp" line="4189"/>
<source>ErrLoadInitPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3369"/>
<location filename="../../src/class/pluginsystem.cpp" line="4196"/>
<source>PluginName :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3370"/>
<location filename="../../src/class/pluginsystem.cpp" line="4197"/>
<source>PluginAuthor :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3371"/>
<location filename="../../src/class/pluginsystem.cpp" line="4198"/>
<source>PluginWidgetRegister</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3475"/>
<location filename="../../src/class/pluginsystem.cpp" line="4302"/>
<source>ErrLoadExtPluginSDKVersion</source>
<translation> SDK </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3478"/>
<location filename="../../src/class/pluginsystem.cpp" line="4305"/>
<source>ExtPluginAuthor :</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3479"/>
<location filename="../../src/class/pluginsystem.cpp" line="4306"/>
<source>ExtPluginWidgetRegister</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3495"/>
<location filename="../../src/class/pluginsystem.cpp" line="4322"/>
<source>ErrLoadInitExtPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3520"/>
<location filename="../../src/class/pluginsystem.cpp" line="4347"/>
<source>ChooseFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3527"/>
<location filename="../../src/class/pluginsystem.cpp" line="3532"/>
<location filename="../../src/class/pluginsystem.cpp" line="4354"/>
<location filename="../../src/class/pluginsystem.cpp" line="4359"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3528"/>
<location filename="../../src/class/pluginsystem.cpp" line="4355"/>
<source>FileNotExist</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3533"/>
<location filename="../../src/class/pluginsystem.cpp" line="4360"/>
<source>FilePermission</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3563"/>
<location filename="../../src/class/pluginsystem.cpp" line="4390"/>
<source>EmptyNameDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3573"/>
<location filename="../../src/class/pluginsystem.cpp" line="4400"/>
<source>InvalidNameDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3581"/>
<location filename="../../src/class/pluginsystem.cpp" line="4408"/>
<source>InvalidNullDockWidget:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="3648"/>
<location filename="../../src/class/pluginsystem.cpp" line="4475"/>
<source>Not allowed operation in non-UI thread</source>
<translation> UI </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2871"/>
<location filename="../../src/class/pluginsystem.cpp" line="3665"/>
<source>UnsafePluginDir</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2320"/>
<location filename="../../src/class/pluginsystem.cpp" line="3114"/>
<source>InvalidPluginID</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2323"/>
<location filename="../../src/class/pluginsystem.cpp" line="3117"/>
<source>InvalidDupPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2788"/>
<location filename="../../src/class/pluginsystem.cpp" line="3582"/>
<source>FoundPluginCount</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2819"/>
<location filename="../../src/class/pluginsystem.cpp" line="3613"/>
<source>PluginLoadingFailedSummary</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2824"/>
<location filename="../../src/class/pluginsystem.cpp" line="3618"/>
<source>- Dependencies:</source>
<translation>- </translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2826"/>
<location filename="../../src/class/pluginsystem.cpp" line="3620"/>
<source>PUID:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2827"/>
<location filename="../../src/class/pluginsystem.cpp" line="3621"/>
<source>Version:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/pluginsystem.cpp" line="2834"/>
<location filename="../../src/class/pluginsystem.cpp" line="3628"/>
<source>PluginLoadingFinished</source>
<translation></translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,7 @@
#include <QVariant>
#include "WingPlugin/iwingdevice.h"
#include "WingPlugin/iwingmanager.h"
#include "class/wingangelapi.h"
#include "control/editorview.h"
@ -185,6 +186,8 @@ private:
void checkDirRootSafe(const QDir &dir);
void try2LoadManagerPlugin();
template <typename T>
std::optional<PluginInfo> loadPlugin(const QFileInfo &filename,
const QDir &setdir);
@ -224,7 +227,7 @@ private:
void registerMarcos(IWingPlugin *plg);
void registerEvents(IWingPlugin *plg);
void applyFunctionTables(IWingPluginBase *plg, const CallTable &fns);
void applyFunctionTables(QObject *plg, const CallTable &fns);
static QString getScriptFnSig(const QString &fnName,
const IWingPlugin::ScriptFnInfo &fninfo);
@ -641,7 +644,7 @@ public slots:
bool clearSelection);
WING_API bool select(const QObject *sender, qsizetype offset,
qsizetype length, SelectionMode mode);
qsizetype length, WingHex::SelectionMode mode);
WING_API bool setInsertionMode(const QObject *sender, bool isinsert);
@ -716,8 +719,8 @@ private:
WingHex::IWingPlugin *checkPluginAndReport(const QObject *sender,
const char *func);
WingHex::IWingDevice *checkBaseAndReport(const QObject *sender,
const char *func);
bool passByFailedGuard(const QObject *sender, const char *func,
const QVariantList &params);
bool checkErrAllAllowAndReport(const QObject *sender, const char *func);
@ -744,6 +747,9 @@ private:
QHash<QString, QHash<QString, WingAngelAPI::ScriptFnInfo>> _scfns;
IWingManager *_manager = nullptr;
std::optional<PluginInfo> _manInfo;
WingAngelAPI *_angelplg = nullptr;
asCScriptEngine *_engine = nullptr;