| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import { ipcMain, BrowserWindow } from 'electron'
- import * as fs from 'fs'
- import { IpcChannels } from '@shared/ipc-channels'
- import * as steam from '../services/steam.service'
- import * as library from '../services/library.service'
- import * as backup from '../services/backup.service'
- function startDownloadPoll(win: BrowserWindow, itemId: string): void {
- const idBig = BigInt(itemId)
- const pollInterval = setInterval(() => {
- if (win.isDestroyed()) {
- clearInterval(pollInterval)
- return
- }
- const info = steam.getDownloadInfo(idBig)
- if (info) {
- win.webContents.send(IpcChannels.EVENT_DOWNLOAD_PROGRESS, info)
- return
- }
- if (steam.isItemDownloading(idBig)) return // queued/pending, no progress numbers yet
- clearInterval(pollInterval)
- library.importWallpaperById(itemId).then((meta) => {
- if (win.isDestroyed()) return
- const success = !!meta && !meta.downloading && !meta.downloadFailed
- win.webContents.send(IpcChannels.EVENT_DOWNLOAD_PROGRESS, {
- itemId,
- bytesDownloaded: 0,
- bytesTotal: 0,
- percentage: success ? 100 : 0,
- status: success ? 'completed' : 'error'
- })
- })
- }, 1000)
- }
- export function registerSteamHandlers(win: BrowserWindow): void {
- ipcMain.handle(IpcChannels.STEAM_IS_RUNNING, () => {
- return steam.isSteamRunning()
- })
- ipcMain.handle(IpcChannels.STEAM_SUBSCRIBE, async (_e, itemId: string) => {
- await steam.subscribeToItem(BigInt(itemId))
- startDownloadPoll(win, itemId)
- return { ok: true }
- })
- ipcMain.handle(IpcChannels.STEAM_UNSUBSCRIBE, async (_e, itemId: string) => {
- const wallpaper = library.getWallpaper(itemId)
- await steam.unsubscribeFromItem(BigInt(itemId))
- if (wallpaper?.localPath) {
- try { fs.rmSync(wallpaper.localPath, { recursive: true, force: true }) } catch { /* ignore */ }
- }
- if (wallpaper?.backedUp && backup.isBackedUp(itemId)) {
- library.updateWallpaper(itemId, {
- source: 'backup',
- localPath: backup.getBackupDir(itemId),
- subscribed: false
- })
- } else {
- library.deleteWallpaper(itemId)
- }
- return { ok: true }
- })
- ipcMain.handle(IpcChannels.STEAM_REDOWNLOAD, async (_e, itemId: string) => {
- const wallpaper = library.getWallpaper(itemId)
- await steam.unsubscribeFromItem(BigInt(itemId))
- if (wallpaper?.localPath) {
- try { fs.rmSync(wallpaper.localPath, { recursive: true, force: true }) } catch { /* ignore */ }
- }
- if (wallpaper) {
- library.updateWallpaper(itemId, { downloading: true, downloadFailed: false })
- }
- await steam.subscribeToItem(BigInt(itemId))
- startDownloadPoll(win, itemId)
- return { ok: true }
- })
- ipcMain.handle(IpcChannels.STEAM_VOTE, (_e, itemId: string, voteUp: boolean) => {
- steam.voteOnItem(BigInt(itemId), voteUp)
- return { ok: true }
- })
- ipcMain.handle(IpcChannels.STEAM_OPEN_WORKSHOP, (_e, itemId: string) => {
- steam.openWorkshopItemOverlay(BigInt(itemId))
- return { ok: true }
- })
- ipcMain.handle(IpcChannels.STEAM_GET_VOTED_IDS, async () => {
- return steam.getVotedUpItemIds()
- })
- ipcMain.handle(IpcChannels.STEAM_GET_SUBSCRIBED, () => {
- return steam.getSubscribedItems()
- })
- ipcMain.handle(IpcChannels.STEAM_DOWNLOAD_INFO, (_e, itemId: string) => {
- return steam.getDownloadInfo(BigInt(itemId))
- })
- ipcMain.handle(IpcChannels.STEAM_ITEM_STATE, (_e, itemId: string) => {
- return steam.getItemState(BigInt(itemId))
- })
- ipcMain.handle(IpcChannels.STEAM_INSTALL_INFO, (_e, itemId: string) => {
- return steam.getInstallInfo(BigInt(itemId))
- })
- ipcMain.handle(IpcChannels.STEAM_GET_AUTHOR_INFO, (_e, steamId: string) => {
- return steam.getAuthorInfo(steamId)
- })
- }
|