diff --git a/api/encoder/ffmpeg.go b/api/encoder/ffmpeg.go
index fc6d9bb..11fcc36 100644
--- a/api/encoder/ffmpeg.go
+++ b/api/encoder/ffmpeg.go
@@ -2,7 +2,9 @@ package encoder
import (
"bufio"
+ "bytes"
"encoding/json"
+ "fmt"
"io"
"os/exec"
"strconv"
@@ -42,10 +44,10 @@ type ffmpegOptions struct {
}
// Run runs the ffmpeg encoder with options.
-func (f *FFmpeg) Run(input string, output string, data string) {
+func (f *FFmpeg) Run(input string, output string, data string) error {
args := []string{
"-hide_banner",
- "-v", "0",
+ "-loglevel", "error", // Set loglevel to fail job on errors.
"-progress", "pipe:1",
"-i", input,
}
@@ -66,6 +68,10 @@ func (f *FFmpeg) Run(input string, output string, data string) {
log.Info("running FFmpeg with options: ", args)
cmd := exec.Command(ffmpegCmd, args...)
stdout, _ := cmd.StdoutPipe()
+
+ // Capture stderr (if any).
+ var stderr bytes.Buffer
+ cmd.Stderr = &stderr
cmd.Start()
// Send progress updates.
@@ -74,8 +80,14 @@ func (f *FFmpeg) Run(input string, output string, data string) {
// Update progress struct.
f.updateProgress(stdout)
- cmd.Wait()
+ err := cmd.Wait()
+ if err != nil {
+ fmt.Println(stderr.String())
+ f.finish()
+ return err
+ }
f.finish()
+ return nil
}
func (f *FFmpeg) updateProgress(stdout io.ReadCloser) {
diff --git a/api/worker/job.go b/api/worker/job.go
index d834cb7..294d075 100644
--- a/api/worker/job.go
+++ b/api/worker/job.go
@@ -95,7 +95,11 @@ func encode(job types.Job, probeData *encoder.FFProbeResponse) error {
// Run FFmpeg.
f := &encoder.FFmpeg{}
go trackEncodeProgress(encodeID, probeData, f)
- f.Run(job.LocalSource, dest, p.Data)
+ err = f.Run(job.LocalSource, dest, p.Data)
+ if err != nil {
+ close(progressCh)
+ return err
+ }
close(progressCh)
// Set encode progress to 100.
diff --git a/web/src/auth.js b/web/src/auth.js
index aaacb95..4ae0a97 100644
--- a/web/src/auth.js
+++ b/web/src/auth.js
@@ -23,6 +23,7 @@ export default {
if (redirect) {
context.$router.push({ name: redirect });
+ context.$router.go();
}
}, (err) => {
console.log(err);
@@ -50,6 +51,7 @@ export default {
cookie.remove('token');
this.user.authenticated = false;
context.$router.push({ name: 'login' });
+ context.$router.go();
},
checkAuth(context) {
diff --git a/web/src/components/JobsTable.vue b/web/src/components/JobsTable.vue
index 1dbb280..937d7d5 100644
--- a/web/src/components/JobsTable.vue
+++ b/web/src/components/JobsTable.vue
@@ -11,8 +11,15 @@
:fields="fields"
:items="items">
+
+ {{ data.item.status }}
+
+
-
diff --git a/web/src/components/MachinesTable.vue b/web/src/components/MachinesTable.vue
index b5856b6..d3c4fd6 100644
--- a/web/src/components/MachinesTable.vue
+++ b/web/src/components/MachinesTable.vue
@@ -4,7 +4,7 @@
striped hover dark
:fields="fields"
:items="items">
-
+
❌
diff --git a/web/src/components/PresetsTable.vue b/web/src/components/PresetsTable.vue
index 0d2515d..f03de2f 100644
--- a/web/src/components/PresetsTable.vue
+++ b/web/src/components/PresetsTable.vue
@@ -153,6 +153,7 @@ export default {
onSubmit(evt) {
evt.preventDefault();
console.log(JSON.stringify(this.form));
+ this.form.data = JSON.stringify(this.editor.get());
this.updatePreset(this.form);
},