ebitenutil: Use net/http at file_js.go (#1296)

Fixes #1154
This commit is contained in:
Tom Lister 2020-08-12 14:37:38 +10:00 committed by GitHub
parent 18732ca879
commit 6d113e4b0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,11 +18,8 @@ package ebitenutil
import (
"bytes"
"errors"
"fmt"
"syscall/js"
"github.com/hajimehoshi/ebiten/internal/jsutil"
"io/ioutil"
"net/http"
)
type file struct {
@ -34,37 +31,14 @@ func (f *file) Close() error {
}
func OpenFile(path string) (ReadSeekCloser, error) {
var err error
var content js.Value
ch := make(chan struct{})
req := js.Global().Get("XMLHttpRequest").New()
req.Call("open", "GET", path, true)
req.Set("responseType", "arraybuffer")
loadf := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
defer close(ch)
status := req.Get("status").Int()
if 200 <= status && status < 400 {
content = req.Get("response")
return nil
}
err = errors.New(fmt.Sprintf("http error: %d", status))
return nil
})
defer loadf.Release()
req.Call("addEventListener", "load", loadf)
errorf := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
defer close(ch)
err = errors.New(fmt.Sprintf("XMLHttpRequest error: %s", req.Get("statusText").String()))
return nil
})
req.Call("addEventListener", "error", errorf)
defer errorf.Release()
req.Call("send")
<-ch
res, err := http.Get(path)
if err != nil {
return nil, err
}
f := &file{bytes.NewReader(jsutil.ArrayBufferToSlice(content))}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
f := &file{bytes.NewReader(body)}
return f, nil
}