From 2fc7671eaf9089d2b5d0a586e98120d786159e9a Mon Sep 17 00:00:00 2001 From: OatmealDome Date: Sun, 9 Jan 2022 15:51:07 -0500 Subject: [PATCH] WiiUtils: Add doOnlineUpdate() function --- .../dolphinemu/dolphinemu/utils/WiiUtils.java | 2 ++ Source/Android/jni/WiiUtils.cpp | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java index 560a5d9727..2366eba33d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java @@ -25,4 +25,6 @@ public final class WiiUtils public static native int importWiiSave(String file, BooleanSupplier canOverwrite); public static native void importNANDBin(String file); + + public static native int doOnlineUpdate(String region, WiiUpdateCallback callback); } diff --git a/Source/Android/jni/WiiUtils.cpp b/Source/Android/jni/WiiUtils.cpp index f372f65229..8745d98bdd 100644 --- a/Source/Android/jni/WiiUtils.cpp +++ b/Source/Android/jni/WiiUtils.cpp @@ -8,6 +8,7 @@ #include "jni/AndroidCommon/AndroidCommon.h" #include "jni/AndroidCommon/IDCache.h" +#include "Common/ScopeGuard.h" #include "Core/HW/WiiSave.h" #include "Core/WiiUtils.h" #include "DiscIO/NANDImporter.h" @@ -108,4 +109,23 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_utils_WiiUtils_importNANDB return ""; }); } + +JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_utils_WiiUtils_doOnlineUpdate( + JNIEnv* env, jclass, jstring jRegion, jobject jCallback) +{ + const std::string region = GetJString(env, jRegion); + + jobject jCallbackGlobal = env->NewGlobalRef(jCallback); + Common::ScopeGuard scope_guard([jCallbackGlobal, env] { env->DeleteGlobalRef(jCallbackGlobal); }); + + const auto callback = [&jCallbackGlobal](int processed, int total, u64 title_id) { + JNIEnv* env = IDCache::GetEnvForThread(); + return static_cast(env->CallBooleanMethod( + jCallbackGlobal, IDCache::GetWiiUpdateCallbackFunction(), processed, total, title_id)); + }; + + WiiUtils::UpdateResult result = WiiUtils::DoOnlineUpdate(callback, region); + + return ConvertUpdateResult(result); +} }