mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 18:54:14 +01:00 
			
		
		
		
	android: Clean up file extension checks
This commit is contained in:
		
							parent
							
								
									a67bdeb2c2
								
							
						
					
					
						commit
						0f31039831
					
				| @ -29,7 +29,6 @@ import org.yuzu.yuzu_emu.layout.AutofitGridLayoutManager | ||||
| import org.yuzu.yuzu_emu.model.Game | ||||
| import org.yuzu.yuzu_emu.model.GamesViewModel | ||||
| import org.yuzu.yuzu_emu.model.HomeViewModel | ||||
| import org.yuzu.yuzu_emu.utils.FileUtil | ||||
| 
 | ||||
| class SearchFragment : Fragment() { | ||||
|     private var _binding: FragmentSearchBinding? = null | ||||
| @ -128,10 +127,7 @@ class SearchFragment : Fragment() { | ||||
| 
 | ||||
|             R.id.chip_homebrew -> baseList.filter { it.isHomebrew } | ||||
| 
 | ||||
|             R.id.chip_retail -> baseList.filter { | ||||
|                 FileUtil.hasExtension(it.path, "xci") || | ||||
|                     FileUtil.hasExtension(it.path, "nsp") | ||||
|             } | ||||
|             R.id.chip_retail -> baseList.filter { !it.isHomebrew } | ||||
| 
 | ||||
|             else -> baseList | ||||
|         } | ||||
|  | ||||
| @ -43,7 +43,7 @@ class Game( | ||||
| 
 | ||||
|     companion object { | ||||
|         val extensions: Set<String> = HashSet( | ||||
|             listOf(".xci", ".nsp", ".nca", ".nro") | ||||
|             listOf("xci", "nsp", "nca", "nro") | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -294,7 +294,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider { | ||||
|                 return@registerForActivityResult | ||||
|             } | ||||
| 
 | ||||
|             if (!FileUtil.hasExtension(result, "keys")) { | ||||
|             if (FileUtil.getExtension(result) != "keys") { | ||||
|                 MessageDialogFragment.newInstance( | ||||
|                     R.string.reading_keys_failure, | ||||
|                     R.string.install_prod_keys_failure_extension_description | ||||
| @ -391,7 +391,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider { | ||||
|                 return@registerForActivityResult | ||||
|             } | ||||
| 
 | ||||
|             if (!FileUtil.hasExtension(result, "bin")) { | ||||
|             if (FileUtil.getExtension(result) != "bin") { | ||||
|                 MessageDialogFragment.newInstance( | ||||
|                     R.string.reading_keys_failure, | ||||
|                     R.string.install_amiibo_keys_failure_extension_description | ||||
|  | ||||
| @ -7,7 +7,6 @@ import android.content.Context | ||||
| import android.database.Cursor | ||||
| import android.net.Uri | ||||
| import android.provider.DocumentsContract | ||||
| import android.provider.OpenableColumns | ||||
| import androidx.documentfile.provider.DocumentFile | ||||
| import java.io.BufferedInputStream | ||||
| import java.io.File | ||||
| @ -185,19 +184,18 @@ object FileUtil { | ||||
| 
 | ||||
|     /** | ||||
|      * Get file display name from given path | ||||
|      * @param path content uri path | ||||
|      * @param uri content uri | ||||
|      * @return String display name | ||||
|      */ | ||||
|     fun getFilename(context: Context, path: String): String { | ||||
|         val resolver = context.contentResolver | ||||
|     fun getFilename(uri: Uri): String { | ||||
|         val resolver = YuzuApplication.appContext.contentResolver | ||||
|         val columns = arrayOf( | ||||
|             DocumentsContract.Document.COLUMN_DISPLAY_NAME | ||||
|         ) | ||||
|         var filename = "" | ||||
|         var c: Cursor? = null | ||||
|         try { | ||||
|             val mUri = Uri.parse(path) | ||||
|             c = resolver.query(mUri, columns, null, null, null) | ||||
|             c = resolver.query(uri, columns, null, null, null) | ||||
|             c!!.moveToNext() | ||||
|             filename = c.getString(0) | ||||
|         } catch (e: Exception) { | ||||
| @ -326,25 +324,9 @@ object FileUtil { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun hasExtension(path: String, extension: String): Boolean = | ||||
|         path.substring(path.lastIndexOf(".") + 1).contains(extension) | ||||
| 
 | ||||
|     fun hasExtension(uri: Uri, extension: String): Boolean { | ||||
|         val fileName: String? | ||||
|         val cursor = YuzuApplication.appContext.contentResolver.query(uri, null, null, null, null) | ||||
|         val nameIndex = cursor?.getColumnIndex(OpenableColumns.DISPLAY_NAME) | ||||
|         cursor?.moveToFirst() | ||||
| 
 | ||||
|         if (nameIndex == null) { | ||||
|             return false | ||||
|         } | ||||
| 
 | ||||
|         fileName = cursor.getString(nameIndex) | ||||
|         cursor.close() | ||||
| 
 | ||||
|         if (fileName == null) { | ||||
|             return false | ||||
|         } | ||||
|         return fileName.substring(fileName.lastIndexOf(".") + 1).contains(extension) | ||||
|     fun getExtension(uri: Uri): String { | ||||
|         val fileName = getFilename(uri) | ||||
|         return fileName.substring(fileName.lastIndexOf(".") + 1) | ||||
|             .lowercase() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -6,7 +6,6 @@ package org.yuzu.yuzu_emu.utils | ||||
| import android.content.SharedPreferences | ||||
| import android.net.Uri | ||||
| import androidx.preference.PreferenceManager | ||||
| import java.util.* | ||||
| import kotlinx.serialization.encodeToString | ||||
| import kotlinx.serialization.json.Json | ||||
| import org.yuzu.yuzu_emu.NativeLibrary | ||||
| @ -33,15 +32,9 @@ object GameHelper { | ||||
|         val children = FileUtil.listFiles(context, gamesUri) | ||||
|         for (file in children) { | ||||
|             if (!file.isDirectory) { | ||||
|                 val filename = file.uri.toString() | ||||
|                 val extensionStart = filename.lastIndexOf('.') | ||||
|                 if (extensionStart > 0) { | ||||
|                     val fileExtension = filename.substring(extensionStart) | ||||
| 
 | ||||
|                     // Check that the file has an extension we care about before trying to read out of it. | ||||
|                     if (Game.extensions.contains(fileExtension.lowercase(Locale.getDefault()))) { | ||||
|                         games.add(getGame(filename)) | ||||
|                     } | ||||
|                 // 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)) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @ -59,21 +52,19 @@ object GameHelper { | ||||
|         return games.toList() | ||||
|     } | ||||
| 
 | ||||
|     private fun getGame(filePath: String): Game { | ||||
|     private fun getGame(uri: Uri): Game { | ||||
|         val filePath = uri.toString() | ||||
|         var name = NativeLibrary.getTitle(filePath) | ||||
| 
 | ||||
|         // If the game's title field is empty, use the filename. | ||||
|         if (name.isEmpty()) { | ||||
|             name = filePath.substring(filePath.lastIndexOf("/") + 1) | ||||
|             name = FileUtil.getFilename(uri) | ||||
|         } | ||||
|         var gameId = NativeLibrary.getGameId(filePath) | ||||
| 
 | ||||
|         // If the game's ID field is empty, use the filename without extension. | ||||
|         if (gameId.isEmpty()) { | ||||
|             gameId = filePath.substring( | ||||
|                 filePath.lastIndexOf("/") + 1, | ||||
|                 filePath.lastIndexOf(".") | ||||
|             ) | ||||
|             gameId = name.substring(0, name.lastIndexOf(".")) | ||||
|         } | ||||
| 
 | ||||
|         val newGame = Game( | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user