mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 01:00:21 +08:00
adding http.CloseNotifier and http.Flusher interface to assetserver.contentTypeSniffer, for Gin (and other framework) compatibility.
This commit is contained in:
parent
bd59b8c724
commit
742b802cf7
@ -59,7 +59,7 @@ func NewAssetServer(options *Options) (*AssetServer, error) {
|
||||
|
||||
func (a *AssetServer) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||
start := time.Now()
|
||||
wrapped := &contentTypeSniffer{rw: rw}
|
||||
wrapped := newContentTypeSniffer(rw)
|
||||
defer func() {
|
||||
if _, err := wrapped.complete(); err != nil {
|
||||
a.options.Logger.Error("Error writing response data.", "uri", req.RequestURI, "error", err)
|
||||
|
@ -74,7 +74,7 @@ func (a *AssetServer) processWebViewRequestInternal(r webview.Request) {
|
||||
}
|
||||
}()
|
||||
|
||||
rw := &contentTypeSniffer{rw: wrw} // Make sure we have a Content-Type sniffer
|
||||
var rw http.ResponseWriter = newContentTypeSniffer(wrw) // Make sure we have a Content-Type sniffer
|
||||
defer func() {
|
||||
if _, err := rw.complete(); err != nil {
|
||||
a.options.Logger.Error("Error writing response data.", "uri", uri, "error", err)
|
||||
|
@ -4,12 +4,20 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func newContentTypeSniffer(rw http.ResponseWriter) *contentTypeSniffer {
|
||||
return &contentTypeSniffer{
|
||||
rw: rw,
|
||||
closeChannel: make(chan bool, 1),
|
||||
}
|
||||
}
|
||||
|
||||
type contentTypeSniffer struct {
|
||||
rw http.ResponseWriter
|
||||
prefix []byte
|
||||
status int
|
||||
headerCommitted bool
|
||||
headerWritten bool
|
||||
closeChannel chan bool
|
||||
}
|
||||
|
||||
// Unwrap returns the wrapped [http.ResponseWriter] for use with [http.ResponseController].
|
||||
@ -108,3 +116,19 @@ func (rw *contentTypeSniffer) complete() (n int, err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// CloseNotify implements the http.CloseNotifier interface.
|
||||
func (rw *contentTypeSniffer) CloseNotify() <-chan bool {
|
||||
return rw.closeChannel
|
||||
}
|
||||
|
||||
func (rw *contentTypeSniffer) closeClient() {
|
||||
rw.closeChannel <- true
|
||||
}
|
||||
|
||||
// Flush implements the http.Flusher interface.
|
||||
func (rw *contentTypeSniffer) Flush() {
|
||||
if f, ok := rw.rw.(http.Flusher); ok {
|
||||
f.Flush()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user