فهرست منبع

added option to kill wallpaper-engine on exit

UwU 2 ماه پیش
والد
کامیت
d7f5e5d8bd

+ 10 - 2
src/main/index.ts

@@ -6,12 +6,14 @@ import { initLibrary } from './services/library.service'
 import { startWatcher } from './services/watcher.service'
 import { registerAllHandlers } from './ipc'
 import { initDesktopIcons, cleanupDesktopIcons } from './services/desktop-icons.service'
-import { getTrayEnabled, getAutostartPlaylistId } from './services/config.service'
+import { getTrayEnabled, getAutostartPlaylistId, getKillLweOnQuit } from './services/config.service'
 import { createTray } from './services/tray.service'
 import { initPlaylistPlayer, startPlaylist } from './services/playlist-player.service'
+import { killAllLweProcesses } from './services/lwe.service'
 
 const startMinimized = process.argv.includes('--minimized')
 let isQuitting = false
+let hasKilledLweOnQuit = false
 
 function createWindow(): BrowserWindow {
   const win = new BrowserWindow({
@@ -85,8 +87,14 @@ app.whenReady().then(() => {
   }
 })
 
-app.on('before-quit', () => {
+app.on('before-quit', (event) => {
   isQuitting = true
+
+  if (getKillLweOnQuit() && !hasKilledLweOnQuit) {
+    event.preventDefault()
+    hasKilledLweOnQuit = true
+    killAllLweProcesses().finally(() => app.quit())
+  }
 })
 
 app.on('window-all-closed', () => {

+ 10 - 2
src/main/ipc/config.handlers.ts

@@ -22,7 +22,9 @@ import {
   getAutostartMinimized,
   setAutostart,
   getAutostartPlaylistId,
-  setAutostartPlaylistId
+  setAutostartPlaylistId,
+  getKillLweOnQuit,
+  setKillLweOnQuit
 } from '../services/config.service'
 import { getDefaultWorkshopPath } from '../utils/paths'
 import { DEFAULT_LWE_REPO } from '@shared/constants'
@@ -47,7 +49,8 @@ export function registerConfigHandlers(): void {
     autostartSupported: isAutostartSupported(),
     autostartEnabled: getAutostartEnabled(),
     autostartMinimized: getAutostartMinimized(),
-    autostartPlaylistId: getAutostartPlaylistId()
+    autostartPlaylistId: getAutostartPlaylistId(),
+    killLweOnQuit: getKillLweOnQuit()
   }))
 
   ipcMain.handle(IpcChannels.CONFIG_GET_AUTOSTART_SUPPORTED, () => isAutostartSupported())
@@ -73,6 +76,11 @@ export function registerConfigHandlers(): void {
     }
   )
 
+  ipcMain.handle(IpcChannels.CONFIG_SET_KILL_LWE_ON_QUIT, (_e, enabled: boolean) => {
+    setKillLweOnQuit(enabled)
+    return { ok: true }
+  })
+
   ipcMain.handle(IpcChannels.CONFIG_SET_BACKUP_PATH, (_e, newPath: string) => {
     setConfiguredBackupPath(newPath)
     return { ok: true }

+ 11 - 1
src/main/services/config.service.ts

@@ -15,6 +15,7 @@ interface AppConfig {
   autostartEnabled: boolean
   autostartMinimized: boolean
   autostartPlaylistId: string | null
+  killLweOnQuit: boolean
 }
 
 const store = new Store<AppConfig>({
@@ -29,7 +30,8 @@ const store = new Store<AppConfig>({
     trayEnabled: false,
     autostartEnabled: false,
     autostartMinimized: false,
-    autostartPlaylistId: null
+    autostartPlaylistId: null,
+    killLweOnQuit: false
   }
 })
 
@@ -94,6 +96,14 @@ export function setAutostartPlaylistId(id: string | null): void {
   store.set('autostartPlaylistId', id)
 }
 
+export function getKillLweOnQuit(): boolean {
+  return store.get('killLweOnQuit')
+}
+
+export function setKillLweOnQuit(enabled: boolean): void {
+  store.set('killLweOnQuit', enabled)
+}
+
 export function getDefaultFps(): number | null {
   return store.get('defaultFps')
 }

+ 3 - 0
src/preload/index.ts

@@ -88,6 +88,7 @@ const api = {
       autostartEnabled: boolean
       autostartMinimized: boolean
       autostartPlaylistId: string | null
+      killLweOnQuit: boolean
     }> => ipcRenderer.invoke(IpcChannels.CONFIG_GET),
     setWorkshopPath: (p: string): Promise<{ ok: boolean }> =>
       ipcRenderer.invoke(IpcChannels.CONFIG_SET_WORKSHOP_PATH, p),
@@ -109,6 +110,8 @@ const api = {
       ipcRenderer.invoke(IpcChannels.CONFIG_CREATE_FRESH),
     setTrayEnabled: (enabled: boolean): Promise<{ ok: boolean }> =>
       ipcRenderer.invoke(IpcChannels.CONFIG_SET_TRAY_ENABLED, enabled),
+    setKillLweOnQuit: (enabled: boolean): Promise<{ ok: boolean }> =>
+      ipcRenderer.invoke(IpcChannels.CONFIG_SET_KILL_LWE_ON_QUIT, enabled),
     setAutostart: (
       enabled: boolean,
       minimized: boolean,

+ 27 - 0
src/renderer/src/components/settings/SettingsView.tsx

@@ -43,6 +43,7 @@ export default function SettingsView() {
 
   // System tray & autostart
   const [trayEnabled, setTrayEnabled] = useState(false)
+  const [killLweOnQuit, setKillLweOnQuit] = useState(false)
   const [autostartSupported, setAutostartSupported] = useState(false)
   const [autostartEnabled, setAutostartEnabledState] = useState(false)
   const [autostartMinimized, setAutostartMinimized] = useState(false)
@@ -59,6 +60,7 @@ export default function SettingsView() {
       setBackupPath(cfg.backupPath ?? '')
       setAutoUnsubscribeAfterBackup(cfg.autoUnsubscribeAfterBackup)
       setTrayEnabled(cfg.trayEnabled)
+      setKillLweOnQuit(cfg.killLweOnQuit)
       setAutostartSupported(cfg.autostartSupported)
       setAutostartEnabledState(cfg.autostartEnabled)
       setAutostartMinimized(cfg.autostartMinimized)
@@ -225,6 +227,12 @@ export default function SettingsView() {
     await window.electronAPI.config.setTrayEnabled(newVal)
   }
 
+  async function handleKillLweOnQuitToggle() {
+    const newVal = !killLweOnQuit
+    setKillLweOnQuit(newVal)
+    await window.electronAPI.config.setKillLweOnQuit(newVal)
+  }
+
   async function saveAutostart(patch: {
     enabled?: boolean
     minimized?: boolean
@@ -598,6 +606,25 @@ export default function SettingsView() {
             {killMsg && (
               <p className="mt-2 text-xs text-gray-400">{killMsg}</p>
             )}
+
+            <label className="mt-3 flex items-center gap-3 cursor-pointer">
+              <button
+                onClick={handleKillLweOnQuitToggle}
+                className={`relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors ${
+                  killLweOnQuit ? 'bg-indigo-600' : 'bg-white/10'
+                }`}
+              >
+                <span
+                  className={`inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform ${
+                    killLweOnQuit ? 'translate-x-4' : 'translate-x-0.5'
+                  }`}
+                />
+              </button>
+              <span className="flex items-center gap-2 text-sm text-gray-300">
+                <Skull size={16} />
+                Kill all linux-wallpaperengine processes when WE Manager quits
+              </span>
+            </label>
           </div>
 
           {/* Install progress */}

+ 1 - 0
src/shared/ipc-channels.ts

@@ -81,6 +81,7 @@ export const IpcChannels = {
 
   // Tray & autostart
   CONFIG_SET_TRAY_ENABLED: 'config:set-tray-enabled',
+  CONFIG_SET_KILL_LWE_ON_QUIT: 'config:set-kill-lwe-on-quit',
   CONFIG_SET_AUTOSTART: 'config:set-autostart',
   CONFIG_GET_AUTOSTART_SUPPORTED: 'config:get-autostart-supported',