Skip to content

Commit 3f65e43

Browse files
committed
fix: Add missing shiftRandomGames() call to rollRandomGames()
refactor: Minimized frequency of preference updates sent refactor: Let clients apply partial preference updates instead of sending the entire state from back each time refactor: Little bits of maintenance on older backend code
1 parent c265029 commit 3f65e43

File tree

8 files changed

+34
-25
lines changed

8 files changed

+34
-25
lines changed

src/back/extensions/ApiImplementation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ export function createApiFactory(extId: string, extManifest: IExtensionManifest,
6767
data: flashpoint.DeepPartial<flashpoint.AppPreferencesData>,
6868
onError?: (error: string) => void
6969
) => {
70+
state.socketServer.broadcast(BackOut.UPDATE_PREFERENCES, data);
7071
overwritePreferenceData(state.preferences, data, onError);
7172
await PreferencesFile.saveFile(path.join(state.configFolder, PREFERENCES_FILENAME), state.preferences, state);
72-
state.socketServer.broadcast(BackOut.UPDATE_PREFERENCES_RESPONSE, state.preferences);
7373
return state.preferences;
7474
};
7575

src/back/index.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,8 @@ async function prepForInit(initConfig: BackInitArgs): Promise<void> {
408408
: path.join(process.platform == 'darwin' ? state.configFolder : path.dirname(initConfig.exePath), 'launcher.log'));
409409

