2023-10-17 11:54:29 +02:00
|
|
|
import { spawn } from 'node:child_process'
|
2023-10-17 09:27:08 +02:00
|
|
|
import { adbPath, scrcpyPath } from '@electron/configs/index.js'
|
2023-09-18 09:07:28 +02:00
|
|
|
|
2023-10-17 11:54:29 +02:00
|
|
|
const shell = async (command, { stdout, stderr } = {}) => {
|
|
|
|
const args = command.split(' ')
|
|
|
|
const scrcpyProcess = spawn(scrcpyPath, args, {
|
|
|
|
env: { ...process.env, ADB: adbPath },
|
|
|
|
shell: true,
|
|
|
|
})
|
2023-09-18 09:07:28 +02:00
|
|
|
|
2023-10-17 11:54:29 +02:00
|
|
|
scrcpyProcess.stdout.on('data', (data) => {
|
|
|
|
const stringData = data.toString()
|
|
|
|
|
|
|
|
console.log('scrcpyProcess.stdout.data:', stringData)
|
|
|
|
|
|
|
|
if (stdout) {
|
|
|
|
stdout(stringData)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
scrcpyProcess.stderr.on('data', (data) => {
|
|
|
|
const stringData = data.toString()
|
|
|
|
|
|
|
|
console.error('scrcpyProcess.stderr.data:', stringData)
|
|
|
|
|
|
|
|
if (stderr) {
|
|
|
|
stderr(stringData)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
scrcpyProcess.on('close', (code) => {
|
|
|
|
if (code === 0) {
|
|
|
|
resolve()
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
reject(new Error(`Command failed with code ${code}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
scrcpyProcess.on('error', (err) => {
|
|
|
|
reject(err)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2023-09-18 09:07:28 +02:00
|
|
|
|
|
|
|
export default () => ({
|
|
|
|
shell,
|
|
|
|
})
|