Skip to content
Snippets Groups Projects
Commit 1394ecbc authored by Christian Pointner's avatar Christian Pointner
Browse files

some cleanup

parent 4878ce98
No related branches found
No related tags found
No related merge requests found
......@@ -187,15 +187,11 @@ func (c *ffmpegFetchConverter) Wait() (loudness interface{}, log JobLog, err err
exitcode := status.ExitStatus()
c.job.im.dbgLog.Printf("ffmpeg-converter: ffmpeg returned %d", exitcode)
c.log.append("stdout", fmt.Sprintf("ffmpeg returned %d", exitcode))
} else {
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
return nil, c.log.log, err
}
} else {
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
}
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
return nil, c.log.log, err
}
......
......@@ -124,15 +124,11 @@ func (c *ffmpegNormalizeConverter) Wait() (log JobLog, err error) {
exitcode := status.ExitStatus()
c.job.im.dbgLog.Printf("ffmpeg-converter: ffmpeg returned %d", exitcode)
c.log.append("stdout", fmt.Sprintf("ffmpeg returned %d", exitcode))
} else {
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
return c.log.log, err
}
} else {
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
}
c.job.im.errLog.Println("ffmpeg-converter: getting exit code of ffmpeg failed:", err)
c.log.append("stderr", "ERROR getting exit code of ffmpeg: "+err.Error())
return c.log.log, err
}
......
......@@ -94,10 +94,11 @@ func (st *Store) UpdateFileImportState(group string, id uint64, state ImportStat
is["source__import__state"] = state
is["source__import__success"] = success
// TODO: this should probably be called more explicit?
// TODO: this should probably be called explicity?
if state == ImportDone {
// TODO: handle returned error...
st.SyncFileMetadata(group, id)
if err := st.SyncFileMetadataFromFile(group, id); err != nil {
return nil, err
}
}
if err := st.db.Model(&file).Where("group_name = ?", group).Update(is).Error; err != nil {
......
......@@ -30,11 +30,13 @@ import (
"encoding/json"
"fmt"
"os/exec"
"syscall"
"time"
)
type ffprobeFormat struct {
NumStreams uint `json:"nb_streams"`
NumPrograms uint `json:"nb_programs"`
FormatName string `json:"format_name"`
DurationSec string `json:"duration"`
Size string `json:"size"`
......@@ -46,18 +48,24 @@ type ffprobeOutput struct {
Format ffprobeFormat `json:"format"`
}
func (st *Store) SyncFileMetadata(group string, id uint64) (err error) {
func (st *Store) SyncFileMetadataFromFile(group string, id uint64) error {
filename := st.GetFilePath(group, id)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
// cmd := exec.CommandContext(ctx, "ffprobe", "-hide_banner", "-print_format", "json", "-show_format", filename)
cmd := exec.CommandContext(ctx, "ffprobe", "-print_format", "json", "-show_format", filename)
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr // TODO: handle stderr...
if err = cmd.Run(); err != nil {
return
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
// TODO: handle stderr?
return fmt.Errorf("ffprobe returned %d", status.ExitStatus())
}
}
return fmt.Errorf("getting exit code of ffprobe failed:", err)
}
var output ffprobeOutput
......@@ -65,8 +73,18 @@ func (st *Store) SyncFileMetadata(group string, id uint64) (err error) {
if err := jd.Decode(&output); err != nil {
return err
}
d, err := time.ParseDuration(output.Format.DurationSec + "s")
if err != nil {
return fmt.Errorf("unable to parse duration from ffprobe output:", err)
}
// TODO: store metadata in database
fmt.Printf("ffprobe output: %+v", output)
return
fmt.Printf("**************** ffprobe output ****************\n")
fmt.Printf("found %d/%d streams/programs\n", output.Format.NumStreams, output.Format.NumPrograms)
fmt.Printf("Format: %s, Duration: %v\n", output.Format.FormatName, d)
fmt.Printf("Tags:\n")
for k, v := range output.Format.Tags {
fmt.Printf("\t%s: %s\n", k, v)
}
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment