refactor: extract IPC channel names into a single source of truth

Duplicate raw string literals across handlers.ts, preload/index.ts made
typos undetectable at compile time and renames a multi-file grep problem.
A single channels.ts now owns all channel names; both files import from it.

Also fixes two bugs found during testing:
- LoginScreen and AccountScreen buttons were not triggerable via gamepad
  A-button: synthetic KeyboardEvents are untrusted and don't fire native
  button clicks. Added explicit keydown handlers that call the action directly.
- AppShell loading overlay could disappear while hlsPayload was still null
  if the playback:event 'started' IPC message arrived before playback:hls-url.
  Overlay now stays visible until hlsPayload is set, regardless of playState.
This commit is contained in:
Andre
2026-05-14 12:57:29 +02:00
parent bb635366b2
commit 211174f889
8 changed files with 75 additions and 71 deletions
+36
View File
@@ -0,0 +1,36 @@
export const IPC = {
appQuit: 'app:quit',
authStatus: 'auth:get-status',
authStart: 'auth:start-device-flow',
authCancel: 'auth:cancel',
authLogout: 'auth:logout',
authConfigured: 'auth:is-configured',
/** main → renderer */
authEvent: 'auth:event',
twitchGetFollowed: 'twitch:get-followed',
twitchGetOwnUser: 'twitch:get-own-user',
twitchGetVideos: 'twitch:get-videos',
twitchGetTopGames: 'twitch:get-top-games',
twitchGetTopStreams: 'twitch:get-top-streams',
twitchGetVodChapters: 'twitch:get-vod-chapters',
historyGetProgress: 'history:get-progress',
playbackStartLive: 'playback:start-live',
playbackStartVod: 'playback:start-vod',
playbackStop: 'playback:stop',
playbackPause: 'playback:pause',
playbackReportPosition: 'playback:report-position',
playbackGetQualities: 'playback:get-qualities',
/** main → renderer */
playbackEvent: 'playback:event',
/** main → renderer: HLS-URL + Metadaten für den Renderer-seitigen Video-Player */
playbackHlsUrl: 'playback:hls-url',
appGetCacheSize: 'app:get-cache-size',
appClearCache: 'app:clear-cache',
appSetHlsCacheEnabled: 'app:set-hls-cache-enabled',
/** main → renderer */
gamepadInput: 'gamepad-input'
} as const
+2 -33
View File
@@ -8,40 +8,9 @@ import type { PlaybackService } from '../playback/playbackService'
import type { HlsUrlPayload } from '../playback/playbackService'
import type { PlaybackEvent } from '../playback/types'
import { getProgressMap } from '../store/historyRepo'
import { IPC } from './channels'
export const IPC = {
appQuit: 'app:quit',
authStatus: 'auth:get-status',
authStart: 'auth:start-device-flow',
authCancel: 'auth:cancel',
authLogout: 'auth:logout',
authConfigured: 'auth:is-configured',
/** main → renderer */
authEvent: 'auth:event',
twitchGetFollowed: 'twitch:get-followed',
twitchGetOwnUser: 'twitch:get-own-user',
twitchGetVideos: 'twitch:get-videos',
twitchGetTopGames: 'twitch:get-top-games',
twitchGetTopStreams: 'twitch:get-top-streams',
twitchGetVodChapters: 'twitch:get-vod-chapters',
historyGetProgress: 'history:get-progress',
playbackStartLive: 'playback:start-live',
playbackStartVod: 'playback:start-vod',
playbackStop: 'playback:stop',
playbackPause: 'playback:pause',
playbackReportPosition: 'playback:report-position',
playbackGetQualities: 'playback:get-qualities',
/** main → renderer */
playbackEvent: 'playback:event',
/** main → renderer: HLS-URL + Metadaten für den Renderer-seitigen Video-Player */
playbackHlsUrl: 'playback:hls-url',
appGetCacheSize: 'app:get-cache-size',
appClearCache: 'app:clear-cache',
appSetHlsCacheEnabled: 'app:set-hls-cache-enabled'
} as const
export { IPC }
export function registerIpcHandlers(
auth: AuthService,