Add basic config menu to disable the wiiload server

This commit is contained in:
Maschell 2022-10-06 23:09:33 +02:00
parent a8a3287ebf
commit 937e259f4c
3 changed files with 62 additions and 5 deletions

View File

@ -1,3 +1,4 @@
#include "globals.h"
bool gLibRPXLoaderInitDone __attribute__((section(".data"))) = false;
bool gWiiloadServerEnabled __attribute__((section(".data"))) = true;

View File

@ -1,3 +1,4 @@
#include <stdint.h>
extern bool gLibRPXLoaderInitDone;
extern bool gWiiloadServerEnabled;

View File

@ -4,6 +4,7 @@
#include <coreinit/debug.h>
#include <rpxloader/rpxloader.h>
#include <wups.h>
#include <wups/config/WUPSConfigItemBoolean.h>
WUPS_PLUGIN_NAME("Wiiload");
WUPS_PLUGIN_DESCRIPTION("Wiiload Server");
@ -13,6 +14,9 @@ WUPS_PLUGIN_LICENSE("GPL");
WUPS_USE_WUT_DEVOPTAB();
WUPS_USE_STORAGE("wiiload"); // Unqiue id for the storage api
#define WIILOAD_ENABLED_STRING "enabled"
TcpReceiver *thread = nullptr;
INITIALIZE_PLUGIN() {
@ -25,13 +29,64 @@ INITIALIZE_PLUGIN() {
thread = nullptr;
}
void gServerEnabledChanged(ConfigItemBoolean *item, bool newValue) {
DEBUG_FUNCTION_LINE_VERBOSE("New value in gWiiloadServerEnabled: %d", newValue);
gWiiloadServerEnabled = newValue;
if (thread) {
delete thread;
thread = nullptr;
}
if (gWiiloadServerEnabled) {
DEBUG_FUNCTION_LINE("Starting server!");
thread = new (std::nothrow) TcpReceiver(4299);
if (thread == nullptr) {
DEBUG_FUNCTION_LINE_ERR("Failed to create wiiload thread");
}
} else {
DEBUG_FUNCTION_LINE("Wiiload server has been stopped!");
}
// If the value has changed, we store it in the storage.
auto res = WUPS_StoreInt(nullptr, item->configId, gWiiloadServerEnabled);
if (res != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE_ERR("Failed to store gWiiloadServerEnabled: %s (%d)", WUPS_GetStorageStatusStr(res), res);
}
}
WUPS_GET_CONFIG() {
// We open the storage, so we can persist the configuration the user did.
if (WUPS_OpenStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE_ERR("Failed to open storage");
return 0;
}
WUPSConfigHandle config;
WUPSConfig_CreateHandled(&config, "Wiiload");
WUPSConfigCategoryHandle setting;
WUPSConfig_AddCategoryByNameHandled(config, "Settings", &setting);
WUPSConfigItemBoolean_AddToCategoryHandled(config, setting, WIILOAD_ENABLED_STRING, "Enable Wiiload", gWiiloadServerEnabled, &gServerEnabledChanged);
return config;
}
WUPS_CONFIG_CLOSED() {
// Save all changes
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE_ERR("Failed to close storage");
}
}
/* Entry point */
ON_APPLICATION_START() {
initLogging();
DEBUG_FUNCTION_LINE("Start wiiload thread");
thread = new (std::nothrow) TcpReceiver(4299);
if (thread == nullptr) {
DEBUG_FUNCTION_LINE_ERR("Failed to create wiiload thread");
if (gWiiloadServerEnabled) {
DEBUG_FUNCTION_LINE("Start wiiload thread");
thread = new (std::nothrow) TcpReceiver(4299);
if (thread == nullptr) {
DEBUG_FUNCTION_LINE_ERR("Failed to create wiiload thread");
}
} else {
DEBUG_FUNCTION_LINE("Wiiload server is disabled");
}
}