mirror of
https://github.com/wiiu-env/wiiload_plugin.git
synced 2024-11-22 10:39:16 +01:00
Add error notifications if wiiloading a rpx/wuhb fails
This commit is contained in:
parent
458e3ba0f2
commit
cee5d8e838
@ -1,7 +1,8 @@
|
|||||||
FROM ghcr.io/wiiu-env/devkitppc:20230621
|
FROM ghcr.io/wiiu-env/devkitppc:20231112
|
||||||
|
|
||||||
COPY --from=ghcr.io/wiiu-env/libwupsbackend:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/libwupsbackend:20230621 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/librpxloader:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/librpxloader:20230621 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:20230719 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:20230719 /artifacts $DEVKITPRO
|
||||||
|
COPY --from=ghcr.io/wiiu-env/libnotifications:20230621 /artifacts $DEVKITPRO
|
||||||
|
|
||||||
WORKDIR project
|
WORKDIR project
|
||||||
|
2
Makefile
2
Makefile
@ -51,7 +51,7 @@ CXXFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
|||||||
CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LIBS := -lwups -lwut -lwupsbackend -lz -lrpxloader
|
LIBS := -lwups -lwut -lwupsbackend -lz -lrpxloader -lnotifications
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# list of directories containing libraries, this must be the top level
|
# list of directories containing libraries, this must be the top level
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
1. Copy the file `wiiload.wps` into `sd:/wiiu/environments/[ENVIRONMENT]/plugins`.
|
1. Copy the file `wiiload.wps` into `sd:/wiiu/environments/[ENVIRONMENT]/plugins`.
|
||||||
2. Requires the [WiiUPluginLoaderBackend](https://github.com/wiiu-env/WiiUPluginLoaderBackend) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`.
|
2. Requires the [WiiUPluginLoaderBackend](https://github.com/wiiu-env/WiiUPluginLoaderBackend) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`.
|
||||||
3. Requires the [RPXLoadingModule](https://github.com/wiiu-env/RPXLoadingModule) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`.
|
3. Requires the [RPXLoadingModule](https://github.com/wiiu-env/RPXLoadingModule) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`.
|
||||||
|
4. Requires the [NotificationModule](https://github.com/wiiu-env/NotificationModule) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`.
|
||||||
|
|
||||||
## Buildflags
|
## Buildflags
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
bool gLibRPXLoaderInitDone __attribute__((section(".data"))) = false;
|
bool gLibRPXLoaderInitDone __attribute__((section(".data"))) = false;
|
||||||
bool gWiiloadServerEnabled __attribute__((section(".data"))) = true;
|
bool gWiiloadServerEnabled __attribute__((section(".data"))) = true;
|
||||||
|
bool gNotificationModuleLoaded __attribute__((section(".data"))) = true;
|
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
extern bool gLibRPXLoaderInitDone;
|
extern bool gLibRPXLoaderInitDone;
|
||||||
extern bool gWiiloadServerEnabled;
|
extern bool gWiiloadServerEnabled;
|
||||||
|
extern bool gNotificationModuleLoaded;
|
10
src/main.cpp
10
src/main.cpp
@ -3,6 +3,7 @@
|
|||||||
#include "utils/TcpReceiver.h"
|
#include "utils/TcpReceiver.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
#include <coreinit/debug.h>
|
#include <coreinit/debug.h>
|
||||||
|
#include <notifications/notifications.h>
|
||||||
#include <rpxloader/rpxloader.h>
|
#include <rpxloader/rpxloader.h>
|
||||||
#include <wups.h>
|
#include <wups.h>
|
||||||
#include <wups/config/WUPSConfigItemBoolean.h>
|
#include <wups/config/WUPSConfigItemBoolean.h>
|
||||||
@ -28,6 +29,15 @@ INITIALIZE_PLUGIN() {
|
|||||||
gLibRPXLoaderInitDone = true;
|
gLibRPXLoaderInitDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NotificationModuleStatus res;
|
||||||
|
if ((res = NotificationModule_InitLibrary()) != NOTIFICATION_MODULE_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to init NotificationModule");
|
||||||
|
gNotificationModuleLoaded = false;
|
||||||
|
} else {
|
||||||
|
NotificationModule_SetDefaultValue(NOTIFICATION_MODULE_NOTIFICATION_TYPE_ERROR, NOTIFICATION_MODULE_DEFAULT_OPTION_DURATION_BEFORE_FADE_OUT, 10.0f);
|
||||||
|
gNotificationModuleLoaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
// 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) {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <coreinit/dynload.h>
|
#include <coreinit/dynload.h>
|
||||||
#include <coreinit/title.h>
|
#include <coreinit/title.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <notifications/notifications.h>
|
||||||
#include <rpxloader/rpxloader.h>
|
#include <rpxloader/rpxloader.h>
|
||||||
#include <sysapp/launch.h>
|
#include <sysapp/launch.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -244,6 +245,10 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
file_path = WUHB_TEMP_FILE_2_EX;
|
file_path = WUHB_TEMP_FILE_2_EX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!res) {
|
||||||
|
NotificationModule_AddErrorNotification("Wiiload plugin: Failed to save .wuhb file to the sd card. Launching will be aborted.");
|
||||||
|
}
|
||||||
|
|
||||||
loadedRPX = true;
|
loadedRPX = true;
|
||||||
} else if (inflatedData[0x7] == 0xCA && inflatedData[0x8] == 0xFE && inflatedData[0x9] != 0x50 && inflatedData[0xA] != 0x4C) {
|
} else if (inflatedData[0x7] == 0xCA && inflatedData[0x8] == 0xFE && inflatedData[0x9] != 0x50 && inflatedData[0xA] != 0x4C) {
|
||||||
DEBUG_FUNCTION_LINE("Try to load a .rpx");
|
DEBUG_FUNCTION_LINE("Try to load a .rpx");
|
||||||
@ -251,6 +256,10 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
res = FSUtils::saveBufferToFile(RPX_TEMP_FILE, inflatedData, fileSize);
|
res = FSUtils::saveBufferToFile(RPX_TEMP_FILE, inflatedData, fileSize);
|
||||||
file_path = RPX_TEMP_FILE_EX;
|
file_path = RPX_TEMP_FILE_EX;
|
||||||
loadedRPX = true;
|
loadedRPX = true;
|
||||||
|
|
||||||
|
if (!res) {
|
||||||
|
NotificationModule_AddErrorNotification("Wiiload plugin: Failed to save .rpx file to the sd card. Launching will be aborted.");
|
||||||
|
}
|
||||||
} else if (inflatedData[0x7] == 0xCA && inflatedData[0x8] == 0xFE && inflatedData[0x9] == 0x50 && inflatedData[0xA] == 0x4C) {
|
} else if (inflatedData[0x7] == 0xCA && inflatedData[0x8] == 0xFE && inflatedData[0x9] == 0x50 && inflatedData[0xA] == 0x4C) {
|
||||||
auto newContainer = WUPSBackend::PluginUtils::getPluginForBuffer((char *) inflatedData, fileSize);
|
auto newContainer = WUPSBackend::PluginUtils::getPluginForBuffer((char *) inflatedData, fileSize);
|
||||||
if (newContainer) {
|
if (newContainer) {
|
||||||
@ -259,7 +268,6 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
auto &metaInformation = newContainer.value()->getMetaInformation();
|
auto &metaInformation = newContainer.value()->getMetaInformation();
|
||||||
|
|
||||||
// remove plugins with the same name and author as our new plugin
|
// remove plugins with the same name and author as our new plugin
|
||||||
|
|
||||||
plugins.erase(std::remove_if(plugins.begin(), plugins.end(),
|
plugins.erase(std::remove_if(plugins.begin(), plugins.end(),
|
||||||
[metaInformation](auto &plugin) {
|
[metaInformation](auto &plugin) {
|
||||||
return plugin->getMetaInformation()->getName() == metaInformation->getName() &&
|
return plugin->getMetaInformation()->getName() == metaInformation->getName() &&
|
||||||
@ -267,7 +275,7 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
}),
|
}),
|
||||||
plugins.end());
|
plugins.end());
|
||||||
|
|
||||||
// at the new plugin
|
// add the new plugin
|
||||||
plugins.push_back(std::move(newContainer.value()));
|
plugins.push_back(std::move(newContainer.value()));
|
||||||
|
|
||||||
#ifdef VERBOSE_DEBUG
|
#ifdef VERBOSE_DEBUG
|
||||||
@ -280,7 +288,8 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (WUPSBackend::PluginUtils::LoadAndLinkOnRestart(plugins) != 0) {
|
if (WUPSBackend::PluginUtils::LoadAndLinkOnRestart(plugins) != 0) {
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to load & link");
|
DEBUG_FUNCTION_LINE_ERR("WUPSBackend::PluginUtils::LoadAndLinkOnRestart failed");
|
||||||
|
NotificationModule_AddErrorNotification("Wiiload plugin: Failed to load plugin. Launching will be aborted.");
|
||||||
}
|
}
|
||||||
|
|
||||||
free(loadAddress);
|
free(loadAddress);
|
||||||
@ -289,6 +298,9 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
_SYSLaunchTitleWithStdArgsInNoSplash(OSGetTitleID(), nullptr);
|
_SYSLaunchTitleWithStdArgsInNoSplash(OSGetTitleID(), nullptr);
|
||||||
return fileSize;
|
return fileSize;
|
||||||
} else {
|
} else {
|
||||||
|
if (NotificationModule_AddErrorNotification("Wiiload plugin: Failed to load or parse the plugin. Launching will be aborted.") != NOTIFICATION_MODULE_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to display error notification");
|
||||||
|
}
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to parse plugin");
|
DEBUG_FUNCTION_LINE_ERR("Failed to parse plugin");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -309,12 +321,15 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
|||||||
} else if (loadAddress[0x7] == 0xCA && loadAddress[0x8] == 0xFE && loadAddress[0x9] == 0x50) {
|
} else if (loadAddress[0x7] == 0xCA && loadAddress[0x8] == 0xFE && loadAddress[0x9] == 0x50) {
|
||||||
OSFatal("Not implemented yet");
|
OSFatal("Not implemented yet");
|
||||||
}
|
}
|
||||||
|
if (NotificationModule_AddErrorNotification("Failed to write file to the sd card.") != NOTIFICATION_MODULE_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to display error notification");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(loadAddress);
|
free(loadAddress);
|
||||||
|
|
||||||
if (!res) {
|
if (!res) {
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to launch save a homebrew to the sd card");
|
DEBUG_FUNCTION_LINE_ERR("Failed to launch/save a homebrew to the sd card");
|
||||||
return NOT_ENOUGH_MEMORY;
|
return NOT_ENOUGH_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user