error handlers

This commit is contained in:
frr
2018-02-01 16:30:02 +01:00
parent 4afe452d7d
commit 983d2f1308

View File

@@ -14,7 +14,6 @@ import (
"strings" "strings"
"regexp" "regexp"
"strconv" "strconv"
"log"
) )
type Transcoder struct { type Transcoder struct {
@@ -140,8 +139,10 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati
} }
func (t *Transcoder) Run() (<-chan bool) { func (t *Transcoder) Run() (<-chan bool, error) {
done := make(chan bool) done := make(chan bool)
var err error
command := t.GetCommand() command := t.GetCommand()
proc := exec.Command("/bin/sh", "-c", command) proc := exec.Command("/bin/sh", "-c", command)
@@ -149,41 +150,38 @@ func (t *Transcoder) Run() (<-chan bool) {
t.SetProccess(proc) t.SetProccess(proc)
go func() { go func() {
perror := proc.Start() err := proc.Start()
if perror != nil { if err != nil {
log.Fatal(perror)
return return
} }
proc.Wait() proc.Wait()
done <- true done <- true
close(done)
}() }()
return done return done, err
} }
// TODO: ONLY WORKS FOR VIDEO FILES // TODO: ONLY WORKS FOR VIDEO FILES
func (t Transcoder) Output() (chan models.Progress) { func (t Transcoder) Output() (<-chan models.Progress, error) {
out := make(chan models.Progress) out := make(chan models.Progress)
var err error
go func() { go func() {
defer close(out)
stderr, serr := t.Process().StderrPipe() stderr, stderror := t.Process().StderrPipe()
if serr != nil { if err != nil {
log.Fatal(serr) err = stderror
return return
} }
scanner := bufio.NewScanner(stderr) scanner := bufio.NewScanner(stderr)
split := func(data []byte, atEOF bool) (advance int, token []byte, err error) { split := func(data []byte, atEOF bool) (advance int, token []byte, spliterror error) {
if err != nil {
log.Fatal(err)
return 0, nil, nil
}
if atEOF && len(data) == 0 { if atEOF && len(data) == 0 {
return 0, nil, nil return 0, nil, nil
@@ -244,12 +242,10 @@ func (t Transcoder) Output() (chan models.Progress) {
} }
} }
defer close(out) if scerror := scanner.Err(); err != nil {
err = scerror
if err := scanner.Err(); err != nil {
log.Fatal(err)
} }
}() }()
return out return out, err
} }