diff options
Diffstat (limited to 'src/android/app/src/main/jni/game_metadata.cpp')
-rw-r--r-- | src/android/app/src/main/jni/game_metadata.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/android/app/src/main/jni/game_metadata.cpp b/src/android/app/src/main/jni/game_metadata.cpp index 24d9df702..78f604c70 100644 --- a/src/android/app/src/main/jni/game_metadata.cpp +++ b/src/android/app/src/main/jni/game_metadata.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include <core/core.h> +#include <core/file_sys/mode.h> #include <core/file_sys/patch_manager.h> #include <core/loader/nro.h> #include <jni.h> @@ -61,7 +62,11 @@ RomMetadata CacheRomMetadata(const std::string& path) { return entry; } -RomMetadata GetRomMetadata(const std::string& path) { +RomMetadata GetRomMetadata(const std::string& path, bool reload = false) { + if (reload) { + return CacheRomMetadata(path); + } + if (auto search = m_rom_metadata_cache.find(path); search != m_rom_metadata_cache.end()) { return search->second; } @@ -71,6 +76,32 @@ RomMetadata GetRomMetadata(const std::string& path) { extern "C" { +jboolean Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getIsValid(JNIEnv* env, jobject obj, + jstring jpath) { + const auto file = EmulationSession::GetInstance().System().GetFilesystem()->OpenFile( + GetJString(env, jpath), FileSys::Mode::Read); + if (!file) { + return false; + } + + auto loader = Loader::GetLoader(EmulationSession::GetInstance().System(), file); + if (!loader) { + return false; + } + + const auto file_type = loader->GetFileType(); + if (file_type == Loader::FileType::Unknown || file_type == Loader::FileType::Error) { + return false; + } + + u64 program_id = 0; + Loader::ResultStatus res = loader->ReadProgramId(program_id); + if (res != Loader::ResultStatus::Success) { + return false; + } + return true; +} + jstring Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getTitle(JNIEnv* env, jobject obj, jstring jpath) { return ToJString(env, GetRomMetadata(GetJString(env, jpath)).title); @@ -87,8 +118,8 @@ jstring Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getDeveloper(JNIEnv* env, job } jstring Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getVersion(JNIEnv* env, jobject obj, - jstring jpath) { - return ToJString(env, GetRomMetadata(GetJString(env, jpath)).version); + jstring jpath, jboolean jreload) { + return ToJString(env, GetRomMetadata(GetJString(env, jpath), jreload).version); } jbyteArray Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getIcon(JNIEnv* env, jobject obj, @@ -106,7 +137,7 @@ jboolean Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getIsHomebrew(JNIEnv* env, j } void Java_org_yuzu_yuzu_1emu_utils_GameMetadata_resetMetadata(JNIEnv* env, jobject obj) { - return m_rom_metadata_cache.clear(); + m_rom_metadata_cache.clear(); } } // extern "C" |