From 937e259f4c350f1e08b12c17e3ddfaf9854c579b Mon Sep 17 00:00:00 2001 From: Maschell Date: Thu, 6 Oct 2022 23:09:33 +0200 Subject: [PATCH] Add basic config menu to disable the wiiload server --- src/globals.cpp | 1 + src/globals.h | 3 ++- src/main.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/globals.cpp b/src/globals.cpp index dec8437..a75f836 100644 --- a/src/globals.cpp +++ b/src/globals.cpp @@ -1,3 +1,4 @@ #include "globals.h" bool gLibRPXLoaderInitDone __attribute__((section(".data"))) = false; +bool gWiiloadServerEnabled __attribute__((section(".data"))) = true; \ No newline at end of file diff --git a/src/globals.h b/src/globals.h index 1fdb9da..6defe22 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1,3 +1,4 @@ #include -extern bool gLibRPXLoaderInitDone; \ No newline at end of file +extern bool gLibRPXLoaderInitDone; +extern bool gWiiloadServerEnabled; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 9006038..bcf22a8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,7 @@ #include #include #include +#include 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"); } }