/ src / main / aid / automator.ts
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  }