mirror of
				https://github.com/hydralauncher/hydra.git
				synced 2025-03-09 15:40:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// See the Electron documentation for details on how to use preload scripts:
 | 
						|
// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts
 | 
						|
import { contextBridge, ipcRenderer } from "electron";
 | 
						|
 | 
						|
import type {
 | 
						|
  CatalogueCategory,
 | 
						|
  GameShop,
 | 
						|
  TorrentProgress,
 | 
						|
  UserPreferences,
 | 
						|
} from "@types";
 | 
						|
 | 
						|
contextBridge.exposeInMainWorld("electron", {
 | 
						|
  /* Torrenting */
 | 
						|
  startGameDownload: (
 | 
						|
    repackId: number,
 | 
						|
    objectID: string,
 | 
						|
    title: string,
 | 
						|
    shop: GameShop,
 | 
						|
    downloadPath: string
 | 
						|
  ) =>
 | 
						|
    ipcRenderer.invoke(
 | 
						|
      "startGameDownload",
 | 
						|
      repackId,
 | 
						|
      objectID,
 | 
						|
      title,
 | 
						|
      shop,
 | 
						|
      downloadPath
 | 
						|
    ),
 | 
						|
  cancelGameDownload: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("cancelGameDownload", gameId),
 | 
						|
  pauseGameDownload: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("pauseGameDownload", gameId),
 | 
						|
  resumeGameDownload: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("resumeGameDownload", gameId),
 | 
						|
  onDownloadProgress: (cb: (value: TorrentProgress) => void) => {
 | 
						|
    const listener = (
 | 
						|
      _event: Electron.IpcRendererEvent,
 | 
						|
      value: TorrentProgress
 | 
						|
    ) => cb(value);
 | 
						|
    ipcRenderer.on("on-download-progress", listener);
 | 
						|
    return () => ipcRenderer.removeListener("on-download-progress", listener);
 | 
						|
  },
 | 
						|
 | 
						|
  /* Catalogue */
 | 
						|
  searchGames: (query: string) => ipcRenderer.invoke("searchGames", query),
 | 
						|
  getCatalogue: (category: CatalogueCategory) =>
 | 
						|
    ipcRenderer.invoke("getCatalogue", category),
 | 
						|
  getGameShopDetails: (objectID: string, shop: GameShop, language: string) =>
 | 
						|
    ipcRenderer.invoke("getGameShopDetails", objectID, shop, language),
 | 
						|
  getRandomGame: () => ipcRenderer.invoke("getRandomGame"),
 | 
						|
  getHowLongToBeat: (objectID: string, shop: GameShop, title: string) =>
 | 
						|
    ipcRenderer.invoke("getHowLongToBeat", objectID, shop, title),
 | 
						|
  getGames: (take?: number, prevCursor?: number) =>
 | 
						|
    ipcRenderer.invoke("getGames", take, prevCursor),
 | 
						|
 | 
						|
  /* User preferences */
 | 
						|
  getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"),
 | 
						|
  updateUserPreferences: (preferences: UserPreferences) =>
 | 
						|
    ipcRenderer.invoke("updateUserPreferences", preferences),
 | 
						|
 | 
						|
  /* Library */
 | 
						|
  addGameToLibrary: (
 | 
						|
    objectID: string,
 | 
						|
    title: string,
 | 
						|
    shop: GameShop,
 | 
						|
    executablePath: string
 | 
						|
  ) =>
 | 
						|
    ipcRenderer.invoke(
 | 
						|
      "addGameToLibrary",
 | 
						|
      objectID,
 | 
						|
      title,
 | 
						|
      shop,
 | 
						|
      executablePath
 | 
						|
    ),
 | 
						|
  getLibrary: () => ipcRenderer.invoke("getLibrary"),
 | 
						|
  getRepackersFriendlyNames: () =>
 | 
						|
    ipcRenderer.invoke("getRepackersFriendlyNames"),
 | 
						|
  openGameInstaller: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("openGameInstaller", gameId),
 | 
						|
  openGame: (gameId: number, executablePath: string) =>
 | 
						|
    ipcRenderer.invoke("openGame", gameId, executablePath),
 | 
						|
  closeGame: (gameId: number) => ipcRenderer.invoke("closeGame", gameId),
 | 
						|
  removeGameFromLibrary: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("removeGameFromLibrary", gameId),
 | 
						|
  removeGameFromDownload: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("removeGameFromDownload", gameId),
 | 
						|
  deleteGameFolder: (gameId: number) =>
 | 
						|
    ipcRenderer.invoke("deleteGameFolder", gameId),
 | 
						|
  getGameByObjectID: (objectID: string) =>
 | 
						|
    ipcRenderer.invoke("getGameByObjectID", objectID),
 | 
						|
  onPlaytime: (cb: (gameId: number) => void) => {
 | 
						|
    const listener = (_event: Electron.IpcRendererEvent, gameId: number) =>
 | 
						|
      cb(gameId);
 | 
						|
    ipcRenderer.on("on-playtime", listener);
 | 
						|
    return () => ipcRenderer.removeListener("on-playtime", listener);
 | 
						|
  },
 | 
						|
  onGameClose: (cb: (gameId: number) => void) => {
 | 
						|
    const listener = (_event: Electron.IpcRendererEvent, gameId: number) =>
 | 
						|
      cb(gameId);
 | 
						|
    ipcRenderer.on("on-game-close", listener);
 | 
						|
    return () => ipcRenderer.removeListener("on-game-close", listener);
 | 
						|
  },
 | 
						|
 | 
						|
  /* Hardware */
 | 
						|
  getDiskFreeSpace: (path: string) =>
 | 
						|
    ipcRenderer.invoke("getDiskFreeSpace", path),
 | 
						|
 | 
						|
  /* Misc */
 | 
						|
  getOrCacheImage: (url: string) => ipcRenderer.invoke("getOrCacheImage", url),
 | 
						|
  ping: () => ipcRenderer.invoke("ping"),
 | 
						|
  getVersion: () => ipcRenderer.invoke("getVersion"),
 | 
						|
  getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"),
 | 
						|
  openExternal: (src: string) => ipcRenderer.invoke("openExternal", src),
 | 
						|
  showOpenDialog: (options: Electron.OpenDialogOptions) =>
 | 
						|
    ipcRenderer.invoke("showOpenDialog", options),
 | 
						|
  platform: process.platform,
 | 
						|
});
 |