feat(nx-mods): route chooseMod to inbox rescan on NX

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Andrew Quenehen
2026-08-01 05:22:08 -03:00
parent 43755c5457
commit e92bab6f4f
2 changed files with 28 additions and 0 deletions
+6
View File
@@ -1202,8 +1202,14 @@ end
-- Android mirrors ROM import: scan for a pending .zip in the save dir (USB -- Android mirrors ROM import: scan for a pending .zip in the save dir (USB
-- or a fresh SAF drop), else love.system.pickFile("mod") -> picked_mod.zip -- or a fresh SAF drop), else love.system.pickFile("mod") -> picked_mod.zip
-- which focus/Choose consumes on return. -- which focus/Choose consumes on return.
-- NX: no HostShell/desktop picker — rescan imports/mods/ inbox instead.
function RomImporter:chooseMod() function RomImporter:chooseMod()
if self.workState == "working" then return end if self.workState == "working" then return end
if self.isNX then
self:ensureModsInboxDir()
self:rescanModsAction()
return
end
if self.android then if self.android then
local name = findPendingMod(true, self.pickSkip) local name = findPendingMod(true, self.pickSkip)
if name then if name then
+22
View File
@@ -69,6 +69,7 @@ local function freshImporter()
scanModsInbox = RomImporter.scanModsInbox, scanModsInbox = RomImporter.scanModsInbox,
scanInbox = RomImporter.scanInbox, scanInbox = RomImporter.scanInbox,
rescanModsAction = RomImporter.rescanModsAction, rescanModsAction = RomImporter.rescanModsAction,
chooseMod = RomImporter.chooseMod,
_installMod = RomImporter._installMod, _installMod = RomImporter._installMod,
_refreshMods = function(self) _refreshMods = function(self)
self._refreshed = (self._refreshed or 0) + 1 self._refreshed = (self._refreshed or 0) + 1
@@ -184,11 +185,32 @@ check(not removed["imports/mods/b-good.zip"], "mixed: good zip retained")
check(love.filesystem.read("imports/mods/a-bad.zip") ~= nil, "mixed bad still present") check(love.filesystem.read("imports/mods/a-bad.zip") ~= nil, "mixed bad still present")
check(love.filesystem.read("imports/mods/b-good.zip") ~= nil, "mixed good still present") check(love.filesystem.read("imports/mods/b-good.zip") ~= nil, "mixed good still present")
-- NXMOD-05: chooseMod on NX routes to inbox rescan; no HostShell/chooseZip
local hostShellCalls = 0
package.loaded["src.core.HostShell"] = {
run = function()
hostShellCalls = hostShellCalls + 1
error("HostShell must not run on NX chooseMod")
end,
available = function() return false end,
}
ri = freshImporter()
installCalls = {}
love.filesystem.write("imports/mods/from-choose.zip", "CHOOSE")
installBehavior["imports/mods/from-choose.zip"] = { ok = true, id = "choose-mod" }
ri:chooseMod()
eq(hostShellCalls, 0, "NX chooseMod does not require HostShell")
eq(#installCalls, 1, "NX chooseMod rescans and installs inbox zip")
eq(installCalls[1], "imports/mods/from-choose.zip",
"NX chooseMod installs from imports/mods/")
check(ri.modNotice and ri.modNotice.ok, "NX chooseMod success notice")
-- Cleanup + restore stubs -- Cleanup + restore stubs
clearModsInbox() clearModsInbox()
love.filesystem.remove("imports/other.zip") love.filesystem.remove("imports/other.zip")
love.filesystem.remove("imports/modpack.zip") love.filesystem.remove("imports/modpack.zip")
package.loaded["src.mods.LauncherMods"] = nil package.loaded["src.mods.LauncherMods"] = nil
package.loaded["src.core.HostShell"] = nil
love.system.getOS = saved.getOS love.system.getOS = saved.getOS
love.filesystem.getSaveDirectory = saved.getSaveDirectory love.filesystem.getSaveDirectory = saved.getSaveDirectory
love.filesystem.createDirectory = saved.createDirectory love.filesystem.createDirectory = saved.createDirectory