|
|
|
@ -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"
|
|
|
|
|