410410
const addLog = (entry: flashpoint.ILogEntry): number => { return state.log.push(entry) - 1; };
411-
global.log = {
411+
// Typescript get supset here despite it working globally elsewhere :(
412+
(global as any).log = {
412413
trace: logFactory(LogLevel.TRACE, state.socketServer, addLog, state.logFile, state.verbose, state.apiEmitters.onLog),
413414
debug: logFactory(LogLevel.DEBUG, state.socketServer, addLog, state.logFile, state.verbose, state.apiEmitters.onLog),
414415
info: logFactory(LogLevel.INFO, state.socketServer, addLog, state.logFile, state.verbose, state.apiEmitters.onLog),
@@ -564,7 +565,7 @@ async function prepForInit(initConfig: BackInitArgs): Promise<void> {
564565
// Add event listeners
565566
state.languageWatcher.on('add', onLangAddOrChange);
566567
state.languageWatcher.on('change', onLangAddOrChange);
567-
state.languageWatcher.on('remove', (filename: string, offsetPath: string) => {
568+
state.languageWatcher.on('remove', (filename: string, stats: fs.Stats, offsetPath: string) => {
568569
state.languageQueue.push(() => {
569570
const filePath = path.join(state.languageWatcher.getFolder() || '', offsetPath, filename);
570571
const index = state.languages.findIndex(l => l.filename === filePath);
@@ -773,7 +774,7 @@ async function prepForInit(initConfig: BackInitArgs): Promise<void> {
773774
// Exit if it failed to open the server
774775
if (state.socketServer.port < 0) {
775776
console.log('Back - Failed to open Socket Server, Exiting...');
776-
setImmediate(exit);
777+
setImmediate(() => exit(state));
777778
return;
778779
}
779780

@@ -786,10 +787,14 @@ async function prepForInit(initConfig: BackInitArgs): Promise<void> {
786787
await promiseSleep(3000);
787788

788789
// Respond
789-
send({ port: state.socketServer.port, config: state.config, prefs: state.preferences }, () => {
790-
console.log('Back - Ready for Init');
791-
state.apiEmitters.onDidInit.fire();
792-
});
790+
if (process.send) {
791+
process.send({ port: state.socketServer.port, config: state.config, prefs: state.preferences }, undefined, undefined,
792+
() => {
793+
console.log('Back - Ready for Init');
794+
state.apiEmitters.onDidInit.fire();
795+
});
796+
}
797+
793798
}
794799

795800
async function onProcessMessage(message: any): Promise<void> {
@@ -1037,7 +1042,7 @@ async function initialize() {
10371042
const msg = formatString(state.languageContainer.dialog.badAntiVirus, output.trim()) as string;
10381043
const client = state.socketServer.clients.clients[state.socketServer.clients.clients.length - 1]; // Latest client
10391044
const func = state.socketServer.showMessageBoxBack(state, client);
1040-
const dialogId = await func({
1045+
const dialogId = func({
10411046
message: msg,
10421047
largeMessage: true,
10431048
buttons: [state.languageContainer.dialog.openWiki, state.languageContainer.dialog.openDiscord, state.languageContainer.dialog.doNotShowAgain],

src/back/responses.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,9 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
529529
state.prefsQueue.push(() => {
530530
PreferencesFile.saveFile(path.join(state.config.flashpointPath, PREFERENCES_FILENAME), state.preferences, state);
531531
});
532-
state.socketServer.broadcast(BackOut.UPDATE_PREFERENCES_RESPONSE, state.preferences);
532+
state.socketServer.broadcast(BackOut.UPDATE_PREFERENCES, {
533+
gameDataSources: state.preferences.gameMetadataSources
534+
});
533535
}
534536

535537
updateToast('Updating Search Suggestions...');
@@ -1459,6 +1461,8 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
14591461
});
14601462

14611463
state.socketServer.register(BackIn.UPDATE_PREFERENCES, async (event, data) => {
1464+
state.socketServer.broadcastExcept(event.client, BackOut.UPDATE_PREFERENCES, data);
1465+
14621466
if ((data.currentLanguage !== undefined && data.currentLanguage !== state.preferences.currentLanguage) ||
14631467
(data.fallbackLanguage !== undefined && data.fallbackLanguage !== state.preferences.fallbackLanguage)) {
14641468
state.languageContainer = createContainer(
@@ -1474,8 +1478,6 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
14741478
state.prefsQueue.push(() => {
14751479
PreferencesFile.saveFile(path.join(state.config.flashpointPath, PREFERENCES_FILENAME), state.preferences, state);
14761480
});
1477-
1478-
// TODO: Broadcast to all other users
14791481
});
14801482

14811483
state.socketServer.register(BackIn.SERVICE_ACTION, async (event, action, id) => {

src/back/util/misc.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { AdditionalApp, Game, IBackProcessInfo, IService, LangContainer, LangFil
1717
import * as fs from 'fs-extra';
1818
import * as path from 'node:path';
1919
import * as os from 'os';
20-
import * as kill from 'tree-kill';
2120
import { promisify } from 'util';
2221
import { uuid } from './uuid';
2322

@@ -189,15 +188,6 @@ export async function exit(state: BackState, beforeProcessExit?: () => void | Pr
189188
state.socketServer.close()
190189
.catch(e => { console.error(e); });
191190

192-
await new Promise<void>((resolve, reject) => {
193-
kill(process.pid, (error) => {
194-
if (error) {
195-
reject(error);
196-
} else {
197-
resolve();
198-
}
199-
});
200-
});
201191
// Kill the parent process.
202192
process.kill(process.pid);
203193
process.exit(0);

src/renderer/components/HomePageComponents.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { createSelector } from '@reduxjs/toolkit';
22
import { useView } from '@renderer/hooks/search';
33
import { useAppDispatch, useAppSelector } from '@renderer/hooks/useAppSelector';
44
import { useLocalization } from '@renderer/hooks/useLocalization';
5-
import { addRandomGames, RANDOM_GAME_ROW_COUNT, setMainState } from '@renderer/store/main/slice';
5+
import { addRandomGames, RANDOM_GAME_ROW_COUNT, setMainState, shiftRandomGames } from '@renderer/store/main/slice';
66
import { forceSearch, GENERAL_VIEW_ID, selectGame, setSearchText } from '@renderer/store/search/slice';
77
import { findGameDragEventDataGrid, getExtremeIconURL, getPlatformIconURL, joinLibraryRoute } from '@renderer/Util';
88
import { idToGame } from '@renderer/util/async';
@@ -335,6 +335,8 @@ export function HomePageComponentRandomGames(props: HomePageComponentProps) {
335335
dispatch(addRandomGames(data));
336336
});
337337
}
338+
// Cycle row of games
339+
dispatch(shiftRandomGames());
338340
};
339341

340342
const onSelectGame = async (gameId?: string) => {

src/renderer/components/app.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { performFpfssAction, setFpfssUser } from '@renderer/store/fpfss/slice';
1212
import { pushHistory } from '@renderer/store/history/slice';
1313
import { addLogEntries, setEntries } from '@renderer/store/logs/slice';
1414
import { addCustomRoute, addGameSidebarComponent, addLoaded, addNewExtension, cancelDialog, changeService, createDialog, openDynamicPage, removeCustomRoute, removeExtension, removeGameSidebarComponent, removeService, setExtConfigValue, setExtOrderablesFromCallback, setMainState, setUnrecoverableError, setUpdateInfo, updateDialog, updateDialogField, updateMetadataSource, updateSystemThemeCss, updateThemeCss } from '@renderer/store/main/slice';
15-
import { setExtState, setPreferences, updatePreferences } from '@renderer/store/preferences/slice';
15+
import { setExtState, setPreferences, updatePreferences, updatePreferencesWithoutSend } from '@renderer/store/preferences/slice';
1616
import { addData, createViews, GENERAL_VIEW_ID, resetDropdownData, updateGame } from '@renderer/store/search/slice';
1717
import store, { AppDispatch, RootState } from '@renderer/store/store';
1818
import { setTagCategories } from '@renderer/store/tagCategories/slice';
@@ -737,6 +737,10 @@ function registerWebsocketListeners(dispatch: AppDispatch) {
737737
}));
738738
});
739739

740+
window.Shared.back.register(BackOut.UPDATE_PREFERENCES, (event, data) => {
741+
dispatch(updatePreferencesWithoutSend(data));
742+
});
743+
740744
window.Shared.back.register(BackOut.UPDATE_PREFERENCES_RESPONSE, (event, data) => {
741745
dispatch(setPreferences(data));
742746
});

src/renderer/store/preferences/slice.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ const prefsSlice = createSlice({
4646
setPreferences(state: AppPreferencesData, { payload }: PayloadAction<AppPreferencesData>) {
4747
return payload;
4848
},
49+
updatePreferencesWithoutSend(state: AppPreferencesData, { payload }: PayloadAction<DeepPartial<AppPreferencesData>>) {
50+
overwritePreferenceData(state, payload);
51+
},
4952
updatePreferences(state: AppPreferencesData, { payload }: PayloadAction<DeepPartial<AppPreferencesData>>) {
5053
overwritePreferenceData(state, payload);
5154
},
@@ -175,6 +178,7 @@ export const { actions: preferencesActions } = prefsSlice;
175178
export const {
176179
setPreferences,
177180
updatePreferences,
181+
updatePreferencesWithoutSend,
178182
setHomePageBoxOpen,
179183
setUseStoredViews,
180184
setUseCustomViews,

src/shared/back/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import { UnrecoverableError } from 'flashpoint-launcher-renderer';
5454
import { UpdateOptions } from 'react-toastify';
5555
import { LogLevel } from '../Log/interface';
5656
import { Theme } from '../ThemeFile';
57-
import { ExecMapping, GamePropSuggestions, ProcessAction } from '../interfaces';
57+
import { DeepPartial, ExecMapping, GamePropSuggestions, ProcessAction } from '../interfaces';
5858

5959
export enum BackIn {
6060
UNKNOWN = 1000,
@@ -243,6 +243,7 @@ export enum BackOut {
243243
OPEN_EXTERNAL,
244244
LOCALE_UPDATE,
245245
GET_MAIN_INIT_DATA,
246+
UPDATE_PREFERENCES,
246247
UPDATE_PREFERENCES_RESPONSE,
247248
SET_EXT_CONFIG_VALUE,
248249
IMAGE_CHANGE,
@@ -518,6 +519,7 @@ export type BackOutTemplate = SocketTemplate<BackOut, {
518519
[BackOut.OPEN_EXTERNAL]: (url: string, options?: OpenExternalOptions) => void;
519520
[BackOut.LOCALE_UPDATE]: (data: string) => void;
520521
[BackOut.GET_MAIN_INIT_DATA]: () => void;
522+
[BackOut.UPDATE_PREFERENCES]: (data: DeepPartial<AppPreferencesData>) => void;
521523
[BackOut.UPDATE_PREFERENCES_RESPONSE]: (data: AppPreferencesData) => void;
522524
[BackOut.SET_EXT_CONFIG_VALUE]: (key: string, value: any) => void;
523525
[BackOut.IMAGE_CHANGE]: (folder: string, id: string) => void;

0 commit comments

Comments
 (0)