plus some fixes

commit f1e715336f3f7bccbe01b2fb3883fd965f75ee76
Author: Ash Logan <ash@heyquark.com>
Date:   Sat Dec 10 14:00:43 2022 +1100

    config: move to own file

    get it outta here! I don't wanna see it!

commit 386874e1c468db44f378a3269ca79dde9cc86883
Author: scatterbrain <119330240+kurbus@users.noreply.github.com>
Date:   Fri Dec 9 21:19:28 2022 -0500

    skipPatches to connect_to_network (#6)

    * baseline for fix

    Make config more readable

    * change skip patches to connect to network

    for clarity. Nice C code, by the way.

    * scratch that

    number 15, diarrhea
This commit is contained in:
Ash Logan 2022-12-10 14:01:54 +11:00
commit 38e9322e0a
4 changed files with 108 additions and 76 deletions

Binary file not shown.

85
src/config.cpp Normal file
View file

@ -0,0 +1,85 @@
//
// Created by ash on 10/12/22.
//
#include "config.h"
#include "utils/logger.h"
#include <wups.h>
#include <wups/config/WUPSConfigItemBoolean.h>
#include <coreinit/launch.h>
#include <sysapp/launch.h>
bool Config::connect_to_network = true;
bool Config::need_relaunch = false;
void Config::Init() {
WUPSStorageError storageRes = WUPS_OpenStorage();
if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
}
else {
// Try to get value from storage
if ((storageRes = WUPS_GetBool(nullptr, "connect_to_network", &connect_to_network)) == WUPS_STORAGE_ERROR_NOT_FOUND) {
bool skipPatches = false;
if ((storageRes = WUPS_GetBool(nullptr, "skipPatches", &skipPatches)) != WUPS_STORAGE_ERROR_NOT_FOUND) {
// Migrate old config value
connect_to_network = !skipPatches;
}
// Add the value to the storage if it's missing.
if (WUPS_StoreBool(nullptr, "connect_to_network", connect_to_network) != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to store bool");
}
}
else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to get bool %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
}
// Close storage
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to close storage");
}
}
}
static void connect_to_network_changed(ConfigItemBoolean* item, bool new_value) {
DEBUG_FUNCTION_LINE("New value in skipPatchesChanged: %d", new_value);
if (new_value != Config::connect_to_network) {
Config::need_relaunch = true;
}
Config::connect_to_network = new_value;
WUPS_StoreInt(nullptr, "connect_to_network", Config::connect_to_network);
}
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, "Inkay");
WUPSConfigCategoryHandle cat;
WUPSConfig_AddCategoryByNameHandled(config, "Patching", &cat);
WUPSConfigItemBoolean_AddToCategoryHandled(config, cat, "connect_to_network", "Connect to the Pretendo network", Config::connect_to_network, &connect_to_network_changed);
return config;
}
WUPS_CONFIG_CLOSED() {
// Save all changes
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to close storage");
}
if (Config::need_relaunch) {
// Need to reload the console so the patches reset
OSForceFullRelaunch();
SYSLaunchMenu();
Config::need_relaunch = false;
}
}

19
src/config.h Normal file
View file

@ -0,0 +1,19 @@
//
// Created by ash on 10/12/22.
//
#ifndef INKAY_CONFIG_H
#define INKAY_CONFIG_H
class Config {
public:
static void Init();
// wups config items
static bool connect_to_network;
// private stuff
static bool need_relaunch;
};
#endif //INKAY_CONFIG_H

View file

@ -16,7 +16,6 @@
#include <stdint.h>
#include <stdlib.h>
#include <wups.h>
#include <wups/config/WUPSConfigItemBoolean.h>
#include <nsysnet/nssl.h>
#include <coreinit/cache.h>
#include <coreinit/dynload.h>
@ -24,11 +23,10 @@
#include <coreinit/memory.h>
#include <coreinit/memorymap.h>
#include <coreinit/memexpheap.h>
#include <coreinit/launch.h>
#include <sysapp/launch.h>
#include "wut_extra.h"
#include <utils/logger.h>
#include "url_patches.h"
#include "config.h"
/**
Mandatory plugin information.
@ -42,9 +40,6 @@ WUPS_PLUGIN_LICENSE("ISC");
WUPS_USE_STORAGE("inkay");
bool skipPatches = false;
bool prevSkipValue = false;
#include <kernel/kernel.h>
#include <mocha/mocha.h>
@ -94,29 +89,7 @@ static bool is555(MCP_SystemVersion version) {
INITIALIZE_PLUGIN() {
WHBLogUdpInit();
WUPSStorageError storageRes = WUPS_OpenStorage();
if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
}
else {
// Try to get value from storage
if ((storageRes = WUPS_GetBool(nullptr, "skipPatches", &skipPatches)) == WUPS_STORAGE_ERROR_NOT_FOUND) {
// Add the value to the storage if it's missing.
if (WUPS_StoreBool(nullptr, "skipPatches", skipPatches) != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to store bool");
}
}
else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to get bool %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes);
}
prevSkipValue = skipPatches;
// Close storage
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to close storage");
}
}
Config::Init();
auto res = Mocha_InitLibrary();
@ -139,7 +112,7 @@ INITIALIZE_PLUGIN() {
os_version.major, os_version.minor, os_version.patch, os_version.region
);
if (!skipPatches) {
if (Config::connect_to_network) {
if (is555(os_version)) {
Mocha_IOSUKernelWrite32(0xE1019F78, 0xE3A00001); // mov r0, #1
}
@ -165,50 +138,6 @@ DEINITIALIZE_PLUGIN() {
Mocha_DeInitLibrary();
}
void skipPatchesChanged(ConfigItemBoolean* item, bool newValue) {
DEBUG_FUNCTION_LINE("New value in skipPatchesChanged: %d", newValue);
skipPatches = newValue;
// If the value has changed, we store it in the storage.
WUPS_StoreInt(nullptr, "skipPatches", skipPatches);
}
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, "Inkay");
WUPSConfigCategoryHandle cat;
WUPSConfig_AddCategoryByNameHandled(config, "Patching", &cat);
WUPSConfigItemBoolean_AddToCategoryHandled(config, cat, "skipPatches", "Skip Pretendo Network patches", skipPatches, &skipPatchesChanged);
return config;
}
bool isRelaunching = false;
WUPS_CONFIG_CLOSED() {
// Save all changes
if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) {
DEBUG_FUNCTION_LINE("Failed to close storage");
}
if (prevSkipValue != skipPatches) {
if (!isRelaunching) {
// Need to reload the console so the patches reset
OSForceFullRelaunch();
SYSLaunchMenu();
isRelaunching = true;
}
}
prevSkipValue = skipPatches;
}
bool checkForOlvLibs() {
OSDynLoad_Module olv_handle = 0;
OSDynLoad_Error dret;
@ -252,7 +181,7 @@ ON_APPLICATION_START() {
return;
}
if (!skipPatches) {
if (Config::connect_to_network) {
OSDynLoad_Acquire("nn_olv", &olv_handle);
DEBUG_FUNCTION_LINE("Inkay: olv! %08x\n", olv_handle);
@ -268,7 +197,6 @@ ON_APPLICATION_START() {
else {
DEBUG_FUNCTION_LINE("Inkay: Miiverse patches skipped.");
}
}
ON_APPLICATION_ENDS() {