47 [[nodiscard]]
static PluginManager&
instance()
noexcept;
49 [[nodiscard]]
bool init();
53 [[nodiscard]] std::optional<PluginManifest>
getManifest(
const std::string&
id)
const;
102 [[nodiscard]]
bool isLoaded(
const std::string&
id)
const;
118 void dispatchAction(uint32_t action_id, uint32_t idx, uint32_t user_data);
128 bool dispatchCmd(const std::
string&
id, const
char* cmd,
size_t len);
167 PluginManager(
const PluginManager&) =
delete;
168 PluginManager& operator=(
const PluginManager&) =
delete;
170 void startTickTask();
172 static void tickTaskTrampoline(
void* arg);
181 void teardownPlugin(
Plugin& p,
bool runWasmDeinit);
187 void handleTrap(
Plugin& p,
const char* fn);
192 bool loadIntoBackground(
const std::string&
id,
const PluginManifest& mf);
197 void loadAutoloadPlugins();
200 void rebuildMessageIndex();
202 void maybeRefreshMessageIndex();
204 std::unique_ptr<Plugin> active_;
205 std::vector<std::unique_ptr<Plugin>> background_;
206 std::string pending_cmd_;
207 void* tick_task_ =
nullptr;
208 void* call_mutex_ =
nullptr;
209 volatile bool tick_stop_ =
false;
210 std::atomic<bool> pending_stop_{
false};
211 bool initialised_ =
false;
212 uint8_t plugin_base_depth_ = 0;
216 void* msg_index_mutex_ =
nullptr;
217 std::vector<std::string> msg_index_mime_;
218 std::vector<std::string> msg_index_id_;
221 std::vector<std::string> feat_index_name_;
222 std::vector<std::string> feat_index_id_;
223 std::string installed_sig_;
224 uint32_t last_index_refresh_ms_ = 0;
In-memory representation of a plugin's meta.json.
Mounts the FAT-FS partition that holds plugin .wasm + .meta files.
Owned WAMR module instance + per-plugin state.
bool dispatchCmd(const std::string &id, const char *cmd, size_t len)
bool activateForMessageType(const char *mime)
Load + start (headless) the installed plugin that declares this MIME type, so its message handler bec...
bool activePluginPreventsSleep() const
uint8_t getLockscreenItems(LockscreenItem *out, uint8_t max) const
Snapshot of all plugin lockscreen items. Returns the number written.
std::string activePluginId() const
void dispatchAction(uint32_t action_id, uint32_t idx, uint32_t user_data)
int consumeCmd(char *out, size_t out_size)
void requestStopActivePlugin()
bool hasBackgroundPlugin() const noexcept
True if at least one plugin is currently resident in the background slot.
bool isLoaded(const std::string &id) const
True if a plugin with id is loaded in RAM (foreground or background).
void dispatchButton(uint32_t button_code)
bool hasActivePlugin() const noexcept
bool isRunningInBackground(const std::string &id) const
True if a plugin with id is currently resident in the background slot.
void forEachPlugin(const std::function< bool(Plugin &)> &visitor)
Iterate foreground + background plugins. Visitor returns false to stop.
std::vector< std::string > listInstalledIds() const
static PluginManager & instance() noexcept
uint8_t pluginBaseDepth() const noexcept
bool unloadFromRam(const std::string &id)
void dispatchActionTo(Plugin *plugin, uint32_t action_id, uint32_t idx, uint32_t user_data)
bool setPluginDisabled(const std::string &id, bool disabled)
bool activePluginIsBackground() const
void dispatchTick(uint64_t uptime_ms)
bool uninstallPlugin(const std::string &id)
void triggerLockscreenItem(const LockscreenItem &item)
Fire plugin_on_action(item.action_id, 0, 0) on the owning plugin.
bool reloadBackgroundPlugin(const std::string &id)
bool featureInstalled(const char *feature) const
True if any installed plugin's manifest provides this external feature. Reads the cached index (same ...
bool messageTypeInstalled(const char *mime) const
True if any installed plugin's manifest declares this MIME type for message transfer....
bool isPluginDisabled(const std::string &id) const
void reloadActiveLangOverlay()
std::string featureProviderId(const char *feature) const
Installed plugin id providing this external feature, or empty.
std::optional< PluginManifest > getManifest(const std::string &id) const
void dispatchEventAll(uint32_t event_type, uint32_t value)
StartResult startPlugin(const std::string &id)