mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2025-01-27 00:05:38 +01:00
example_plugin: Update to use the new config api
This commit is contained in:
parent
ba3cd165dd
commit
4d9f28c1ae
@ -96,7 +96,7 @@ export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
|||||||
all: $(BUILD)
|
all: $(BUILD)
|
||||||
|
|
||||||
$(BUILD):
|
$(BUILD):
|
||||||
@[ -d $@ ] || mkdir -p $@
|
@$(shell [ ! -d $(BUILD) ] && mkdir -p $(BUILD))
|
||||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
#include <coreinit/filesystem.h>
|
#include <coreinit/filesystem.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <string.h>
|
#include <stdio.h>
|
||||||
#include <wups.h>
|
#include <wups.h>
|
||||||
#include <wups/config/WUPSConfigItemBoolean.h>
|
#include <wups/config/WUPSConfigItemBoolean.h>
|
||||||
|
#include <wups/config/WUPSConfigItemMultipleValues.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Mandatory plugin information.
|
Mandatory plugin information.
|
||||||
@ -28,6 +29,113 @@ WUPS_USE_STORAGE("example_plugin"); // Unique id for the storage api
|
|||||||
|
|
||||||
bool logFSOpen = true;
|
bool logFSOpen = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback that will be called if the config has been changed
|
||||||
|
*/
|
||||||
|
void logFSOpenChanged(ConfigItemBoolean *item, bool newValue) {
|
||||||
|
DEBUG_FUNCTION_LINE_INFO("New value in logFSOpenChanged: %d", newValue);
|
||||||
|
logFSOpen = newValue;
|
||||||
|
// If the value has changed, we store it in the storage.
|
||||||
|
WUPS_StoreInt(NULL, LOG_FS_OPEN_CONFIG_ID, logFSOpen);
|
||||||
|
}
|
||||||
|
|
||||||
|
WUPSConfigAPICallbackStatus ConfigMenuOpenedCallback(WUPSConfigCategoryHandle root) {
|
||||||
|
// We open the storage, so we can persist the configuration the user did.
|
||||||
|
if (WUPS_OpenStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE("Failed to open storage");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Let's create a new category called "Settings"
|
||||||
|
WUPSConfigCategoryHandle settingsCategory;
|
||||||
|
WUPSConfigAPICreateCategoryOptionsV1 settingsCategoryOptions = {.name = "Settings"};
|
||||||
|
if (WUPSConfigAPI_Category_Create(settingsCategoryOptions, &settingsCategory) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to create settings category");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a new item to this settings category
|
||||||
|
if (!WUPSConfigItemBoolean_AddToCategory(settingsCategory, LOG_FS_OPEN_CONFIG_ID, "Log FSOpen calls", logFSOpen, &logFSOpenChanged)) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add item to category");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the category to the root.
|
||||||
|
if (WUPSConfigAPI_Category_AddCategory(root, settingsCategory) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add category to root item");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// We can also have categories inside categories!
|
||||||
|
WUPSConfigCategoryHandle categoryLevel1;
|
||||||
|
WUPSConfigAPICreateCategoryOptionsV1 catLev1Options = {.name = "Category with subcategory"};
|
||||||
|
if (WUPSConfigAPI_Category_Create(catLev1Options, &categoryLevel1) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to create categoryLevel1");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
WUPSConfigCategoryHandle categoryLevel2;
|
||||||
|
WUPSConfigAPICreateCategoryOptionsV1 catLev2Options = {.name = "Category inside category"};
|
||||||
|
if (WUPSConfigAPI_Category_Create(catLev2Options, &categoryLevel2) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to create categoryLevel1");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
if (!WUPSConfigItemBoolean_AddToCategory(categoryLevel2, "stubInsideCategory", "This is stub item inside a nested category", false, NULL)) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add stub item to root category");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add categoryLevel2 to categoryLevel1
|
||||||
|
if (WUPSConfigAPI_Category_AddCategory(categoryLevel1, categoryLevel2) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add category to root item");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add categoryLevel2 to categoryLevel1
|
||||||
|
if (WUPSConfigAPI_Category_AddCategory(root, categoryLevel1) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add category to root item");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// We can also directly add items to the root category
|
||||||
|
if (!WUPSConfigItemBoolean_AddToCategory(root, "stub0", "This is stub item without category", false, NULL)) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to add stub item to root category");
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
ConfigItemMultipleValuesPair values[10];
|
||||||
|
int numOfElements = sizeof(values) / sizeof(values[0]);
|
||||||
|
for (int i = 0; i < numOfElements; i++) {
|
||||||
|
#define STR_SIZE 10
|
||||||
|
char *str = (char *) malloc(STR_SIZE);
|
||||||
|
if (!str) {
|
||||||
|
OSFatal("Failed to allocate memory");
|
||||||
|
}
|
||||||
|
snprintf(str, STR_SIZE, "%d", i);
|
||||||
|
values[i].value = i;
|
||||||
|
values[i].valueName = str;
|
||||||
|
}
|
||||||
|
bool multValuesRes = WUPSConfigItemMultipleValues_AddToCategory(root, "multival", "Multiple values", 0, values, numOfElements, NULL);
|
||||||
|
for (int i = 0; i < sizeof(values) / sizeof(values[0]); i++) {
|
||||||
|
free(values[i].valueName);
|
||||||
|
}
|
||||||
|
if (!multValuesRes) {
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return WUPSCONFIG_API_CALLBACK_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigMenuClosedCallback() {
|
||||||
|
// Save all changes
|
||||||
|
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to close storage");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gets called ONCE when the plugin was loaded.
|
Gets called ONCE when the plugin was loaded.
|
||||||
**/
|
**/
|
||||||
@ -36,15 +144,20 @@ INITIALIZE_PLUGIN() {
|
|||||||
initLogging();
|
initLogging();
|
||||||
DEBUG_FUNCTION_LINE("INITIALIZE_PLUGIN of example_plugin!");
|
DEBUG_FUNCTION_LINE("INITIALIZE_PLUGIN of example_plugin!");
|
||||||
|
|
||||||
|
WUPSConfigAPIOptionsV1 configOptions = {.name = "example_plugin"};
|
||||||
|
if (WUPSConfigAPI_Init(configOptions, ConfigMenuOpenedCallback, ConfigMenuClosedCallback) != WUPSCONFIG_API_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to init config api");
|
||||||
|
}
|
||||||
|
|
||||||
// Open storage to read values
|
// Open storage to read values
|
||||||
WUPSStorageError storageRes = WUPS_OpenStorage();
|
WUPSStorageError storageRes = WUPS_OpenStorage();
|
||||||
if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
|
if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||||
DEBUG_FUNCTION_LINE("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
|
DEBUG_FUNCTION_LINE("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
|
||||||
} else {
|
} else {
|
||||||
// Try to get value from storage
|
// Try to get value from storage
|
||||||
if ((storageRes = WUPS_GetBool(nullptr, LOG_FS_OPEN_CONFIG_ID, &logFSOpen)) == WUPS_STORAGE_ERROR_NOT_FOUND) {
|
if ((storageRes = WUPS_GetBool(NULL, LOG_FS_OPEN_CONFIG_ID, &logFSOpen)) == WUPS_STORAGE_ERROR_NOT_FOUND) {
|
||||||
// Add the value to the storage if it's missing.
|
// Add the value to the storage if it's missing.
|
||||||
if (WUPS_StoreBool(nullptr, LOG_FS_OPEN_CONFIG_ID, logFSOpen) != WUPS_STORAGE_ERROR_SUCCESS) {
|
if (WUPS_StoreBool(NULL, LOG_FS_OPEN_CONFIG_ID, logFSOpen) != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||||
DEBUG_FUNCTION_LINE("Failed to store bool");
|
DEBUG_FUNCTION_LINE("Failed to store bool");
|
||||||
}
|
}
|
||||||
} else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
|
} else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||||
@ -89,41 +202,6 @@ ON_APPLICATION_REQUESTS_EXIT() {
|
|||||||
DEBUG_FUNCTION_LINE_INFO("ON_APPLICATION_REQUESTS_EXIT of example_plugin!");
|
DEBUG_FUNCTION_LINE_INFO("ON_APPLICATION_REQUESTS_EXIT of example_plugin!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback that will be called if the config has been changed
|
|
||||||
*/
|
|
||||||
void logFSOpenChanged(ConfigItemBoolean *item, bool newValue) {
|
|
||||||
DEBUG_FUNCTION_LINE_INFO("New value in logFSOpenChanged: %d", newValue);
|
|
||||||
logFSOpen = newValue;
|
|
||||||
// If the value has changed, we store it in the storage.
|
|
||||||
WUPS_StoreInt(nullptr, LOG_FS_OPEN_CONFIG_ID, logFSOpen);
|
|
||||||
}
|
|
||||||
|
|
||||||
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("Failed to open storage");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
WUPSConfigHandle config;
|
|
||||||
WUPSConfig_CreateHandled(&config, "Example Plugin");
|
|
||||||
|
|
||||||
WUPSConfigCategoryHandle cat;
|
|
||||||
WUPSConfig_AddCategoryByNameHandled(config, "Logging", &cat);
|
|
||||||
|
|
||||||
WUPSConfigItemBoolean_AddToCategoryHandled(config, cat, LOG_FS_OPEN_CONFIG_ID, "Log FSOpen calls", logFSOpen, &logFSOpenChanged);
|
|
||||||
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
WUPS_CONFIG_CLOSED() {
|
|
||||||
// Save all changes
|
|
||||||
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to close storage");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This defines a function replacement.
|
This defines a function replacement.
|
||||||
It allows to replace the system function with an own function.
|
It allows to replace the system function with an own function.
|
Loading…
x
Reference in New Issue
Block a user