UNPKG

huble-mouse-tracker

Version:

Mouse and keyboard event tracker using Python

86 lines (77 loc) 2.78 kB
const { PythonShell } = require('python-shell'); const { app } = require('electron'); const path = require('path'); const fs = require('fs'); const logFilePath = path.join('/Users/app/trakr-electron', 'index.txt'); const fileStream = fs.createWriteStream(logFilePath, { flags: 'a' }); function logMessage(message) { console.log(message); fileStream.write(message + '\n'); } class MouseTracker { constructor() { this.pyshell = null; } start(options = {}) { const { mouseOnly = false, keyboardOnly = false, onMove, onClick, onScroll, onKeyPress } = options; logMessage('start') const scriptPath = app.isPackaged ? path.join('/Users/app/trakr-electron/node_modules/huble-mouse-tracker/tracker', 'mouse_tracker.py') : path.join(__dirname, 'tracker', 'mouse_tracker.py'); logMessage('start done') logMessage(scriptPath) const pyOptions = { mode: 'text', pythonPath: app.isPackaged ? path.join(process.resourcesPath, 'python', 'pythonw.exe') : 'python', args: [ mouseOnly ? '--mouse-only' : '', keyboardOnly ? '--keyboard-only' : '' ].filter(Boolean) }; logMessage(pyOptions) this.pyshell = new PythonShell(scriptPath, pyOptions); logMessage(this.pyshell) this.pyshell.on('message', (message) => { try { const event = JSON.parse(message); logMessage(event) switch(event.type) { case 'move': logMessage('mouse move') onMove && onMove(event.x, event.y); break; case 'click': logMessage('mouse click') onClick && onClick(event.x, event.y, event.button, event.pressed); break; case 'scroll': logMessage('mouse scroll') onScroll && onScroll(event.x, event.y, event.dx, event.dy); break; case 'keypress': logMessage('keypress'); onKeyPress && onKeyPress(event.key); break; } } catch (error) { console.error('Error parsing message:', error); logMessage('Error parsing message:', error); } }); return this; } stop() { if (this.pyshell) { this.pyshell.kill(); this.pyshell = null; } } } module.exports = MouseTracker;