mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-10-01 23:42:25 -04:00
feat(nx): Import save uses imports/saves inbox
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1434,8 +1434,15 @@ end
|
||||
|
||||
-- "Import save" button: open a native .sav picker and import the pick.
|
||||
-- Android mirrors ROM / mod import via love.system.pickFile("sav").
|
||||
-- NX: no HostShell/desktop picker — rescan imports/saves/ inbox instead.
|
||||
function RomImporter:chooseSaveImport(version)
|
||||
if self.workState == "working" then return end
|
||||
version = self:_resolveSaveVersion(version)
|
||||
if self.isNX then
|
||||
self:ensureSavesInboxDir()
|
||||
self:rescanSavesAction(version)
|
||||
return
|
||||
end
|
||||
if self.ios and love.system.getPickedFile then
|
||||
self.iosPendingKind = "sav"
|
||||
self.iosPendingVersion = version
|
||||
@@ -3749,6 +3756,8 @@ function RomImporter:_drawGamePanel(version, x, y, w, h, paged)
|
||||
sfHintText, sfHintCol = sfNotice.text, (sfNotice.ok and PAL.green or PAL.red)
|
||||
elseif locked then
|
||||
sfHintText, sfHintCol = "Not available yet.", PAL.warning
|
||||
elseif self.isNX then
|
||||
sfHintText, sfHintCol = self:_savesDefaultHint(), PAL.warning
|
||||
elseif self.android then
|
||||
sfHintText, sfHintCol =
|
||||
"Import or export a .sav with the system file picker.", PAL.warning
|
||||
@@ -4683,6 +4692,20 @@ function RomImporter:_modsDefaultHint()
|
||||
return Strings("Or drop a mod .zip onto the window.")
|
||||
end
|
||||
|
||||
function RomImporter:_savesDefaultHint()
|
||||
if self.isNX then
|
||||
local saveDir = love.filesystem.getSaveDirectory()
|
||||
local rel = RomImporter.mtpHintPath(saveDir)
|
||||
if rel ~= "" and rel:sub(-1) ~= "/" then rel = rel .. "/" end
|
||||
return Strings("Copy a .sav via MTP into %s/imports/saves/\n"
|
||||
.. "DBI MTP → 1: SD Card/%simports/saves/", saveDir, rel)
|
||||
end
|
||||
if self.android then
|
||||
return "Import or export a .sav with the system file picker."
|
||||
end
|
||||
return Strings("Import a .sav to a new slot, or export the active slot.")
|
||||
end
|
||||
|
||||
function RomImporter:_modsEmptyHint()
|
||||
if self.isNX then
|
||||
return Strings("No mods installed - copy a .zip into imports/mods/ "
|
||||
|
||||
@@ -83,6 +83,7 @@ local function freshImporter()
|
||||
exportSave = RomImporter.exportSave,
|
||||
_importSave = RomImporter._importSave,
|
||||
_savedropTarget = RomImporter._savedropTarget,
|
||||
_savesDefaultHint = RomImporter._savesDefaultHint,
|
||||
_refreshSlots = function(self, version)
|
||||
self._refreshed = (self._refreshed or 0) + 1
|
||||
self._refreshVersion = version
|
||||
@@ -268,6 +269,45 @@ hostShellCalls = 0
|
||||
ri:chooseSaveImport("red")
|
||||
eq(hostShellCalls, 0, "RES-06: NX chooseSaveImport does not require HostShell")
|
||||
|
||||
-- NXSAV-05: chooseSaveImport on NX rescans inbox
|
||||
ri = freshImporter()
|
||||
importCalls = {}
|
||||
hostShellCalls = 0
|
||||
love.filesystem.write("imports/saves/from-choose.sav", "CHOOSE")
|
||||
importBehavior["imports/saves/from-choose.sav"] = { ok = true, id = "slot-choose" }
|
||||
ri:chooseSaveImport("red")
|
||||
eq(hostShellCalls, 0, "NX chooseSaveImport does not use HostShell")
|
||||
eq(#importCalls, 1, "NX chooseSaveImport rescans and imports inbox .sav")
|
||||
eq(importCalls[1].source, "imports/saves/from-choose.sav",
|
||||
"NX chooseSaveImport imports from imports/saves/")
|
||||
check(ri.saveNotice.red and ri.saveNotice.red.ok, "NX chooseSaveImport success notice")
|
||||
|
||||
-- Empty chooseSaveImport still sets notice (RES-04 via Import save button)
|
||||
ri = freshImporter()
|
||||
importCalls = {}
|
||||
ri:chooseSaveImport("red")
|
||||
eq(#importCalls, 0, "empty NX chooseSaveImport does not import")
|
||||
check(ri.saveNotice.red ~= nil and ri.saveNotice.red.text:find("imports/saves/", 1, true),
|
||||
"empty NX chooseSaveImport sets MTP notice")
|
||||
|
||||
-- RES-11 / NXSAV-07: NX default SAVE FILES hint mentions imports/saves/
|
||||
ri = freshImporter()
|
||||
local defaultHint = ri:_savesDefaultHint()
|
||||
check(defaultHint:find("imports/saves/", 1, true),
|
||||
"RES-11: NX default hint mentions imports/saves/")
|
||||
check(defaultHint:find("DBI MTP", 1, true),
|
||||
"RES-11: NX default hint mentions DBI MTP")
|
||||
check(not defaultHint:find("system file picker", 1, true),
|
||||
"RES-11: NX default hint is not desktop picker wording")
|
||||
|
||||
-- Desktop keeps picker-oriented default hint (non-NX)
|
||||
local desk = setmetatable({
|
||||
isNX = false, android = false,
|
||||
_savesDefaultHint = RomImporter._savesDefaultHint,
|
||||
}, RomImporter)
|
||||
check(desk:_savesDefaultHint():find("new slot", 1, true),
|
||||
"desktop default save hint stays picker/drop-oriented")
|
||||
|
||||
-- Cleanup + restore stubs
|
||||
clearSavesInbox()
|
||||
love.filesystem.remove("imports/other.sav")
|
||||
|
||||
Reference in New Issue
Block a user