diff options
Diffstat (limited to 'rhimport/fetcher.go')
-rw-r--r-- | rhimport/fetcher.go | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/rhimport/fetcher.go b/rhimport/fetcher.go index 5fa442e..fde9da8 100644 --- a/rhimport/fetcher.go +++ b/rhimport/fetcher.go @@ -47,13 +47,13 @@ type FetcherCurlCBData struct { basepath string filename string remotename string - file *os.File + conv Converter writeError error } func (self *FetcherCurlCBData) Cleanup() { - if self.file != nil { - self.file.Close() + if self.conv != nil { + self.conv.Close() } } @@ -73,7 +73,7 @@ func curlHeaderCallback(ptr []byte, userdata interface{}) bool { func curlWriteCallback(ptr []byte, userdata interface{}) bool { data := userdata.(*FetcherCurlCBData) - if data.file == nil { + if data.conv == nil { if data.filename == "" { name := path.Clean("/" + data.remotename) if name == "/" { @@ -82,15 +82,16 @@ func curlWriteCallback(ptr []byte, userdata interface{}) bool { } data.filename = filepath.Join(data.basepath, name) } - fp, err := os.OpenFile(data.filename, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) + nc, newFilename, err := NewFFMpegConverter(data.filename) if err != nil { - rhl.Printf("Unable to create file %s: %s", data.filename, err) + rhl.Printf("Unable to create converter for file %s: %s", data.filename, err) data.writeError = err return false } - data.file = fp + data.filename = newFilename + data.conv = nc } - if _, err := data.file.Write(ptr); err != nil { + if _, err := data.conv.Write(ptr); err != nil { rhl.Printf("Unable to write file %s: %s", data.filename, err) data.writeError = err return false @@ -155,8 +156,12 @@ func fetchFileCurl(ctx *Context, res *Result, uri *url.URL) (err error) { easy.Setopt(curl.OPT_PROGRESSFUNCTION, curlProgressCallback) easy.Setopt(curl.OPT_PROGRESSDATA, cbdata) - if err = easy.Perform(); err != nil { - if cbdata.file != nil { + err = easy.Perform() + cbdata.conv.Close() + rhl.Printf("waiting for converter to finish...") + convOut, convErr := cbdata.conv.GetResult() + if err != nil || cbdata.writeError != nil || convErr != nil { + if cbdata.conv != nil { rhdl.Printf("Removing stale file: %s", cbdata.filename) os.Remove(cbdata.filename) os.Remove(path.Dir(cbdata.filename)) @@ -168,6 +173,12 @@ func fetchFileCurl(ctx *Context, res *Result, uri *url.URL) (err error) { if cbdata.writeError != nil { err = cbdata.writeError } + if convErr != nil { + err = convErr + if convOut != "" { + rhl.Printf("converter output: %s", convOut) + } + } err = fmt.Errorf("curl-fetcher('%s'): %s", ctx.SourceUri, err) rhl.Println(err) return @@ -262,8 +273,12 @@ func fetchFileArchiv(ctx *Context, res *Result, uri *url.URL) (err error) { easy.Setopt(curl.OPT_PROGRESSDATA, cbdata) rhdl.Printf("importing archiv file from %s", scpuri) - if err = easy.Perform(); err != nil { - if cbdata.file != nil { + err = easy.Perform() + cbdata.conv.Close() + rhl.Printf("waiting for converter to finish...") + convOut, convErr := cbdata.conv.GetResult() + if err != nil || cbdata.writeError != nil || convErr != nil { + if cbdata.conv != nil { rhdl.Printf("Removing stale file: %s", cbdata.filename) os.Remove(cbdata.filename) os.Remove(path.Dir(cbdata.filename)) @@ -275,6 +290,12 @@ func fetchFileArchiv(ctx *Context, res *Result, uri *url.URL) (err error) { if cbdata.writeError != nil { err = cbdata.writeError } + if convErr != nil { + err = convErr + if convOut != "" { + rhl.Printf("converter output: %s", convOut) + } + } err = fmt.Errorf("archiv-fetcher('%s'): %s", ctx.SourceUri, err) rhl.Println(err) return |