mirror of
https://github.com/wiiu-env/homebrew_on_menu_plugin.git
synced 2024-11-22 10:39:16 +01:00
Avoid redirecting the /vol/save/common directory for Wii U Menu
This commit is contained in:
parent
ea834f3209
commit
4824bc330e
@ -1,10 +1,10 @@
|
|||||||
FROM ghcr.io/wiiu-env/devkitppc:20231112
|
FROM ghcr.io/wiiu-env/devkitppc:20231112
|
||||||
|
|
||||||
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:0.8.0-dev-20240329-562c749 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:0.8.0-dev-20240329-562c749 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/librpxloader:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/librpxloader:0.1.3-dev-20240329-8a2fc9f /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/libsdutils:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/libsdutils:20230621 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/libwuhbutils:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/libwuhbutils:20230621 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/libcontentredirection:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/libcontentredirection:1.1-dev-20240421-50d6722 /artifacts $DEVKITPRO
|
||||||
COPY --from=ghcr.io/wiiu-env/libnotifications:20230621 /artifacts $DEVKITPRO
|
COPY --from=ghcr.io/wiiu-env/libnotifications:20230621 /artifacts $DEVKITPRO
|
||||||
|
|
||||||
WORKDIR project
|
WORKDIR project
|
||||||
|
@ -48,14 +48,10 @@ void CopyExistingFiles() {
|
|||||||
nn::act::PersistentId persistentId = nn::act::GetPersistentId();
|
nn::act::PersistentId persistentId = nn::act::GetPersistentId();
|
||||||
nn::act::Finalize();
|
nn::act::Finalize();
|
||||||
|
|
||||||
std::string common = getBaseSavePathFS() + "/common";
|
|
||||||
std::string commonLegacy = getBaseSavePathLegacyFS() + "/common";
|
|
||||||
std::string commonOriginal = "fs:/vol/save/common";
|
|
||||||
std::string user = string_format("%s/%08X", getBaseSavePathFS().c_str(), 0x80000000 | persistentId);
|
std::string user = string_format("%s/%08X", getBaseSavePathFS().c_str(), 0x80000000 | persistentId);
|
||||||
std::string userLegacy = string_format("%s/%08X", getBaseSavePathLegacyFS().c_str(), 0x80000000 | persistentId);
|
std::string userLegacy = string_format("%s/%08X", getBaseSavePathLegacyFS().c_str(), 0x80000000 | persistentId);
|
||||||
std::string userOriginal = string_format("fs:/vol/save/%08X", 0x80000000 | persistentId);
|
std::string userOriginal = string_format("fs:/vol/save/%08X", 0x80000000 | persistentId);
|
||||||
|
|
||||||
FSUtils::CreateSubfolder(common.c_str());
|
|
||||||
FSUtils::CreateSubfolder(user.c_str());
|
FSUtils::CreateSubfolder(user.c_str());
|
||||||
|
|
||||||
auto BaristaAccountSaveFilePathNew = user + "/BaristaAccountSaveFile.dat";
|
auto BaristaAccountSaveFilePathNew = user + "/BaristaAccountSaveFile.dat";
|
||||||
@ -78,48 +74,6 @@ void CopyExistingFiles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto BaristaCommonSaveFile = common + "/BaristaCommonSaveFile.dat";
|
|
||||||
auto BaristaCommonSaveFileOriginal = commonOriginal + "/BaristaCommonSaveFile.dat";
|
|
||||||
auto BaristaCommonSaveFileLegacy = commonLegacy + "/BaristaCommonSaveFile.dat";
|
|
||||||
if (!FSUtils::CheckFile(BaristaCommonSaveFile.c_str())) {
|
|
||||||
if (FSUtils::CheckFile(BaristaCommonSaveFileLegacy.c_str())) {
|
|
||||||
DEBUG_FUNCTION_LINE("Copy %s to %s", BaristaCommonSaveFileLegacy.c_str(), BaristaCommonSaveFile.c_str());
|
|
||||||
if (!FSUtils::copyFile(BaristaCommonSaveFileLegacy, BaristaCommonSaveFile)) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to copy file: %s -> %s", BaristaCommonSaveFileLegacy.c_str(), BaristaCommonSaveFile.c_str());
|
|
||||||
} else {
|
|
||||||
if (remove(BaristaCommonSaveFileLegacy.c_str()) < 0) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to delete %s", BaristaCommonSaveFileLegacy.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
DEBUG_FUNCTION_LINE("Copy %s to %s", BaristaCommonSaveFileOriginal.c_str(), BaristaCommonSaveFile.c_str());
|
|
||||||
if (!FSUtils::copyFile(BaristaCommonSaveFileOriginal, BaristaCommonSaveFile)) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to copy file: %s -> %s", BaristaCommonSaveFileOriginal.c_str(), BaristaCommonSaveFile.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto BaristaIconDataBase = common + "/BaristaIconDataBase.dat";
|
|
||||||
auto BaristaIconDataBaseOriginal = commonOriginal + "/BaristaIconDataBase.dat";
|
|
||||||
auto BaristaIconDataBaseLegacy = commonLegacy + "/BaristaIconDataBase.dat";
|
|
||||||
if (!FSUtils::CheckFile(BaristaIconDataBase.c_str())) {
|
|
||||||
if (FSUtils::CheckFile(BaristaIconDataBaseLegacy.c_str())) {
|
|
||||||
DEBUG_FUNCTION_LINE("Copy %s to %s", BaristaIconDataBaseLegacy.c_str(), BaristaIconDataBase.c_str());
|
|
||||||
if (!FSUtils::copyFile(BaristaIconDataBaseLegacy, BaristaIconDataBase)) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to copy file: %s -> %s", BaristaIconDataBaseLegacy.c_str(), BaristaIconDataBase.c_str());
|
|
||||||
} else {
|
|
||||||
if (remove(BaristaIconDataBaseLegacy.c_str()) < 0) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to delete %s", BaristaIconDataBaseLegacy.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
DEBUG_FUNCTION_LINE("Copy %s to %s", BaristaIconDataBaseOriginal.c_str(), BaristaIconDataBase.c_str());
|
|
||||||
if (!FSUtils::copyFile(BaristaIconDataBaseOriginal, BaristaIconDataBase)) {
|
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to copy file: %s -> %s", BaristaIconDataBaseOriginal.c_str(), BaristaIconDataBase.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initSaveData() {
|
void initSaveData() {
|
||||||
@ -128,7 +82,7 @@ void initSaveData() {
|
|||||||
|
|
||||||
std::string replaceDir = getBaseSavePathFS();
|
std::string replaceDir = getBaseSavePathFS();
|
||||||
DEBUG_FUNCTION_LINE("Setup save redirection: %s -> %s", "/vol/save", replaceDir.c_str());
|
DEBUG_FUNCTION_LINE("Setup save redirection: %s -> %s", "/vol/save", replaceDir.c_str());
|
||||||
auto res = ContentRedirection_AddFSLayer(&saveLayer, "homp_save_redirection", replaceDir.c_str(), FS_LAYER_TYPE_SAVE_REPLACE);
|
auto res = ContentRedirection_AddFSLayer(&saveLayer, "homp_save_redirection", replaceDir.c_str(), FS_LAYER_TYPE_SAVE_REPLACE_IGNORE_VOL_SAVE_COMMON);
|
||||||
if (res != CONTENT_REDIRECTION_RESULT_SUCCESS) {
|
if (res != CONTENT_REDIRECTION_RESULT_SUCCESS) {
|
||||||
DEBUG_FUNCTION_LINE_ERR("Failed to add save FS Layer: %d", res);
|
DEBUG_FUNCTION_LINE_ERR("Failed to add save FS Layer: %d", res);
|
||||||
}
|
}
|
||||||
@ -145,25 +99,6 @@ DECL_FUNCTION(int32_t, LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb, nn:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
DECL_FUNCTION(SAVEStatus, SAVEGetSharedSaveDataPath, uint64_t titleID, const char *path, char *buffer, uint32_t bufferSize) {
|
|
||||||
if (titleID == 0x0005001010040000L || // Wii U Menu JPN
|
|
||||||
titleID == 0x0005001010040100L || // Wii U Menu USA
|
|
||||||
titleID == 0x0005001010040200L) { // Wii U Menu EUR
|
|
||||||
if (buffer != nullptr) {
|
|
||||||
std::string commonReplacement = getBaseSavePath() + "/common";
|
|
||||||
auto BaristaCommonSaveFile = "fs:" + commonReplacement + "/BaristaCommonSaveFile.dat";
|
|
||||||
auto BaristaIconDataBase = "fs:" + commonReplacement + "/BaristaIconDataBase.dat";
|
|
||||||
if (FSUtils::CheckFile(BaristaCommonSaveFile.c_str()) &&
|
|
||||||
FSUtils::CheckFile(BaristaIconDataBase.c_str())) {
|
|
||||||
snprintf(buffer, bufferSize, "%s/%s", commonReplacement.c_str(), path);
|
|
||||||
DEBUG_FUNCTION_LINE("Redirect Wii U Menu common path to %s", commonReplacement.c_str());
|
|
||||||
return SAVE_STATUS_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return real_SAVEGetSharedSaveDataPath(titleID, path, buffer, bufferSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern bool gHideHomebrew;
|
extern bool gHideHomebrew;
|
||||||
extern bool sSDIsMounted;
|
extern bool sSDIsMounted;
|
||||||
DECL_FUNCTION(int32_t, SAVEInit) {
|
DECL_FUNCTION(int32_t, SAVEInit) {
|
||||||
@ -194,14 +129,12 @@ DECL_FUNCTION(FSError, FSGetLastErrorCodeForViewer, FSClient *client) {
|
|||||||
}
|
}
|
||||||
if ((uint32_t) res == 1503030) {
|
if ((uint32_t) res == 1503030) {
|
||||||
// If we encounter error 1503030 when running the Wii U Menu we probably hit a Wii U Menu save related issue
|
// If we encounter error 1503030 when running the Wii U Menu we probably hit a Wii U Menu save related issue
|
||||||
// Either the sd card is write locked or the save on the sd card it corrupted. Let the user now about this..
|
// Either the sd card is write locked or the save on the sd card it corrupted. Let the user now about this.
|
||||||
|
|
||||||
std::string deleteHint = string_format("If not write locked, delete \"sd:" HOMEBREW_ON_MENU_PLUGIN_DATA_PATH_BASE "/%s/save/common/BaristaIconDataBase.dat\".", gSerialId.c_str());
|
std::string deleteHint = string_format("If not write locked, backup and delete this directory: \"sd:" HOMEBREW_ON_MENU_PLUGIN_DATA_PATH_BASE "/%s\".", gSerialId.c_str());
|
||||||
std::string deleteHint2 = string_format("If deleting this file doesn't fix the error code, delete this directory: \"sd:" HOMEBREW_ON_MENU_PLUGIN_DATA_PATH_BASE "/%s\".", gSerialId.c_str());
|
|
||||||
NotificationModuleHandle handle;
|
NotificationModuleHandle handle;
|
||||||
|
|
||||||
NotificationModule_AddDynamicNotification("Caution: This resets the order of application on the Wii U Menu when using Aroma.", &handle);
|
NotificationModule_AddDynamicNotification("Caution: This resets the order of application on the Wii U Menu when using Aroma.", &handle);
|
||||||
NotificationModule_AddDynamicNotification(deleteHint2.c_str(), &handle);
|
|
||||||
NotificationModule_AddDynamicNotification("", &handle);
|
NotificationModule_AddDynamicNotification("", &handle);
|
||||||
NotificationModule_AddDynamicNotification(deleteHint.c_str(), &handle);
|
NotificationModule_AddDynamicNotification(deleteHint.c_str(), &handle);
|
||||||
NotificationModule_AddDynamicNotification("", &handle);
|
NotificationModule_AddDynamicNotification("", &handle);
|
||||||
@ -214,4 +147,3 @@ DECL_FUNCTION(FSError, FSGetLastErrorCodeForViewer, FSClient *client) {
|
|||||||
WUPS_MUST_REPLACE_FOR_PROCESS(SAVEInit, WUPS_LOADER_LIBRARY_NN_SAVE, SAVEInit, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
WUPS_MUST_REPLACE_FOR_PROCESS(SAVEInit, WUPS_LOADER_LIBRARY_NN_SAVE, SAVEInit, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
||||||
WUPS_MUST_REPLACE_FOR_PROCESS(LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb, WUPS_LOADER_LIBRARY_NN_ACT, LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
WUPS_MUST_REPLACE_FOR_PROCESS(LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb, WUPS_LOADER_LIBRARY_NN_ACT, LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
||||||
WUPS_MUST_REPLACE_FOR_PROCESS(FSGetLastErrorCodeForViewer, WUPS_LOADER_LIBRARY_COREINIT, FSGetLastErrorCodeForViewer, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
WUPS_MUST_REPLACE_FOR_PROCESS(FSGetLastErrorCodeForViewer, WUPS_LOADER_LIBRARY_COREINIT, FSGetLastErrorCodeForViewer, WUPS_FP_TARGET_PROCESS_WII_U_MENU);
|
||||||
WUPS_MUST_REPLACE(SAVEGetSharedSaveDataPath, WUPS_LOADER_LIBRARY_NN_SAVE, SAVEGetSharedSaveDataPath);
|
|
Loading…
Reference in New Issue
Block a user