added library reordering & prefix rename
This commit is contained in:
parent
f8ce9a9945
commit
aca9f839e3
13 changed files with 374 additions and 20 deletions
|
|
@ -171,10 +171,45 @@ function newGame({ id, name, exePath, workdir, mode }) {
|
|||
}
|
||||
}
|
||||
|
||||
// The registry array IS the library order, so a drag & drop reorder rewrites
|
||||
// it whole. Ids the caller did not send keep their relative order at the end:
|
||||
// a renderer that raced an import must never drop an entry.
|
||||
function reorderGames(ids) {
|
||||
const games = loadGames()
|
||||
const rest = new Map(games.map(g => [g.id, g]))
|
||||
const out = []
|
||||
for (const id of Array.isArray(ids) ? ids : []) {
|
||||
const g = rest.get(String(id))
|
||||
if (!g) continue
|
||||
rest.delete(String(id))
|
||||
out.push(g)
|
||||
}
|
||||
for (const g of games) if (rest.has(g.id)) out.push(g)
|
||||
saveGames(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// Follows a prefix rename through the app registry. Raw JSON on purpose:
|
||||
// loadGames()/saveGames() would resolve and re-relativize every path against
|
||||
// a prefix folder that was just renamed. The stored paths of prefix imports
|
||||
// are relative to the prefix root, so only the name reference changes.
|
||||
function renamePrefixRefs(oldName, newName) {
|
||||
const games = readJson(REGISTRY, [])
|
||||
let updated = 0
|
||||
for (const g of games) {
|
||||
if (g.prefix === oldName) {
|
||||
g.prefix = newName
|
||||
updated++
|
||||
}
|
||||
}
|
||||
if (updated) writeJson(REGISTRY, games)
|
||||
return updated
|
||||
}
|
||||
|
||||
function resolvePrefixDir(game) {
|
||||
if (game.prefix) return prefixPath(game.prefix)
|
||||
const defs = readJson(path.join(DIRS.DATA, 'prefixes.json'), { default: 'default', prefixes: [] })
|
||||
return prefixPath(defs.default || 'default')
|
||||
}
|
||||
|
||||
module.exports = { loadGames, saveGames, portableGame, getGame, addGame, updateGame, removeGame, loadSettings, saveSettings, newGame, newGameId, resolvePrefixDir, clearPlaytime, readPlaySeconds, writePlaySeconds, playtimeFile }
|
||||
module.exports = { loadGames, saveGames, portableGame, getGame, addGame, updateGame, removeGame, reorderGames, renamePrefixRefs, loadSettings, saveSettings, newGame, newGameId, resolvePrefixDir, clearPlaytime, readPlaySeconds, writePlaySeconds, playtimeFile }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue