From 92c8bac71442a3c3da8d37f5f829b932340dd74b Mon Sep 17 00:00:00 2001 From: Adrian Castro <22133246+castdrian@users.noreply.github.com> Date: Sat, 1 Aug 2026 12:36:18 +0200 Subject: [PATCH] fix(ios): support direct picker results --- src/import/RomImporter.lua | 59 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/import/RomImporter.lua b/src/import/RomImporter.lua index 46a14a2f..808b0030 100644 --- a/src/import/RomImporter.lua +++ b/src/import/RomImporter.lua @@ -637,6 +637,8 @@ function RomImporter.new(onComplete, opts) -- Android SAF create-document: which game's SAVE FILES card should show -- "Save exported." when export_done.flag appears on focus. androidPendingExportVersion = nil, + iosPendingKind = nil, + iosPendingVersion = nil, -- Virtual pointer for handhelds / gamepads (Anbernic stock OS has no -- mouse). D-pad + left stick move it; A clicks; shoulders cycle tabs; -- right stick scrolls the save-slot / mods lists. @@ -1008,6 +1010,14 @@ end -- which focus/Choose consumes on return. function RomImporter:chooseMod() if self.workState == "working" then return end + if self.ios and love.system.getPickedFile then + self.iosPendingKind = "mod" + if not pickFile("mod") then + self.iosPendingKind = nil + self.modNotice = { ok = false, text = "Could not open the file picker." } + end + return + end if self.android then local name = findPendingMod(true, self.pickSkip) if name then @@ -1069,6 +1079,16 @@ end -- Android mirrors ROM / mod import via love.system.pickFile("sav"). function RomImporter:chooseSaveImport(version) if self.workState == "working" then return end + if self.ios and love.system.getPickedFile then + self.iosPendingKind = "sav" + self.iosPendingVersion = version + if not pickFile("sav") then + self.iosPendingKind = nil + self.iosPendingVersion = nil + self.saveNotice[version] = { ok = false, text = "Could not open the file picker." } + end + return + end if self.android then local name = findPendingSav(true, self.pickSkip) if name then @@ -1158,6 +1178,14 @@ end function RomImporter:choose(version) if self.workState == "working" then return end self.chooseVersion = version or "red" + if self.ios and love.system.getPickedFile then + self.iosPendingKind = "rom" + if not pickFile("rom") then + self.iosPendingKind = nil + self:setError("Could not open the file picker.") + end + return + end if self.android then -- Prefer a not-yet-imported .gb/.gbc already in the save dir (USB copy, or -- a fresh SAF pick). Never reuse an already-imported cart's file -- that @@ -1272,6 +1300,37 @@ end function RomImporter:update(dt) self.pulse = self.pulse + dt self:_updatePadCursor(dt) + if self.ios and love.system.getPickedFile and self.workState ~= "working" then + local path = love.system.getPickedFile() + if path then + local kind = self.iosPendingKind or "rom" + local version = self.iosPendingVersion + self.iosPendingKind = nil + self.iosPendingVersion = nil + if kind == "mod" then + self:_installMod(path) + elseif kind == "sav" then + self:_importSave(version or self:_savedropTarget(), path) + else + self:startPath(path) + end + elseif love.system.getPickError then + local errorText = love.system.getPickError() + if errorText then + local kind = self.iosPendingKind or "rom" + local version = self.iosPendingVersion or self:_savedropTarget() + self.iosPendingKind = nil + self.iosPendingVersion = nil + if kind == "mod" then + self.modNotice = { ok = false, text = errorText } + elseif kind == "sav" then + self.saveNotice[version] = { ok = false, text = errorText } + else + self:setError(errorText) + end + end + end + end self:_pollPickedFiles(dt) if self.workState ~= "working" or not self.worker then return end local started = love.timer.getTime()