Initial curated chimera source from a8ae5b1db07fb49926c94585e2718e5130330974
This commit is contained in:
commit
c737a37f71
531 files changed
+119270
No files matched your search
+403
@@ -0,0 +1,403 @@
|
||||
'use strict';
|
||||
|
||||
const { contextBridge, ipcRenderer } = require('electron');
|
||||
|
||||
contextBridge.exposeInMainWorld('pork', {
|
||||
// Window controls
|
||||
minimize: () => ipcRenderer.send('window:minimize'),
|
||||
maximize: () => ipcRenderer.send('window:maximize'),
|
||||
close: () => ipcRenderer.send('window:close'),
|
||||
|
||||
// Settings
|
||||
getSettings: () => ipcRenderer.invoke('settings:get'),
|
||||
setSettings: (s) => ipcRenderer.invoke('settings:set', s),
|
||||
isAdmin: () => ipcRenderer.invoke('app:is-admin'),
|
||||
|
||||
// FTP
|
||||
ftpConnect: (c) => ipcRenderer.invoke('ftp:connect', c),
|
||||
ftpDisconnect: () => ipcRenderer.invoke('ftp:disconnect'),
|
||||
ftpStatus: () => ipcRenderer.invoke('ftp:status'),
|
||||
ftpScan: () => ipcRenderer.invoke('ftp:scan'),
|
||||
ftpDownload: (o) => ipcRenderer.invoke('ftp:download', o),
|
||||
ftpDownloadFolder: (game_id) => ipcRenderer.invoke('ftp:download-folder', { game_id }),
|
||||
ftpUpload: (o) => ipcRenderer.invoke('ftp:upload', o),
|
||||
ftpInstallPfs: (o) => ipcRenderer.invoke('ftp:install-pfs', o),
|
||||
ftpListDir: (p) => ipcRenderer.invoke('ftp:list-dir', { path: p }),
|
||||
ftpFindGame: (game_id) => ipcRenderer.invoke('ftp:find-game', { game_id }),
|
||||
ftpDeleteGame: (game_id, confirmation) => ipcRenderer.invoke('ftp:delete-game', { game_id, confirmation }),
|
||||
|
||||
// Database
|
||||
listGames: (f) => ipcRenderer.invoke('db:games:list', f),
|
||||
listLibraryTitles: (f) => ipcRenderer.invoke('library:titles:list', f),
|
||||
etahenLinkInventoryStatus: () => ipcRenderer.invoke('etahen-link:inventory:status'),
|
||||
listStorageInventory: (f) => ipcRenderer.invoke('storage:inventory:list', f),
|
||||
labelStorageDevice: (input) => ipcRenderer.invoke('storage:inventory:label', input),
|
||||
storageGameLocator: (input) => ipcRenderer.invoke('storage:locator:list', input),
|
||||
guidedMoveList: (input) => ipcRenderer.invoke('guided-move:list', input),
|
||||
guidedMoveCreate: (input) => ipcRenderer.invoke('guided-move:create', input),
|
||||
guidedMoveCancel: (id) => ipcRenderer.invoke('guided-move:cancel', { id }),
|
||||
guidedMoveReconcile: (id) => ipcRenderer.invoke('guided-move:reconcile', { id }),
|
||||
gameMoveCapabilities: () => ipcRenderer.invoke('game-move:capabilities'),
|
||||
installDestinations: (input) => ipcRenderer.invoke('install:destinations:list', input),
|
||||
packageRecipesList: (titleId) => ipcRenderer.invoke('package-recipes:list', { titleId }),
|
||||
packageCatalog: () => ipcRenderer.invoke('package-catalog:list'),
|
||||
compatibilityGuidance: (input) => ipcRenderer.invoke('compatibility:guidance', input),
|
||||
packageRecipeSave: (input) => ipcRenderer.invoke('package-recipes:save', input),
|
||||
ps4PackageBuilderStatus: () => ipcRenderer.invoke('ps4-packages:builder-status'),
|
||||
ps4PackageInspect: input => ipcRenderer.invoke('ps4-packages:inspect', input),
|
||||
ps4PackageCreate: input => ipcRenderer.invoke('ps4-packages:create', input),
|
||||
ps4PackageJobs: () => ipcRenderer.invoke('ps4-packages:list'),
|
||||
ps4PackageJob: id => ipcRenderer.invoke('ps4-packages:get', { id }),
|
||||
ps4PackageRun: id => ipcRenderer.invoke('ps4-packages:run', { id }),
|
||||
ps4PackageResume: id => ipcRenderer.invoke('ps4-packages:resume', { id }),
|
||||
ps4PackageRestorePlan: input => ipcRenderer.invoke('ps4-packages:restore-plan', input),
|
||||
ps4PackageRestore: input => ipcRenderer.invoke('ps4-packages:restore', input),
|
||||
ps4PackageRestoreVerify: titleId => ipcRenderer.invoke('ps4-packages:restore-verify', { titleId }),
|
||||
ps5NativePackageBuilderStatus: () => ipcRenderer.invoke('ps5-native-packages:builder-status'),
|
||||
ps5NativePackageInspectBackup: input => ipcRenderer.invoke('ps5-native-packages:inspect-backup', input),
|
||||
ps5NativePackageInspectFile: filePath => ipcRenderer.invoke('ps5-native-packages:inspect-package', { filePath }),
|
||||
ps5PackageComparison: input => ipcRenderer.invoke('ps5-native-packages:compare', input),
|
||||
ps5UpstreamControl: (action, input) => ipcRenderer.invoke(`ps5-native-packages:control-${action}`, input),
|
||||
ps5A8DistinctControl: (action, input) => ipcRenderer.invoke(`ps5-native-packages:a8-distinct-control-${action}`, input),
|
||||
ps5A10TransitionControl: (action, input) => ipcRenderer.invoke(`ps5-native-packages:a10-transition-control-${action}`, input),
|
||||
ps5LaunchReference: (action, input) => ipcRenderer.invoke(`ps5-native-packages:launch-reference-${action}`, input),
|
||||
ps5NativePackageCreate: input => ipcRenderer.invoke('ps5-native-packages:create', input),
|
||||
ps5NativePackageJobs: () => ipcRenderer.invoke('ps5-native-packages:list'),
|
||||
ps5NativePackageJob: id => ipcRenderer.invoke('ps5-native-packages:get', { id }),
|
||||
ps5NativePackageRun: id => ipcRenderer.invoke('ps5-native-packages:run', { id }),
|
||||
ps5NativePackageResume: id => ipcRenderer.invoke('ps5-native-packages:resume', { id }),
|
||||
ps5ConsoleStagingProbe: () => ipcRenderer.invoke('ps5-console-staging:probe'),
|
||||
ps5ConsoleStagingDiscover: titleId => ipcRenderer.invoke('ps5-console-staging:discover', { titleId }),
|
||||
ps5ConsoleStagingCreate: input => ipcRenderer.invoke('ps5-console-staging:create', input),
|
||||
ps5ConsoleStagingJobs: () => ipcRenderer.invoke('ps5-console-staging:list'),
|
||||
ps5ConsoleStagingJob: id => ipcRenderer.invoke('ps5-console-staging:get', { id }),
|
||||
ps5ConsoleStagingRun: id => ipcRenderer.invoke('ps5-console-staging:run', { id }),
|
||||
ps5ConsoleStagingResume: id => ipcRenderer.invoke('ps5-console-staging:resume', { id }),
|
||||
ps5NativePackageRestorePlan: input => ipcRenderer.invoke('ps5-native-packages:restore-plan', input),
|
||||
ps5NativePackageRestore: input => ipcRenderer.invoke('ps5-native-packages:restore', input),
|
||||
ps5NativePackageRestoreStatus: operationId => ipcRenderer.invoke('ps5-native-packages:restore-status', { operationId }),
|
||||
ps5NativePackageRestoreCancel: (operationId, confirmation) => ipcRenderer.invoke('ps5-native-packages:restore-cancel', { operationId, confirmation }),
|
||||
ps5NativePackageRestoreVerify: input => ipcRenderer.invoke('ps5-native-packages:restore-verify', typeof input === 'object' ? input : { titleId: input }),
|
||||
ps5NativePackageRestoreLaunchPlan: operationId => ipcRenderer.invoke('ps5-native-packages:restore-launch-plan', { operationId }),
|
||||
ps5NativePackageRestoreLaunch: input => ipcRenderer.invoke('ps5-native-packages:restore-launch', input),
|
||||
ps5NativePackageRestoreLaunchStatus: operationId => ipcRenderer.invoke('ps5-native-packages:restore-launch-status', { operationId }),
|
||||
ps5NativePackageRetainedLaunchEvidence: operationId => ipcRenderer.invoke('ps5-native-packages:retained-launch-evidence', { operationId }),
|
||||
recordSemanticEvidence: (input) => ipcRenderer.invoke('library:evidence:override', input),
|
||||
listSemanticEvidence: (input) => ipcRenderer.invoke('library:evidence:list', input),
|
||||
legacySemanticDiagnostics: () => ipcRenderer.invoke('library:legacy-diagnostics'),
|
||||
updateGame: (o) => ipcRenderer.invoke('db:games:update', o),
|
||||
listBackups: (id) => ipcRenderer.invoke('db:backups:list', id),
|
||||
deleteBackup: (id, confirmation) => ipcRenderer.invoke('db:backups:delete', { id, confirmation }),
|
||||
addBackup: (game_id, backup_path) => ipcRenderer.invoke('db:backups:upsert', { game_id, backup_path }),
|
||||
getStats: () => ipcRenderer.invoke('db:stats'),
|
||||
dbQuery: (sql) => ipcRenderer.invoke('db:query', { sql }),
|
||||
dbClear: confirmation => ipcRenderer.invoke('db:clear', { confirmation }),
|
||||
dbClearSelective: (opts, confirmation) => ipcRenderer.invoke('db:clear-selective', { ...opts, confirmation }),
|
||||
dbDeleteRows: (table, ids, confirmation) => ipcRenderer.invoke('db:delete-rows', { table, ids, confirmation }),
|
||||
dbClearHashes: confirmation => ipcRenderer.invoke('db:clear-hashes', { confirmation }),
|
||||
exportSql: () => ipcRenderer.invoke('db:export:sql'),
|
||||
exportCsv: (t) => ipcRenderer.invoke('db:export:csv', { table: t }),
|
||||
|
||||
// Local
|
||||
scanBackups: () => ipcRenderer.invoke('local:scan-backups'),
|
||||
selectFolder: () => ipcRenderer.invoke('dialog:select-folder'),
|
||||
openShell: (t) => ipcRenderer.invoke('shell:open', { target: t }),
|
||||
|
||||
// Prospero metadata
|
||||
prosperoFetch: (game_id) => ipcRenderer.invoke('prospero:fetch', { game_id }),
|
||||
prosperoFetchIcon: (game_id) => ipcRenderer.invoke('prospero:fetch-icon', { game_id }),
|
||||
prosperoRefreshAll: () => ipcRenderer.invoke('prospero:refresh-all'),
|
||||
|
||||
// Backpork folders
|
||||
backporksList: () => ipcRenderer.invoke('backporks:list'),
|
||||
backporksAdd: (name, path) => ipcRenderer.invoke('backporks:add', { name, path }),
|
||||
backporksAddRoot: (rootPath) => ipcRenderer.invoke('backporks:add-root', { rootPath }),
|
||||
backporksRemove: (id, confirmation) => ipcRenderer.invoke('backporks:remove', { id, confirmation }),
|
||||
backporksScan: (id) => ipcRenderer.invoke('backporks:scan', { id }),
|
||||
backporksScanAll: () => ipcRenderer.invoke('backporks:scan-all'),
|
||||
backporksGames: (folder) => ipcRenderer.invoke('backporks:games', { folder }),
|
||||
backporksEntries: (game_id) => ipcRenderer.invoke('backporks:entries', { game_id }),
|
||||
backporksPork: (game_id, folder_name, folder_path) => ipcRenderer.invoke('backporks:pork', { game_id, folder_name, folder_path }),
|
||||
backporksCreateFolder: (name, parentPath) => ipcRenderer.invoke('backporks:create-folder', { name, parentPath }),
|
||||
firmwareLabels: () => ipcRenderer.invoke('db:firmware:labels'),
|
||||
trophyActiveCatalogStatus: () => ipcRenderer.invoke('trophy:active-catalog:status'),
|
||||
trophyActiveCatalog: () => ipcRenderer.invoke('trophy:active-catalog'),
|
||||
trophyInstalledCatalogStatus: () => ipcRenderer.invoke('trophy:installed-catalog:status'),
|
||||
trophyInstalledCatalog: () => ipcRenderer.invoke('trophy:installed-catalog'),
|
||||
trophyImportedCatalog: () => ipcRenderer.invoke('trophy:imported-catalog:list'),
|
||||
trophyImportDefinition: (packageData) => ipcRenderer.invoke('trophy:imported-catalog:import', { package: packageData }),
|
||||
trophyUnlockOne: (input) => ipcRenderer.invoke('trophy:unlock-one', input),
|
||||
trophyHistoryImportStatus: () => ipcRenderer.invoke('trophy:history-import:status'),
|
||||
trophyHistoryAuthenticate: (input) => ipcRenderer.invoke('trophy:history-import:authenticate', input),
|
||||
trophyHistoryBrowserAuthenticate: () => ipcRenderer.invoke('trophy:history-import:browser-authenticate'),
|
||||
trophyHistoryRevoke: () => ipcRenderer.invoke('trophy:history-import:revoke'),
|
||||
trophyHistoryPreview: (input) => ipcRenderer.invoke('trophy:history-import:preview', input),
|
||||
trophyHistoryApply: (input) => ipcRenderer.invoke('trophy:history-import:apply', input),
|
||||
trophyHistorySnapshots: (input) => ipcRenderer.invoke('trophy:history-import:snapshots', input),
|
||||
trophyHistorySnapshot: (input) => ipcRenderer.invoke('trophy:history-import:snapshot', input),
|
||||
trophyProgressionStatus: () => ipcRenderer.invoke('trophy:progression:status'),
|
||||
trophyProgressionCatalogs: () => ipcRenderer.invoke('trophy:progression:catalogs'),
|
||||
trophyProgressionCreate: (input) => ipcRenderer.invoke('trophy:progression:create', input),
|
||||
trophyProgressionPlans: (input) => ipcRenderer.invoke('trophy:progression:plans', input || {}),
|
||||
trophyProgressionPlan: (input) => ipcRenderer.invoke('trophy:progression:plan', input),
|
||||
|
||||
// Hash verification
|
||||
hashStatus: (game_id) => ipcRenderer.invoke('hash:status', { game_id }),
|
||||
hashCompute: (backup_path, game_id) => ipcRenderer.invoke('hash:compute', { backup_path, game_id }),
|
||||
hashAdd: (o) => ipcRenderer.invoke('hash:add', o),
|
||||
hashExport: () => ipcRenderer.invoke('hash:export'),
|
||||
hashBulk: (source) => ipcRenderer.invoke('hash:bulk', { source }),
|
||||
hashImportCommunity: () => ipcRenderer.invoke('hash:import-community'),
|
||||
hashCommunityInfo: () => ipcRenderer.invoke('hash:community-info'),
|
||||
hashGameSummary: () => ipcRenderer.invoke('hash:game-summary'),
|
||||
|
||||
// Local Save Manager (garlic-savemgr)
|
||||
savemgrPushPayload: input => ipcRenderer.invoke('savemgr:push-payload', input),
|
||||
savemgrRequest: (path) => ipcRenderer.invoke('savemgr:request', { path }),
|
||||
savemgrUpload: (path, data) => ipcRenderer.invoke('savemgr:upload', { path, data }),
|
||||
savemgrDownload: (path, filename) => ipcRenderer.invoke('savemgr:download', { path, filename }),
|
||||
savemgrDecrypt: (data, filename) => ipcRenderer.invoke('savemgr:decrypt', { data, filename }),
|
||||
savemgrResign: (data, aid, filename) => ipcRenderer.invoke('savemgr:resign', { data, aid, filename }),
|
||||
savemgrIcon: () => ipcRenderer.invoke('savemgr:icon'),
|
||||
savemgrDumpUsb: (idx) => ipcRenderer.invoke('savemgr:dump-usb', { idx }),
|
||||
savemgrCreatePfs: (size) => ipcRenderer.invoke('savemgr:create-pfs', { size }),
|
||||
savemgrDownloadNew: (name, aid) => ipcRenderer.invoke('savemgr:download-new', { name, aid }),
|
||||
|
||||
|
||||
// PSNotify
|
||||
psnotifySend: (message, subMessage) => ipcRenderer.invoke('psnotify:send', { message, subMessage }),
|
||||
psnotifyHistory: () => ipcRenderer.invoke('psnotify:history'),
|
||||
psnotifyTest: () => ipcRenderer.invoke('psnotify:test'),
|
||||
psnotifyPushPayload: () => ipcRenderer.invoke('psnotify:pushPayload'),
|
||||
|
||||
// Y2JB Updater
|
||||
y2jbCheck: () => ipcRenderer.invoke('y2jb:check'),
|
||||
y2jbApply: () => ipcRenderer.invoke('y2jb:apply'),
|
||||
y2jbGenCatalog: () => ipcRenderer.invoke('y2jbgen:catalog'),
|
||||
y2jbGenSelectPayloads: () => ipcRenderer.invoke('y2jbgen:select-payloads'),
|
||||
y2jbGenBuild: (o) => ipcRenderer.invoke('y2jbgen:build', o),
|
||||
systemStateStatus: () => ipcRenderer.invoke('system-state:status'),
|
||||
systemStateDeploy: () => ipcRenderer.invoke('system-state:deploy'),
|
||||
systemStateCommand: (o) => ipcRenderer.invoke('system-state:command', o),
|
||||
bdjbGenSelectPayloads: () => ipcRenderer.invoke('bdjbgen:select-payloads'),
|
||||
bdjbGenBuild: (o) => ipcRenderer.invoke('bdjbgen:build', o),
|
||||
|
||||
// Transfer Manager
|
||||
transferState: () => ipcRenderer.invoke('transfer:state'),
|
||||
transferPause: () => ipcRenderer.invoke('transfer:pause'),
|
||||
transferResume: () => ipcRenderer.invoke('transfer:resume'),
|
||||
transferCancel: (id) => ipcRenderer.invoke('transfer:cancel', { id }),
|
||||
transferClearDone: () => ipcRenderer.invoke('transfer:clear-done'),
|
||||
transferSetConcurrent:(n) => ipcRenderer.invoke('transfer:set-concurrent', { n }),
|
||||
|
||||
// Payload Manager
|
||||
payloadSourcesList: () => ipcRenderer.invoke('payload:sources:list'),
|
||||
payloadSourcesAdd: (name, url) => ipcRenderer.invoke('payload:sources:add', { name, url }),
|
||||
payloadSourcesRemove: (id, confirmation) => ipcRenderer.invoke('payload:sources:remove', { id, confirmation }),
|
||||
payloadSourcesToggle: (id) => ipcRenderer.invoke('payload:sources:toggle', { id }),
|
||||
payloadCheckUpdates: (id) => ipcRenderer.invoke('payload:check-updates', id != null ? { id } : {}),
|
||||
payloadDownload: (o) => ipcRenderer.invoke('payload:download', o),
|
||||
payloadListLocal: () => ipcRenderer.invoke('payload:list-local'),
|
||||
payloadListRemote: () => ipcRenderer.invoke('payload:list-remote'),
|
||||
payloadPush: (o) => ipcRenderer.invoke('payload:push', o),
|
||||
payloadDeleteRemote: (filename, confirmation) => ipcRenderer.invoke('payload:delete-remote', { filename, confirmation }),
|
||||
payloadDeleteLocal: (o) => ipcRenderer.invoke('payload:delete-local', o),
|
||||
|
||||
// System View
|
||||
openSystemViewPopout: (videoId, audioId, resolution) => ipcRenderer.invoke('system-view:open-popout', { videoId, audioId, resolution }),
|
||||
systemViewPickSave: (opts) => ipcRenderer.invoke('system-view:pick-save', opts || {}),
|
||||
systemViewWriteFile: (o) => ipcRenderer.invoke('system-view:write-file', o),
|
||||
systemViewAppendFile: (o) => ipcRenderer.invoke('system-view:append-file', o),
|
||||
systemViewDeleteFile: (o) => ipcRenderer.invoke('system-view:delete-file', o),
|
||||
|
||||
// Cheats
|
||||
cheatsStats: () => ipcRenderer.invoke('cheats:stats'),
|
||||
cheatsForGame: (cusa_id) => ipcRenderer.invoke('cheats:for-game', { cusa_id }),
|
||||
cheatsSearch: (query) => ipcRenderer.invoke('cheats:search', { query }),
|
||||
cheatsAll: () => ipcRenderer.invoke('cheats:all'),
|
||||
cheatsFetchIndex: () => ipcRenderer.invoke('cheats:fetch-index'),
|
||||
cheatsDownloadAll: () => ipcRenderer.invoke('cheats:download-all'),
|
||||
cheatsCancel: () => ipcRenderer.invoke('cheats:cancel'),
|
||||
cheatsUnmatched: () => ipcRenderer.invoke('cheats:unmatched'),
|
||||
cheatsAssign: (filename, cusaId) => ipcRenderer.invoke('cheats:assign', { filename, cusaId }),
|
||||
cheatsFtpInstall: (remotePath) => ipcRenderer.invoke('cheats:ftp-install', { remotePath }),
|
||||
|
||||
// Media
|
||||
mediaScan: () => ipcRenderer.invoke('media:scan'),
|
||||
mediaDownload: (o) => ipcRenderer.invoke('media:download', o),
|
||||
mediaFetchThumb: (remotePath) => ipcRenderer.invoke('media:fetch-thumb', { remotePath }),
|
||||
mediaGetCachePath: (remotePath) => ipcRenderer.invoke('media:get-cache-path', { remotePath }),
|
||||
mediaFetchVideoPreview: (remotePath) => ipcRenderer.invoke('media:fetch-video-preview', { remotePath }),
|
||||
mediaOpen: (remotePath) => ipcRenderer.invoke('media:open', { remotePath }),
|
||||
mediaDiscordSend: (o) => ipcRenderer.invoke('media:discord-send', o),
|
||||
mediaFetchClipThumbs: (paths) => ipcRenderer.invoke('media:batch-clip-thumbs', paths),
|
||||
mediaLoadClipThumbs: () => ipcRenderer.invoke('media:clip-thumbs:load'),
|
||||
mediaCacheStatus: () => ipcRenderer.invoke('media:cache:status'),
|
||||
mediaCachePin: (id, pinned) => ipcRenderer.invoke('media:cache:pin', { id, pinned }),
|
||||
mediaCacheClear: (options) => ipcRenderer.invoke('media:cache:clear', options || {}),
|
||||
mediaCacheRetention: (options) => ipcRenderer.invoke('media:cache:retention', options || {}),
|
||||
|
||||
// PS5 Autoloader
|
||||
autoloaderList: () => ipcRenderer.invoke('autoloader:list'),
|
||||
autoloaderRead: () => ipcRenderer.invoke('autoloader:read'),
|
||||
autoloaderSave: (content) => ipcRenderer.invoke('autoloader:save', { content }),
|
||||
autoloaderSaveLocal: (o) => ipcRenderer.invoke('autoloader:save-local', o),
|
||||
payloadManagerAutoloadRepairPlan: () => ipcRenderer.invoke('payload-manager:autoload-repair-plan'),
|
||||
payloadManagerAutoloadRepairApply: input => ipcRenderer.invoke('payload-manager:autoload-repair-apply', input),
|
||||
payloadManagerVerifiedStart: input => ipcRenderer.invoke('payload-manager:verified-start', input),
|
||||
payloadManagerAutoloadRollbackPlan: () => ipcRenderer.invoke('payload-manager:autoload-repair-rollback-plan'),
|
||||
payloadManagerAutoloadRollbackApply: input => ipcRenderer.invoke('payload-manager:autoload-repair-rollback', input),
|
||||
etaHenAutoloadPersistencePlan: () => ipcRenderer.invoke('etahen:autoload-persistence-plan'),
|
||||
etaHenAutoloadPersistenceApply: input => ipcRenderer.invoke('etahen:autoload-persistence-apply', input),
|
||||
etaHenDirectStart: input => ipcRenderer.invoke('etahen:direct-start', input),
|
||||
etaHenAutoloadPersistenceRollbackPlan: () => ipcRenderer.invoke('etahen:autoload-persistence-rollback-plan'),
|
||||
etaHenAutoloadPersistenceRollback: input => ipcRenderer.invoke('etahen:autoload-persistence-rollback', input),
|
||||
|
||||
// Autoloader Snapshots
|
||||
snapshotTake: (label) => ipcRenderer.invoke('snapshot:autoloader:take', { label }),
|
||||
snapshotList: () => ipcRenderer.invoke('snapshot:autoloader:list'),
|
||||
snapshotRestore: (id, confirmation) => ipcRenderer.invoke('snapshot:autoloader:restore', { id, confirmation }),
|
||||
snapshotDelete: (id, confirmation) => ipcRenderer.invoke('snapshot:autoloader:delete', { id, confirmation }),
|
||||
snapshotExport: (id) => ipcRenderer.invoke('snapshot:autoloader:export', { id }),
|
||||
snapshotImport: (opts) => ipcRenderer.invoke('snapshot:autoloader:import', opts || {}),
|
||||
|
||||
// Language / i18n
|
||||
langList: () => ipcRenderer.invoke('lang:list'),
|
||||
langLoad: (code) => ipcRenderer.invoke('lang:load', code),
|
||||
langExportBase: () => ipcRenderer.invoke('lang:export-base'),
|
||||
langImport: () => ipcRenderer.invoke('lang:import'),
|
||||
|
||||
// Payload TCP sender (sends local payload to PS5 via raw TCP, e.g. bin-loader port 9021)
|
||||
payloadTcpSend: (o) => ipcRenderer.invoke('payload:tcp-send', o),
|
||||
|
||||
// XAvatar PS5 management
|
||||
xavatarUploadToPs5: (buffer, filename) => ipcRenderer.invoke('xavatar:upload-to-ps5', { buffer, filename }),
|
||||
xavatarSaveFile: (buffer, filename) => ipcRenderer.invoke('xavatar:save-file', { buffer, filename }),
|
||||
// Fallback conversion channel (used when window.xavatarAPI is unavailable)
|
||||
xavatarConvertCanvas: (rgba, width, height, filename) => ipcRenderer.invoke('xavatar:convert-rgba', { rgba, width, height, filename }),
|
||||
ftpDownloadFile: (remotePath) => ipcRenderer.invoke('ftp:download-file', { remotePath }),
|
||||
ftpDeleteFile: (remotePath, confirmation) => ipcRenderer.invoke('ftp:delete-file', { remotePath, confirmation }),
|
||||
xavatarExtractPng: (buffer) => ipcRenderer.invoke('xavatar:extract-png', { buffer }),
|
||||
xavatarCompanion: () => ipcRenderer.invoke('xavatar:companion'),
|
||||
xavatarInstallCompanion: (confirmation) => ipcRenderer.invoke('xavatar:install-companion', { confirmation }),
|
||||
ps5ProfileInspect: () => ipcRenderer.invoke('ps5-profile:inspect'),
|
||||
ps5ProfileRuntimeStatus: () => ipcRenderer.invoke('ps5-profile:runtime-status'),
|
||||
ps5ProfileRuntimePreflight: () => ipcRenderer.invoke('ps5-profile:runtime-preflight'),
|
||||
ps5ProfileStartPayload: input => ipcRenderer.invoke('ps5-profile:start-payload', input),
|
||||
ps5P15A10: (action, input) => ipcRenderer.invoke(`ps5-p15-a10:${action}`, input),
|
||||
ps5P15R2Status: () => ipcRenderer.invoke('ps5-p15-r2:status'),
|
||||
ps5P15R2Preflight: () => ipcRenderer.invoke('ps5-p15-r2:preflight'),
|
||||
ps5P15R2Qualify: () => ipcRenderer.invoke('ps5-p15-r2:qualify'),
|
||||
ps5ProfileCurrentAvatar: input => ipcRenderer.invoke('ps5-profile:current-avatar', input),
|
||||
ps5ProfileListOperations: () => ipcRenderer.invoke('ps5-profile:list-operations'),
|
||||
ps5ProfilePrepareRename: input => ipcRenderer.invoke('ps5-profile:prepare-rename', input),
|
||||
ps5ProfilePrepareAvatar: input => ipcRenderer.invoke('ps5-profile:prepare-avatar', input),
|
||||
ps5ProfileApply: input => ipcRenderer.invoke('ps5-profile:apply', input),
|
||||
ps5ProfileRollback: input => ipcRenderer.invoke('ps5-profile:rollback', input),
|
||||
|
||||
// ── Game Conversion (FFPKG / ExFAT) — Windows only ───────────────────────
|
||||
convToolInfo: () => ipcRenderer.invoke('conv:tool-info'),
|
||||
convExfatToolInfo: () => ipcRenderer.invoke('conv:exfat-tool-info'),
|
||||
convToolPick: () => ipcRenderer.invoke('conv:tool-pick'),
|
||||
convExfatToolPick: () => ipcRenderer.invoke('conv:exfat-tool-pick'),
|
||||
convPickOutputDir: () => ipcRenderer.invoke('conv:pick-output-dir'),
|
||||
convPickTempDir: () => ipcRenderer.invoke('conv:pick-temp-dir'),
|
||||
convQueueAdd: (o) => ipcRenderer.invoke('conv:queue:add', o),
|
||||
convQueueAddBatch: (a) => ipcRenderer.invoke('conv:queue:add-batch', a),
|
||||
convQueueList: () => ipcRenderer.invoke('conv:queue:list'),
|
||||
convQueueIsPaused: () => ipcRenderer.invoke('conv:queue:is-paused'),
|
||||
convQueueStart: () => ipcRenderer.invoke('conv:queue:start'),
|
||||
convQueueCancel: (id) => ipcRenderer.invoke('conv:queue:cancel', { id }),
|
||||
convQueueClearDone: () => ipcRenderer.invoke('conv:queue:clear-done'),
|
||||
convQueueRetry: (id) => ipcRenderer.invoke('conv:queue:retry', { id }),
|
||||
convQueueCleanupTemp: () => ipcRenderer.invoke('conv:queue:cleanup-temp'),
|
||||
|
||||
// GarlicSaves
|
||||
garlicStart: () => ipcRenderer.invoke('garlic:start'),
|
||||
|
||||
// ELF Arsenal (PS5 web API on :6969)
|
||||
eaVersion: () => ipcRenderer.invoke('ea:version'),
|
||||
eaStart: () => ipcRenderer.invoke('ea:start'),
|
||||
eaEmbedUrl: () => ipcRenderer.invoke('ea:embed-url'),
|
||||
eaList: (path) => ipcRenderer.invoke('ea:list', { path }),
|
||||
eaStat: (path) => ipcRenderer.invoke('ea:stat', { path }),
|
||||
eaUsb: () => ipcRenderer.invoke('ea:usb'),
|
||||
eaMkdir: (path) => ipcRenderer.invoke('ea:mkdir', { path }),
|
||||
eaRename: (src, dst) => ipcRenderer.invoke('ea:rename', { src, dst }),
|
||||
eaDelete: (path, recursive) => ipcRenderer.invoke('ea:delete', { path, recursive }),
|
||||
eaCopy: (src, dst) => ipcRenderer.invoke('ea:copy', { src, dst }),
|
||||
eaMove: (src, dst) => ipcRenderer.invoke('ea:move', { src, dst }),
|
||||
eaJobStatus: () => ipcRenderer.invoke('ea:job-status'),
|
||||
eaJobCancel: () => ipcRenderer.invoke('ea:job-cancel'),
|
||||
eaLaunch: (path, args, daemon) => ipcRenderer.invoke('ea:launch', { path, args, daemon }),
|
||||
eaDownload: (path, filename) => ipcRenderer.invoke('ea:download', { path, filename }),
|
||||
eaUpload: (localPath, remotePath) => ipcRenderer.invoke('ea:upload', { localPath, remotePath }),
|
||||
|
||||
// PFS Ripper (PFS/image library browser)
|
||||
pfsFoldersList: () => ipcRenderer.invoke('pfsripper:folders:list'),
|
||||
pfsFoldersAdd: () => ipcRenderer.invoke('pfsripper:folders:add'),
|
||||
pfsFoldersRemove: (folder) => ipcRenderer.invoke('pfsripper:folders:remove', { folder }),
|
||||
pfsScan: () => ipcRenderer.invoke('pfsripper:scan'),
|
||||
pfsExportCopy: (path) => ipcRenderer.invoke('pfsripper:export-copy', { path }),
|
||||
pfsExportFtp: (path, remoteDir) => ipcRenderer.invoke('pfsripper:export-ftp', { path, remoteDir }),
|
||||
pfsReveal: (path) => ipcRenderer.invoke('pfsripper:reveal', { path }),
|
||||
|
||||
// Auto-Backpork Generator
|
||||
bpgenSdkPairs: () => ipcRenderer.invoke('bpgen:sdk-pairs'),
|
||||
bpgenCustomPairsGet: () => ipcRenderer.invoke('bpgen:custom-sdk-pairs-get'),
|
||||
bpgenCustomPairsSet: (pairs) => ipcRenderer.invoke('bpgen:custom-sdk-pairs-set', pairs),
|
||||
bpgenListMissing: (fw) => ipcRenderer.invoke('bpgen:list-missing', { firmwareLabel: fw || '' }),
|
||||
bpgenListAll: () => ipcRenderer.invoke('bpgen:list-all-with-local'),
|
||||
bpgenPickFolder: () => ipcRenderer.invoke('bpgen:pick-folder'),
|
||||
bpgenRun: (opts) => ipcRenderer.invoke('bpgen:run', opts),
|
||||
bpgenCancel: () => ipcRenderer.invoke('bpgen:cancel'),
|
||||
// Auto-Backpork Generator — Fakelib Manager
|
||||
bpgenFakelibScan: () => ipcRenderer.invoke('bpgen:fakelib-scan'),
|
||||
bpgenFakelibSetBasedir: (dir) => ipcRenderer.invoke('bpgen:fakelib-set-basedir', { dir: dir || null }),
|
||||
bpgenFakelibPickPup: () => ipcRenderer.invoke('bpgen:fakelib-pick-pup'),
|
||||
bpgenFakelibExtract: (opts) => ipcRenderer.invoke('bpgen:fakelib-extract', opts),
|
||||
|
||||
// Web UI server control
|
||||
webuiStatus: () => ipcRenderer.invoke('webui:status'),
|
||||
webuiStart: () => ipcRenderer.invoke('webui:start'),
|
||||
webuiStop: () => ipcRenderer.invoke('webui:stop'),
|
||||
|
||||
// Donation popup
|
||||
openDonate: () => ipcRenderer.send('donation:show'),
|
||||
|
||||
// Events from main process
|
||||
on: (ch, fn) => ipcRenderer.on(ch, (_e, ...args) => fn(...args)),
|
||||
off: (ch) => ipcRenderer.removeAllListeners(ch),
|
||||
});
|
||||
|
||||
// xAvatar dedicated bridge. The reusable module's standalone preload is kept in
|
||||
// src/xavatarElectronModule for consumers, but the root app exposes the small
|
||||
// surface it actually needs directly so startup does not depend on chaining a
|
||||
// second preload script.
|
||||
contextBridge.exposeInMainWorld('xavatarAPI', {
|
||||
version: () => ipcRenderer.invoke('xavatar:version'),
|
||||
|
||||
async convertFromCanvas(canvas, opts = {}) {
|
||||
const ctx = canvas.getContext('2d');
|
||||
const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
const rgba = new Uint8Array(imgData.data.buffer);
|
||||
const result = await ipcRenderer.invoke('xavatar:convert-rgba', {
|
||||
rgba,
|
||||
width: canvas.width,
|
||||
height: canvas.height,
|
||||
filename: opts.filename,
|
||||
});
|
||||
if (!result || !result.ok) throw new Error(result?.error || 'xAvatar conversion failed');
|
||||
return { buffer: result.buffer?.buffer || result.buffer, filename: result.filename };
|
||||
},
|
||||
|
||||
download(buffer, filename) {
|
||||
const blob = new Blob([buffer], { type: 'application/octet-stream' });
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = Object.assign(document.createElement('a'), { href: url, download: filename });
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
setTimeout(() => URL.revokeObjectURL(url), 10_000);
|
||||
},
|
||||
});
|
||||
Reference in new issue
Block a user