/
index.js
106 lines (93 loc) · 3.9 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { spawn } from 'child_process'
import { existsSync } from 'fs';
import hasbin from 'hasbin'
export default class Gphoto2 {
constructor(gphoto2Location) {
if(!existsSync(gphoto2Location) && !hasbin.sync("gphoto2")) {
throw console.error("Unable to find gphoto2 binary")
}
this.gphoto2Binary = gphoto2Location || "gphoto2"
this.configs = []
}
listCameras(callback) {
const process = spawn(this.gphoto2Binary, ['--list-cameras'])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
listPorts(callback) {
const process = spawn(this.gphoto2Binary, ['--list-ports'])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
listFiles(callback) {
const process = spawn(this.gphoto2Binary, ['--list-files'])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
getFile(fileRange, callback) {
const process = spawn(this.gphoto2Binary, [`--get-file ${fileRange}`])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
getAllFiles(callback) {
const params = ['--get-all-files']
const process = spawnSync(this.gphoto2Binary, params)
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
captureImage(interval, hookScript, callback) {
let params = [
'--capture-image',
`--interval ${interval}`,
`--hook-script ${hookScript}`
]
const process = spawn(this.gphoto2Binary, params)
process.stderr.on('data', (err) => callback(err.toString()))
}
queueConfigCommand(config) {
const configPath = config.split("=")
const _path = configPath[0]
const value = configPath[1]
const index = -1
this.configs.some((config, i) => {
index = config.path == _path ? i : -1
return config.path == _path
})
if(index == -1) {
this.configs.push({path: _path, value: value[1]})
}
else {
this.configs[index] = {path: _path, value: value}
}
}
setConfig(config, callback) {
if(!config && !config.includes("=")) {
throw console.error("Missing proper config parameter")
}
const process = spawn(this.gphoto2Binary, ['--set-config', `${config}`])
process.stderr.on('data', (err) => callback(err.toString()))
}
setConfigValue(config, callback) {
const process = spawn(this.gphoto2Binary, ['--set-config-value', `${config}`])
process.stderr.on('data', (err) => callback(err.toString()))
}
getConfig(config, callback) {
const process = spawn(this.gphoto2Binary, ['--get-config', `${config}`])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
listConfig(callback) {
const process = spawn(this.gphoto2Binary, ['--list-config'])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
listAllConfig(callback) {
const process = spawn(this.gphoto2Binary, ['--list-all-config'])
process.stdout.on('data', (data) => callback(data.toString()))
process.stderr.on('data', (err) => callback(null, err.toString()))
}
reset(callback) {
const process = spawn(this.gphoto2Binary, ['--reset'])
process.stderr.on('data', (err) => callback(err.toString()))
}
}