config.handlers.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { ipcMain, dialog, BrowserWindow } from 'electron'
  2. import { IpcChannels } from '@shared/ipc-channels'
  3. import {
  4. getConfiguredWorkshopPath,
  5. setConfiguredWorkshopPath,
  6. isWorkshopPathConfigured,
  7. getDefaultFps,
  8. setDefaultFps,
  9. getRecommendedFpsEnabled,
  10. setRecommendedFpsEnabled,
  11. getLweRepoUrl,
  12. getLweRepoBranch,
  13. setLweRepo,
  14. getLweCmakeArgs,
  15. setLweCmakeArgs,
  16. importWEConfigFile,
  17. createFreshConfig,
  18. getConfiguredBackupPath,
  19. setConfiguredBackupPath,
  20. isBackupPathConfigured,
  21. getAutoUnsubscribeAfterBackup,
  22. setAutoUnsubscribeAfterBackup,
  23. getTrayEnabled,
  24. setTrayEnabled,
  25. getAutostartEnabled,
  26. getAutostartMinimized,
  27. setAutostart,
  28. getAutostartPlaylistId,
  29. setAutostartPlaylistId,
  30. getKillLweOnQuit,
  31. setKillLweOnQuit
  32. } from '../services/config.service'
  33. import { getDefaultWorkshopPath } from '../utils/paths'
  34. import { DEFAULT_LWE_REPO } from '@shared/constants'
  35. import { restartWatcher } from '../services/watcher.service'
  36. import { importWEConfig } from '../services/library.service'
  37. import { createTray, destroyTray } from '../services/tray.service'
  38. import { isAutostartSupported, setAutostartEnabled } from '../services/autostart.service'
  39. export function registerConfigHandlers(): void {
  40. ipcMain.handle(IpcChannels.CONFIG_GET, () => ({
  41. workshopPath: getConfiguredWorkshopPath(),
  42. defaultWorkshopPath: getDefaultWorkshopPath(),
  43. isConfigured: isWorkshopPathConfigured(),
  44. defaultFps: getDefaultFps(),
  45. recommendedFpsEnabled: getRecommendedFpsEnabled(),
  46. lweRepoUrl: getLweRepoUrl(),
  47. lweRepoBranch: getLweRepoBranch(),
  48. lweCmakeArgs: getLweCmakeArgs(),
  49. defaultLweRepoUrl: DEFAULT_LWE_REPO,
  50. backupPath: getConfiguredBackupPath(),
  51. isBackupConfigured: isBackupPathConfigured(),
  52. autoUnsubscribeAfterBackup: getAutoUnsubscribeAfterBackup(),
  53. trayEnabled: getTrayEnabled(),
  54. autostartSupported: isAutostartSupported(),
  55. autostartEnabled: getAutostartEnabled(),
  56. autostartMinimized: getAutostartMinimized(),
  57. autostartPlaylistId: getAutostartPlaylistId(),
  58. killLweOnQuit: getKillLweOnQuit()
  59. }))
  60. ipcMain.handle(IpcChannels.CONFIG_GET_AUTOSTART_SUPPORTED, () => isAutostartSupported())
  61. ipcMain.handle(IpcChannels.CONFIG_SET_TRAY_ENABLED, (_e, enabled: boolean) => {
  62. setTrayEnabled(enabled)
  63. if (enabled) {
  64. const win = BrowserWindow.getAllWindows()[0]
  65. if (win) createTray(win)
  66. } else {
  67. destroyTray()
  68. }
  69. return { ok: true }
  70. })
  71. ipcMain.handle(
  72. IpcChannels.CONFIG_SET_AUTOSTART,
  73. (_e, enabled: boolean, minimized: boolean, playlistId: string | null) => {
  74. setAutostart(enabled, minimized)
  75. setAutostartPlaylistId(playlistId)
  76. setAutostartEnabled(enabled, minimized)
  77. return { ok: true }
  78. }
  79. )
  80. ipcMain.handle(IpcChannels.CONFIG_SET_KILL_LWE_ON_QUIT, (_e, enabled: boolean) => {
  81. setKillLweOnQuit(enabled)
  82. return { ok: true }
  83. })
  84. ipcMain.handle(IpcChannels.CONFIG_SET_BACKUP_PATH, (_e, newPath: string) => {
  85. setConfiguredBackupPath(newPath)
  86. return { ok: true }
  87. })
  88. ipcMain.handle(IpcChannels.CONFIG_SET_AUTO_UNSUBSCRIBE, (_e, enabled: boolean) => {
  89. setAutoUnsubscribeAfterBackup(enabled)
  90. return { ok: true }
  91. })
  92. ipcMain.handle(IpcChannels.CONFIG_SET_DEFAULT_FPS, (_e, fps: number | null) => {
  93. setDefaultFps(fps)
  94. return { ok: true }
  95. })
  96. ipcMain.handle(IpcChannels.CONFIG_SET_RECOMMENDED_FPS, (_e, enabled: boolean) => {
  97. setRecommendedFpsEnabled(enabled)
  98. return { ok: true }
  99. })
  100. ipcMain.handle(IpcChannels.CONFIG_SET_LWE_REPO, (_e, url: string | null, branch: string | null) => {
  101. setLweRepo(url, branch)
  102. return { ok: true }
  103. })
  104. ipcMain.handle(IpcChannels.CONFIG_SET_LWE_CMAKE_ARGS, (_e, args: string | null) => {
  105. setLweCmakeArgs(args)
  106. return { ok: true }
  107. })
  108. ipcMain.handle(IpcChannels.CONFIG_SET_WORKSHOP_PATH, (_e, newPath: string) => {
  109. setConfiguredWorkshopPath(newPath)
  110. restartWatcher()
  111. return { ok: true }
  112. })
  113. ipcMain.handle(IpcChannels.CONFIG_PICK_FOLDER, async (_e) => {
  114. const win = BrowserWindow.getFocusedWindow()
  115. const result = await dialog.showOpenDialog(win!, {
  116. properties: ['openDirectory'],
  117. title: 'Select Wallpaper Engine Workshop folder'
  118. })
  119. if (result.canceled || result.filePaths.length === 0) return null
  120. return result.filePaths[0]
  121. })
  122. ipcMain.handle(IpcChannels.CONFIG_PICK_FILE, async (_e) => {
  123. const win = BrowserWindow.getFocusedWindow()
  124. const result = await dialog.showOpenDialog(win!, {
  125. properties: ['openFile'],
  126. title: 'Select Wallpaper Engine config.json',
  127. filters: [{ name: 'JSON', extensions: ['json'] }]
  128. })
  129. if (result.canceled || result.filePaths.length === 0) return null
  130. return result.filePaths[0]
  131. })
  132. ipcMain.handle(IpcChannels.CONFIG_IMPORT_WE, (_e, sourcePath: string) => {
  133. const destPath = importWEConfigFile(sourcePath)
  134. const result = importWEConfig(destPath)
  135. return { ...result, configPath: destPath }
  136. })
  137. ipcMain.handle(IpcChannels.CONFIG_CREATE_FRESH, () => {
  138. const destPath = createFreshConfig()
  139. return { configPath: destPath }
  140. })
  141. }