From 82a25de4eab577bf636b7fc53a26284403995d61 Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Wed, 6 Dec 2023 18:19:19 +1030 Subject: [PATCH] Update file pickers to allow .smc --- data/html5_file_picker.js | 6 +++++- globals.gd | 19 +++++++++++++++++++ widgets/RomSelect.gd | 25 +++++++------------------ widgets/WebFileSelect.gd | 25 +++++++------------------ 4 files changed, 38 insertions(+), 37 deletions(-) diff --git a/data/html5_file_picker.js b/data/html5_file_picker.js index 06b8378..e9a37fd 100644 --- a/data/html5_file_picker.js +++ b/data/html5_file_picker.js @@ -1,10 +1,14 @@ +var _snes_types = "application/vnd.nintendo.snes.rom,.sfc,.smc,.srm"; +var _psx_types = "application/x-cd-image,application/x-iso9660-image,.bin,.iso"; +var _gba_types = "application/x-gba-rom,.gba"; +var _accepted_types = _snes_types+","+_psx_types+","+_gba_types; var _FilePicker = {}; var _FilePickerData = {}; _FilePicker.upload = function(gd_callback) { // canceled = true; var input = document.createElement('INPUT'); input.setAttribute("type", "file"); - input.setAttribute("accept", ".sfc,.srm,.gba,.bin,.iso"); + input.setAttribute("accept", _accepted_types); input.setAttribute("multiple", ""); input.click(); input.addEventListener('change', event => { diff --git a/globals.gd b/globals.gd index 99e8003..8d42c01 100644 --- a/globals.gd +++ b/globals.gd @@ -2,6 +2,25 @@ extends Node const INDEX_FORMAT := Image.FORMAT_L8 +const FOLDER_ICON := preload('res://theme/icons/file_folder.tres') +const ALLOWED_EXTS := PoolStringArray(['bin', 'iso', 'sfc', 'smc', 'srm', 'gba']) +const CD_EXTS := PoolStringArray(['bin', 'iso']) # If you have a weird disc image format, you can mount it yourself, leave me out of it +const EXT_ICONS := { + 'bin': preload('res://theme/icons/file_binary.tres'), + 'iso': preload('res://theme/icons/file_disc.tres'), + 'sfc': preload('res://theme/icons/file_cart.tres'), + 'smc': preload('res://theme/icons/file_cart.tres'), + 'gba': preload('res://theme/icons/file_cart.tres'), +} +const TYPE_DESCS := { + 'bin': 'Binary', + 'iso': 'CD-ROM Image', + 'sfc': 'SNES ROM', + 'smc': 'SNES ROM', + 'gba': 'GBA ROM', + 'srm': 'SNES Savefile' +} + var time = 0.0 var time_mult = 1.0 diff --git a/widgets/RomSelect.gd b/widgets/RomSelect.gd index 392349a..e92b704 100644 --- a/widgets/RomSelect.gd +++ b/widgets/RomSelect.gd @@ -3,22 +3,11 @@ extends PanelContainer signal continue_pressed -const FOLDER_ICON := preload('res://theme/icons/file_folder.tres') -const ALLOWED_EXTS := PoolStringArray(['bin', 'iso', 'sfc', 'srm', 'gba']) -const CD_EXTS := PoolStringArray(['bin', 'iso']) # If you have a weird disc image format, you can mount it yourself, leave me out of it -var EXT_ICONS := { # Dicts can't be const - 'bin': preload('res://theme/icons/file_binary.tres'), - 'iso': preload('res://theme/icons/file_disc.tres'), - 'sfc': preload('res://theme/icons/file_cart.tres'), - 'gba': preload('res://theme/icons/file_cart.tres'), -} -var TYPE_DESCS := { # Dicts can't be const - 'bin': 'Binary', - 'iso': 'CD-ROM Image', - 'sfc': 'SNES ROM', - 'gba': 'GBA ROM', - 'srm': 'SNES Savefile' -} +const FOLDER_ICON := globals.FOLDER_ICON +const ALLOWED_EXTS := globals.ALLOWED_EXTS +const CD_EXTS := globals.CD_EXTS +const EXT_ICONS := globals.EXT_ICONS +const TYPE_DESCS := globals.TYPE_DESCS var cached_cd_bin_paths := {} var dir := Directory.new() @@ -119,7 +108,7 @@ func load_file(entry: String): var filename := dir.get_current_dir() + '/' + entry var ext = entry.rsplit('.', true, 1)[1].to_lower() match ext: - 'sfc': + 'sfc', 'smc': RomLoader.load_snes_rom(filename) func activate_entry(entry: String, _index: int = -1): @@ -179,7 +168,7 @@ func view_entry(entry: String, index: int = -1): lbl_filesize_content.text = human_size lbl_fileinfo_header.modulate = active_modulate_color if prodcode else inactive_modulate_color lbl_fileinfo_content.text = prodcode - btn_ok.disabled = (ext != 'sfc') # Only allow opening snes roms for now + btn_ok.disabled = (ext != 'sfc' and ext != 'smc') # Only allow opening snes roms for now func init_labels(): lbl_filename_header.modulate = inactive_modulate_color diff --git a/widgets/WebFileSelect.gd b/widgets/WebFileSelect.gd index f9b972f..6a39195 100644 --- a/widgets/WebFileSelect.gd +++ b/widgets/WebFileSelect.gd @@ -3,22 +3,11 @@ extends PanelContainer signal continue_pressed -const FOLDER_ICON := preload('res://theme/icons/file_folder.tres') -const ALLOWED_EXTS := PoolStringArray(['bin', 'iso', 'sfc', 'srm', 'gba']) -const CD_EXTS := PoolStringArray(['bin', 'iso']) # If you have a weird disc image format, you can mount it yourself, leave me out of it -var EXT_ICONS := { # Dicts can't be const - 'bin': preload('res://theme/icons/file_binary.tres'), - 'iso': preload('res://theme/icons/file_disc.tres'), - 'sfc': preload('res://theme/icons/file_cart.tres'), - 'gba': preload('res://theme/icons/file_cart.tres'), -} -var TYPE_DESCS := { # Dicts can't be const - 'bin': 'Binary', - 'iso': 'CD-ROM Image', - 'sfc': 'SNES ROM', - 'gba': 'GBA ROM', - 'srm': 'SNES Savefile' -} +const FOLDER_ICON := globals.FOLDER_ICON +const ALLOWED_EXTS := globals.ALLOWED_EXTS +const CD_EXTS := globals.CD_EXTS +const EXT_ICONS := globals.EXT_ICONS +const TYPE_DESCS := globals.TYPE_DESCS var uploaded_files := {} # filename: data var uploaded_files_types := {} # filename: type @@ -78,7 +67,7 @@ func update_view(): func load_file(entry: String): var ext = entry.rsplit('.', true, 1)[1].to_lower() match ext: - 'sfc': + 'sfc', 'smc': RomLoader.load_snes_rom_from_bytes(uploaded_files[entry]) func activate_entry(entry: String, _index: int = -1): @@ -119,7 +108,7 @@ func view_entry(entry: String, _index: int = -1): lbl_filesize_content.text = human_size lbl_fileinfo_header.modulate = active_modulate_color if prodcode else inactive_modulate_color lbl_fileinfo_content.text = prodcode - btn_ok.disabled = (ext != 'sfc') # Only allow opening snes roms for now + btn_ok.disabled = (ext != 'sfc' and ext != 'smc') # Only allow opening snes roms for now func init_labels(): lbl_filename_header.modulate = inactive_modulate_color