automator.ts
1 import { Application, Automator as AutomatorImpl } from './types' 2 import { clipboard } from 'electron' 3 import MacosAutomator from './macos' 4 import WindowsAutomator from './windows' 5 import NutAutomator from './nut' 6 import Automation from './automation' 7 8 export default class Automator { 9 automator: AutomatorImpl 10 11 constructor() { 12 if (process.platform === 'darwin') { 13 this.automator = new MacosAutomator() 14 } else if (process.platform === 'win32') { 15 this.automator = new WindowsAutomator() 16 } else { 17 this.automator = new NutAutomator() 18 } 19 } 20 21 async getForemostApp(): Promise<Application | null> { 22 try { 23 return await this.automator.getForemostApp() 24 } catch (error) { 25 console.warn(error) 26 return null 27 } 28 } 29 30 async selectAll(): Promise<void> { 31 try { 32 await this.automator.selectAll() 33 } catch (error) { 34 console.error(error) 35 } 36 } 37 38 async moveCaretBelow(): Promise<void> { 39 try { 40 await this.automator.moveCaretBelow() 41 } catch (error) { 42 console.error(error) 43 } 44 } 45 46 async getSelectedText(): Promise<string> { 47 try { 48 // save and set 49 const clipboardText = clipboard.readText() 50 clipboard.writeText('') 51 52 // get it 53 await this.automator.copySelectedText() 54 const selectedText = clipboard.readText() 55 56 // restore and done 57 clipboard.writeText(clipboardText) 58 return selectedText 59 } catch (error) { 60 console.error(error) 61 return null 62 } 63 } 64 65 async deleteSelectedText(): Promise<void> { 66 try { 67 await this.automator.deleteSelectedText() 68 } catch (error) { 69 console.error(error) 70 } 71 } 72 73 async pasteClipboard(): Promise<void> { 74 try { 75 await this.automator.pasteText() 76 } catch (error) { 77 console.error(error) 78 } 79 } 80 81 async pasteText(textToPaste: string): Promise<boolean> { 82 try { 83 // save and set 84 const clipboardText = clipboard.readText() 85 86 // try to write text to clipboard 87 const copied = await Automation.writeTextToClipboard(textToPaste) 88 if (!copied) { 89 return false 90 } 91 92 // paste it 93 this.pasteClipboard() 94 95 // restore 96 await Automation.writeTextToClipboard(clipboardText) 97 return true 98 } catch (error) { 99 console.error(error) 100 return false 101 } 102 } 103 }