|
|
@@ -11,6 +11,7 @@ import kotlinx.serialization.json.Json
|
|
|
import org.yuzu.yuzu_emu.NativeLibrary
|
|
|
import org.yuzu.yuzu_emu.YuzuApplication
|
|
|
import org.yuzu.yuzu_emu.model.Game
|
|
|
+import org.yuzu.yuzu_emu.model.MinimalDocumentFile
|
|
|
|
|
|
object GameHelper {
|
|
|
const val KEY_GAME_PATH = "game_path"
|
|
|
@@ -29,15 +30,7 @@ object GameHelper {
|
|
|
// Ensure keys are loaded so that ROM metadata can be decrypted.
|
|
|
NativeLibrary.reloadKeys()
|
|
|
|
|
|
- val children = FileUtil.listFiles(context, gamesUri)
|
|
|
- for (file in children) {
|
|
|
- if (!file.isDirectory) {
|
|
|
- // Check that the file has an extension we care about before trying to read out of it.
|
|
|
- if (Game.extensions.contains(FileUtil.getExtension(file.uri))) {
|
|
|
- games.add(getGame(file.uri))
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ addGamesRecursive(games, FileUtil.listFiles(context, gamesUri), 3)
|
|
|
|
|
|
// Cache list of games found on disk
|
|
|
val serializedGames = mutableSetOf<String>()
|
|
|
@@ -52,6 +45,30 @@ object GameHelper {
|
|
|
return games.toList()
|
|
|
}
|
|
|
|
|
|
+ private fun addGamesRecursive(
|
|
|
+ games: MutableList<Game>,
|
|
|
+ files: Array<MinimalDocumentFile>,
|
|
|
+ depth: Int
|
|
|
+ ) {
|
|
|
+ if (depth <= 0) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ files.forEach {
|
|
|
+ if (it.isDirectory) {
|
|
|
+ addGamesRecursive(
|
|
|
+ games,
|
|
|
+ FileUtil.listFiles(YuzuApplication.appContext, it.uri),
|
|
|
+ depth - 1
|
|
|
+ )
|
|
|
+ } else {
|
|
|
+ if (Game.extensions.contains(FileUtil.getExtension(it.uri))) {
|
|
|
+ games.add(getGame(it.uri))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private fun getGame(uri: Uri): Game {
|
|
|
val filePath = uri.toString()
|
|
|
var name = NativeLibrary.getTitle(filePath)
|