Skip to content
Snippets Groups Projects
Commit e9fb3aed authored by Travis Ralston's avatar Travis Ralston
Browse files

Use built-in MultiReader

parent 428eab36
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,7 @@ type AudioGenerator interface { ...@@ -23,7 +23,7 @@ type AudioGenerator interface {
var generators = make([]Generator, 0) var generators = make([]Generator, 0)
func GetGenerator(img io.Reader, contentType string, needsAnimation bool) (Generator, *readers.PrefixedReader) { func GetGenerator(img io.Reader, contentType string, needsAnimation bool) (Generator, io.Reader) {
br := readers.NewBufferReadsReader(img) br := readers.NewBufferReadsReader(img)
for _, g := range generators { for _, g := range generators {
if needsAnimation && !g.supportsAnimation() { if needsAnimation && !g.supportsAnimation() {
......
...@@ -54,7 +54,7 @@ func GenerateThumbnail(imgStream io.ReadCloser, contentType string, width int, h ...@@ -54,7 +54,7 @@ func GenerateThumbnail(imgStream io.ReadCloser, contentType string, width int, h
return generator.GenerateThumbnail(buffered.GetRewoundReader(), contentType, width, height, method, animated, ctx) return generator.GenerateThumbnail(buffered.GetRewoundReader(), contentType, width, height, method, animated, ctx)
} }
func GetGenerator(imgStream io.Reader, contentType string, animated bool) (i.Generator, *readers.PrefixedReader, error) { func GetGenerator(imgStream io.Reader, contentType string, animated bool) (i.Generator, io.Reader, error) {
generator, reconstructed := i.GetGenerator(imgStream, contentType, animated) generator, reconstructed := i.GetGenerator(imgStream, contentType, animated)
if generator == nil { if generator == nil {
return nil, reconstructed, ErrUnsupported return nil, reconstructed, ErrUnsupported
......
...@@ -11,7 +11,7 @@ type BufferReadsReader struct { ...@@ -11,7 +11,7 @@ type BufferReadsReader struct {
r io.Reader r io.Reader
original io.Reader original io.Reader
b *bytes.Buffer b *bytes.Buffer
pr *PrefixedReader pr io.Reader
} }
func NewBufferReadsReader(r io.Reader) *BufferReadsReader { func NewBufferReadsReader(r io.Reader) *BufferReadsReader {
...@@ -32,15 +32,15 @@ func (r *BufferReadsReader) Read(p []byte) (int, error) { ...@@ -32,15 +32,15 @@ func (r *BufferReadsReader) Read(p []byte) (int, error) {
return r.r.Read(p) return r.r.Read(p)
} }
func (r *BufferReadsReader) MakeRewoundReader() (*PrefixedReader, error) { func (r *BufferReadsReader) MakeRewoundReader() (io.Reader, error) {
if r.pr != nil { if r.pr != nil {
return r.pr, errors.New("prefixed reader already created from this reader") return r.pr, errors.New("prefixed reader already created from this reader")
} }
r.pr = NewPrefixedReader(r.b, r.original) r.pr = io.MultiReader(r.b, r.original)
return r.pr, nil return r.pr, nil
} }
func (r *BufferReadsReader) GetRewoundReader() *PrefixedReader { func (r *BufferReadsReader) GetRewoundReader() io.Reader {
pr, _ := r.MakeRewoundReader() pr, _ := r.MakeRewoundReader()
return pr return pr
} }
package readers
import (
"bytes"
"io"
)
type PrefixedReader struct {
io.Reader
b *bytes.Buffer
r io.Reader
inBuffer bool
}
func NewPrefixedReader(prefix *bytes.Buffer, r io.Reader) *PrefixedReader {
return &PrefixedReader{
b: prefix,
r: r,
inBuffer: prefix.Len() > 0,
}
}
func (r *PrefixedReader) Read(p []byte) (int, error) {
if r.inBuffer {
read, err := r.b.Read(p)
if err == io.EOF {
r.inBuffer = false
return read, nil
}
if r.b.Len() <= 0 {
r.inBuffer = false
}
return read, err
}
return r.r.Read(p)
}
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