summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/jni/game_metadata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/jni/game_metadata.cpp')
-rw-r--r--src/android/app/src/main/jni/game_metadata.cpp39
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"