mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-29 07:00:55 -04:00
78 lines
2.4 KiB
Lua
78 lines
2.4 KiB
Lua
-- Platform capability detection for console, mobile and desktop builds.
|
|
|
|
local Platform = {}
|
|
|
|
local cached
|
|
|
|
local function compute()
|
|
local osName = (love and love.system and love.system.getOS and love.system.getOS())
|
|
or "Unknown"
|
|
local nx = osName == "NX"
|
|
local uwp = osName == "UWP"
|
|
local mobile = osName == "Android" or osName == "iOS"
|
|
local nativePicker = love and love.system
|
|
and type(love.system.pickFile) == "function"
|
|
local nativeHttp = love and love.system
|
|
and type(love.system.httpDownload) == "function"
|
|
return {
|
|
os = osName,
|
|
nx = nx,
|
|
uwp = uwp,
|
|
mobile = mobile,
|
|
console = nx or uwp,
|
|
hasNativePicker = nativePicker,
|
|
canSpawnProcess = osName == "OS X" or osName == "Windows" or osName == "Linux",
|
|
romImportMode = nx and "save-directory"
|
|
or (nativePicker and "native-picker")
|
|
or "desktop",
|
|
networkValidated = not nx and not uwp,
|
|
-- networkValidated is the self-updater's gate and stays a per-platform
|
|
-- policy call: a console package cannot replace itself on disk, so that
|
|
-- answer never depends on whether a transport exists. Fetching a mod
|
|
-- index or a mod zip is the narrower question, and #876 showed the two
|
|
-- had been conflated, so Xbox lost the mod catalog for the updater's
|
|
-- reason. Desktop answers it with curl through HostShell; the mobile and
|
|
-- console ports answer it with the native love.system.httpDownload bridge
|
|
-- (#597). The UWP LOVE backend does not export that bridge yet, so this
|
|
-- still resolves false on Xbox and the launcher still says so, but the
|
|
-- day the backend grows one, nothing here or in RomImporter has to change.
|
|
canFetchRemote = (not nx and not uwp) or nativeHttp,
|
|
}
|
|
end
|
|
|
|
function Platform.detect()
|
|
if not cached then cached = compute() end
|
|
return cached
|
|
end
|
|
|
|
function Platform.isNX()
|
|
return Platform.detect().nx
|
|
end
|
|
|
|
function Platform.isUWP()
|
|
return Platform.detect().uwp
|
|
end
|
|
|
|
function Platform.romImportMode()
|
|
return Platform.detect().romImportMode
|
|
end
|
|
|
|
function Platform.canSpawnProcess()
|
|
return Platform.detect().canSpawnProcess
|
|
end
|
|
|
|
function Platform.networkValidated()
|
|
return Platform.detect().networkValidated
|
|
end
|
|
|
|
function Platform.canFetchRemote()
|
|
return Platform.detect().canFetchRemote
|
|
end
|
|
|
|
-- Tests may swap love.system between cases.
|
|
function Platform._resetForTests()
|
|
cached = nil
|
|
end
|
|
|
|
return Platform
|