Skip to content

Commit

Permalink
Merge PR #6
Browse files Browse the repository at this point in the history
plus some fixes

commit f1e7153
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 386874e
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
  • Loading branch information
ashquarky committed Dec 10, 2022
1 parent a8521fd commit 38e9322
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 76 deletions.
Binary file modified Inkay-pretendo.wps
Binary file not shown.
85 changes: 85 additions & 0 deletions src/config.cpp
Original file line number Diff line number Diff line change
@@ -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 changes: 19 additions & 0 deletions src/config.h
Original file line number Diff line number Diff line change
@@ -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
80 changes: 4 additions & 76 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,17 @@
#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>
#include <coreinit/mcp.h>
#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.
Expand All @@ -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>

Expand Down Expand Up @@ -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();

Expand All @@ -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
}
Expand All @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -268,7 +197,6 @@ ON_APPLICATION_START() {
else {
DEBUG_FUNCTION_LINE("Inkay: Miiverse patches skipped.");
}

}

ON_APPLICATION_ENDS() {
Expand Down

0 comments on commit 38e9322

Please sign in to comment.