Only check for config menu if the plugin is linked and loaded

This commit is contained in:
Maschell 2024-08-04 15:41:10 +02:00
parent 9c8177405e
commit 39256e45f0

View File

@ -83,40 +83,42 @@ void ConfigUtils::displayMenu() {
info.pluginData = plugin.getPluginDataCopy(); info.pluginData = plugin.getPluginDataCopy();
std::unique_ptr<WUPSConfigAPIBackend::WUPSConfig> config; std::unique_ptr<WUPSConfigAPIBackend::WUPSConfig> config;
const auto configData = plugin.getConfigData(); if (plugin.isLinkedAndLoaded()) {
if (configData) { const auto configData = plugin.getConfigData();
const auto configHandleOpt = configData->createConfig(); if (configData) {
if (configHandleOpt) { const auto configHandleOpt = configData->createConfig();
WUPSConfigAPIStatus callbackResult = configData->CallMenuOpenendCallback(configHandleOpt.value()); if (configHandleOpt) {
config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(configHandleOpt.value()); WUPSConfigAPIStatus callbackResult = configData->CallMenuOpenendCallback(configHandleOpt.value());
if (!config) { config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(configHandleOpt.value());
DEBUG_FUNCTION_LINE_ERR("Failed to get config for handle: %08X", configHandleOpt.value().handle); if (!config) {
} else if (callbackResult != WUPSCONFIG_API_RESULT_SUCCESS) { DEBUG_FUNCTION_LINE_ERR("Failed to get config for handle: %08X", configHandleOpt.value().handle);
DEBUG_FUNCTION_LINE_ERR("Callback failed for %s: %s", info.name.c_str(), WUPSConfigAPI_GetStatusStr(callbackResult)); } else if (callbackResult != WUPSCONFIG_API_RESULT_SUCCESS) {
config.reset(); DEBUG_FUNCTION_LINE_ERR("Callback failed for %s: %s", info.name.c_str(), WUPSConfigAPI_GetStatusStr(callbackResult));
config.reset();
} else {
info.name = config->getName();
}
} else { } else {
info.name = config->getName(); DEBUG_FUNCTION_LINE_ERR("Failed to create config for plugin: \"%s\"", info.name.c_str());
} }
} else { } else {
DEBUG_FUNCTION_LINE_ERR("Failed to create config for plugin: \"%s\"", info.name.c_str()); for (const auto &hook : plugin.getPluginLinkInformation().getHookDataList()) {
} if (hook.getType() == WUPS_LOADER_HOOK_GET_CONFIG_DEPRECATED) {
} else { if (hook.getFunctionPointer() == nullptr) {
for (const auto &hook : plugin.getPluginLinkInformation().getHookDataList()) { DEBUG_FUNCTION_LINE_ERR("Hook had invalid ptr");
if (hook.getType() == WUPS_LOADER_HOOK_GET_CONFIG_DEPRECATED) { break;
if (hook.getFunctionPointer() == nullptr) { }
DEBUG_FUNCTION_LINE_ERR("Hook had invalid ptr"); auto cur_config_handle = ((void *(*) ())((uint32_t *) hook.getFunctionPointer()))();
if (cur_config_handle == nullptr) {
DEBUG_FUNCTION_LINE_WARN("Hook returned empty handle");
break;
}
config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(WUPSConfigHandle(cur_config_handle));
if (!config) {
DEBUG_FUNCTION_LINE_ERR("Failed to find config for handle: %08X", cur_config_handle);
}
break; break;
} }
auto cur_config_handle = ((void *(*) ())((uint32_t *) hook.getFunctionPointer()))();
if (cur_config_handle == nullptr) {
DEBUG_FUNCTION_LINE_WARN("Hook returned empty handle");
break;
}
config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(WUPSConfigHandle(cur_config_handle));
if (!config) {
DEBUG_FUNCTION_LINE_ERR("Failed to find config for handle: %08X", cur_config_handle);
}
break;
} }
} }
} }