Skip to content

Commit bea0179

Browse files
committed
feat: Reimplent -extract and --server parameters
fix: Wrap bad 400 set in error handler for fileserver
1 parent 03a4476 commit bea0179

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

src/back/GameLauncher.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,16 @@ function splitQuotes(str: string): string[] {
457457
return splits;
458458
}
459459

460+
export async function doGameDataParams(state: BackState, gameData: GameData, changeServer: (state: BackState, server?: string) => Promise<void>) {
461+
return handleGameDataParams({
462+
fpPath: state.config.flashpointPath,
463+
htdocsPath: state.preferences.htdocsFolderPath,
464+
dataPacksFolderPath: state.preferences.dataPacksFolderPath,
465+
sevenZipPath: state.sevenZipPath,
466+
changeServer: (server?: string) => changeServer(state, server),
467+
} as any as LaunchBaseOpts, undefined, gameData);
468+
}
469+
460470
async function handleGameDataParams(opts: LaunchBaseOpts, serverOverride?: string, gameData?: GameData) {
461471
if (gameData) {
462472
const mountParams = minimist(gameData.parameters?.split(' ') ?? []);

src/back/responses.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ import * as YAML from 'yaml';
6565
import { ConfigFile } from './ConfigFile';
6666
import { getAllApplicationPaths, getAllDevelopers, getAllLibraries, getAllPlayModes, getAllPublishers, getAllSeries, getAllStatuses, getTags, markGameSave } from './DatabaseCache';
6767
import { ExtConfigFile } from './ExtConfigFile';
68-
import { checkAndInstallPlatform, escapeArgsForShell, GameLauncher } from './GameLauncher';
68+
import { checkAndInstallPlatform, doGameDataParams, escapeArgsForShell, GameLauncher } from './GameLauncher';
6969
import { ManagedChildProcess } from './ManagedChildProcess';
7070
import { importAllMetaEdits } from './MetaEdit';
7171
import { DEFAULT_PLAYLIST_DATA, overwritePlaylistData, PlaylistFile } from './PlaylistFile';
@@ -710,6 +710,12 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
710710
const server = gameLaunchInfo.server || state.preferences.server;
711711
await changeServer(state, server);
712712

713+
// Handle server and extract data params
714+
const gameData = game.gameData?.find(gd => gd.id === game.activeDataId);
715+
if (gameData) {
716+
await doGameDataParams(state, gameData, changeServer);
717+
}
718+
713719
// Let the runner execute the game with the launch info
714720
await contentRunner.executeGame(gameLaunchInfo);
715721
await state.apiEmitters.games.onDidLaunchGame.fire(game);

src/back/util/FileServer.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ export class FileServer {
5959
Promise.resolve(handler(pathname, url, req, res))
6060
.catch((err) => {
6161
console.log(`FS Handler Error: ${err}`);
62-
res.writeHead(404);
63-
res.end();
62+
if (!res.writableEnded && !res.destroyed) {
63+
res.writeHead(404);
64+
res.end();
65+
}
6466
});
6567
} else {
6668
res.writeHead(404);

0 commit comments

Comments
 (0)