52 lines
1022 B
Go
52 lines
1022 B
Go
package services
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func scanImage(args ...string) (string, error) {
|
|
cmd := exec.Command("scanimage", args...)
|
|
|
|
var stderr bytes.Buffer
|
|
cmd.Stderr = &stderr
|
|
|
|
var stdout bytes.Buffer
|
|
cmd.Stdout = &stdout
|
|
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
return "", fmt.Errorf("error scanning: %v", stderr.String())
|
|
}
|
|
|
|
return stdout.String(), nil
|
|
}
|
|
|
|
func status() (string, error) {
|
|
result, err := scanImage("--status")
|
|
if err != nil {
|
|
return "", fmt.Errorf("error getting status: %v", err)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func listDevices() ([]string, error) {
|
|
result, err := scanImage("--list-devices")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error listing devices: %v", err)
|
|
}
|
|
|
|
return strings.Split(result, "\n"), nil
|
|
}
|
|
|
|
func startScan(outputFile string) (string, error) {
|
|
result, err := scanImage("-d", "escl:https://printer:443", "--format", "png", "--output-file", outputFile)
|
|
if err != nil {
|
|
return "", fmt.Errorf("error scanning: %v", err)
|
|
}
|
|
|
|
return result, nil
|
|
}
|