diff --git a/ui/desktop/src/hooks/useChatStream.ts b/ui/desktop/src/hooks/useChatStream.ts index 022222f8a66e..da0b31498625 100644 --- a/ui/desktop/src/hooks/useChatStream.ts +++ b/ui/desktop/src/hooks/useChatStream.ts @@ -14,7 +14,6 @@ import { import { createUserMessage, getCompactingMessage, getThinkingMessage } from '../types/message'; import { errorMessage } from '../utils/conversionUtils'; -import { LocalMessageStorage } from '../utils/localMessageStorage'; const resultsCache = new Map(); @@ -165,8 +164,6 @@ export function useChatStream({ }); const [notifications, setNotifications] = useState([]); const abortControllerRef = useRef(null); - const [lastInteractionTime, setLastInteractionTime] = useState(Date.now()); - const [powerSaveTimeoutId, setPowerSaveTimeoutId] = useState(null); useEffect(() => { if (session) { @@ -183,42 +180,12 @@ export function useChatStream({ setNotifications((prev) => [...prev, notification]); }, []); - const stopPowerSaveBlocker = useCallback(() => { - try { - window.electron.stopPowerSaveBlocker(); - } catch (error) { - console.error('Failed to stop power save blocker:', error); - } - - if (powerSaveTimeoutId) { - window.clearTimeout(powerSaveTimeoutId); - setPowerSaveTimeoutId(null); - } - }, [powerSaveTimeoutId]); - const onFinish = useCallback( (error?: string): void => { - stopPowerSaveBlocker(); - if (error) { setSessionLoadError(error); } - const timeSinceLastInteraction = Date.now() - lastInteractionTime; - - if (timeSinceLastInteraction > 60000) { - try { - window.electron.showNotification({ - title: 'Goose finished the task', - body: 'Click here for details', - }); - } catch (error) { - console.error('Failed to show notification:', error); - } - } else { - console.log('useChatStream: Not showing notification (task took less than 2 seconds)'); - } - const isNewSession = sessionId && sessionId.match(/^\d{8}_\d{6}$/); if (isNewSession) { console.log( @@ -230,22 +197,9 @@ export function useChatStream({ setChatState(ChatState.Idle); onStreamFinish(); }, - [onStreamFinish, stopPowerSaveBlocker, lastInteractionTime, sessionId] + [onStreamFinish, sessionId] ); - useEffect(() => { - return () => { - if (powerSaveTimeoutId) { - window.clearTimeout(powerSaveTimeoutId); - } - try { - window.electron.stopPowerSaveBlocker(); - } catch (error) { - console.error('Failed to stop power save blocker during cleanup:', error); - } - }; - }, [powerSaveTimeoutId]); - // Load session on mount or sessionId change useEffect(() => { if (!sessionId) return; @@ -306,29 +260,9 @@ export function useChatStream({ } if (!userMessage.trim()) { - stopPowerSaveBlocker(); return; } - LocalMessageStorage.addMessage(userMessage.trim()); - - try { - window.electron.startPowerSaveBlocker(); - } catch (error) { - console.error('Failed to start power save blocker:', error); - } - - setLastInteractionTime(Date.now()); - - const timeoutId = window.setTimeout( - () => { - console.warn('Power save blocker timeout - stopping automatically after 15 minutes'); - stopPowerSaveBlocker(); - }, - 15 * 60 * 1000 - ); - setPowerSaveTimeoutId(timeoutId); - if (messagesRef.current.length === 0) { window.dispatchEvent(new CustomEvent('session-created')); } @@ -369,15 +303,7 @@ export function useChatStream({ } } }, - [ - sessionId, - session, - chatState, - updateMessages, - updateNotifications, - onFinish, - stopPowerSaveBlocker, - ] + [sessionId, session, chatState, updateMessages, updateNotifications, onFinish] ); const setRecipeUserParams = useCallback( @@ -420,10 +346,8 @@ export function useChatStream({ const stopStreaming = useCallback(() => { abortControllerRef.current?.abort(); - setLastInteractionTime(Date.now()); - stopPowerSaveBlocker(); setChatState(ChatState.Idle); - }, [stopPowerSaveBlocker]); + }, []); const cached = resultsCache.get(sessionId); const maybe_cached_messages = session ? messages : cached?.messages || []; diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 27c583e53b64..80035f02131d 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -2178,39 +2178,6 @@ async function appMain() { } }); - ipcMain.handle('start-power-save-blocker', (event) => { - const window = BrowserWindow.fromWebContents(event.sender); - const windowId = window?.id; - - if (windowId && !windowPowerSaveBlockers.has(windowId)) { - const blockerId = powerSaveBlocker.start('prevent-app-suspension'); - windowPowerSaveBlockers.set(windowId, blockerId); - console.log(`[Main] Started power save blocker ${blockerId} for window ${windowId}`); - return true; - } - - if (windowId && windowPowerSaveBlockers.has(windowId)) { - console.log(`[Main] Power save blocker already active for window ${windowId}`); - } - - return false; - }); - - ipcMain.handle('stop-power-save-blocker', (event) => { - const window = BrowserWindow.fromWebContents(event.sender); - const windowId = window?.id; - - if (windowId && windowPowerSaveBlockers.has(windowId)) { - const blockerId = windowPowerSaveBlockers.get(windowId)!; - powerSaveBlocker.stop(blockerId); - windowPowerSaveBlockers.delete(windowId); - console.log(`[Main] Stopped power save blocker ${blockerId} for window ${windowId}`); - return true; - } - - return false; - }); - // Handle metadata fetching from main process ipcMain.handle('fetch-metadata', async (_event, url) => { try { diff --git a/ui/desktop/src/preload.ts b/ui/desktop/src/preload.ts index 324964276005..2940f9b508ea 100644 --- a/ui/desktop/src/preload.ts +++ b/ui/desktop/src/preload.ts @@ -63,8 +63,6 @@ type ElectronAPI = { reloadApp: () => void; checkForOllama: () => Promise; selectFileOrDirectory: (defaultPath?: string) => Promise; - startPowerSaveBlocker: () => Promise; - stopPowerSaveBlocker: () => Promise; getBinaryPath: (binaryName: string) => Promise; readFile: (directory: string) => Promise; writeFile: (directory: string, content: string) => Promise; @@ -164,8 +162,6 @@ const electronAPI: ElectronAPI = { checkForOllama: () => ipcRenderer.invoke('check-ollama'), selectFileOrDirectory: (defaultPath?: string) => ipcRenderer.invoke('select-file-or-directory', defaultPath), - startPowerSaveBlocker: () => ipcRenderer.invoke('start-power-save-blocker'), - stopPowerSaveBlocker: () => ipcRenderer.invoke('stop-power-save-blocker'), getBinaryPath: (binaryName: string) => ipcRenderer.invoke('get-binary-path', binaryName), readFile: (filePath: string) => ipcRenderer.invoke('read-file', filePath), writeFile: (filePath: string, content: string) =>