diff --git a/src/main.ts b/src/main.ts index 911db87..42cceef 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,9 @@ import { initDiscordRpc } from "./native/discordRpc"; import { initTray } from "./native/tray"; import { BUILD_URL, createMainWindow, mainWindow } from "./native/window"; +// Added by ICEBADGERR 02/10/2026 +import { detectRunningGame } from "./native/gameDetection"; + // Squirrel-specific logic // create/remove shortcuts on Windows when installing / uninstalling // we just need to close out of the app immediately @@ -38,6 +41,9 @@ if (acquiredLock) { // start auto update logic updateElectronApp({ onNotifyUser }); + //Variable to check the current game process that is running + let currentGame: string | null = null; + // create and configure the app when electron is ready app.on("ready", () => { // create window and application contexts @@ -54,6 +60,21 @@ if (acquiredLock) { initTray(); initDiscordRpc(); + //Detect game that is being played code + setInterval(async () => { + const game = await detectRunningGame(); + + //Only log if it is changed + if (game !== currentGame) { + currentGame = game; + if (game) { + console.log('Now Playing:', game); + } else{ + console.log('Stopped Playing'); + } + } + }, 5000); //Checks every 5 seconds + // Windows specific fix for notifications if (process.platform === "win32") { app.setAppUserModelId("chat.stoat.notifications"); diff --git a/src/native/gameDetection.ts b/src/native/gameDetection.ts new file mode 100644 index 0000000..2b4b4fb --- /dev/null +++ b/src/native/gameDetection.ts @@ -0,0 +1,31 @@ +import { exec } from 'child_process'; +import { promisify } from 'util'; + +const execAsync = promisify(exec) + +//Simple detect list +const KNOWN_GAMES: Record = { + 'steam.exe': 'Steam', + 'discord.exe': 'Discord', + 'code': 'VS Code (replace with actual game later)' + // Add more later +}; + +export async function detectRunningGame(): Promise { + try{ + //For linux + const { stdout } = await execAsync('ps aux'); + const lowerOutput = stdout.toLowerCase(); + + for (const [processName, gameName] of Object.entries(KNOWN_GAMES)) { + if (lowerOutput.includes(processName.toLowerCase())) { + return gameName; + } + } + + return null; + } catch (error) { + console.error('Error deteching game:', error); + return null; + } +} \ No newline at end of file