Squash merge audio-player-component into main
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// Package assets handles serving frontend static files.
|
||||
package assets
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
)
|
||||
|
||||
// Handler serves frontend assets with custom route support.
|
||||
type Handler struct {
|
||||
Options *assetserver.Options
|
||||
logger *slog.Logger
|
||||
frontendDistAssets embed.FS
|
||||
serveMux *http.ServeMux
|
||||
wailsAssetHandler http.Handler
|
||||
}
|
||||
|
||||
// NewAssetHandler creates a new asset handler.
|
||||
func NewAssetHandler(logger *slog.Logger, frontendDistAssets embed.FS) (*Handler, error) {
|
||||
handler := &Handler{
|
||||
logger: logger,
|
||||
frontendDistAssets: frontendDistAssets,
|
||||
serveMux: http.NewServeMux(),
|
||||
}
|
||||
handler.Options = &assetserver.Options{
|
||||
Assets: handler.frontendDistAssets,
|
||||
Middleware: handler.Middleware,
|
||||
}
|
||||
|
||||
return handler, nil
|
||||
}
|
||||
|
||||
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
// if we dont have a custom handler defined, then use the wails asset handler
|
||||
if _, pattern := h.serveMux.Handler(r); len(pattern) == 0 {
|
||||
h.logger.Debug(
|
||||
"custom handler for request not found, using wails asset handler",
|
||||
"path",
|
||||
*&r.URL.Path,
|
||||
)
|
||||
h.wailsAssetHandler.ServeHTTP(w, r)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
h.logger.Debug(
|
||||
"using custom handler for request",
|
||||
"path",
|
||||
*&r.URL.Path,
|
||||
)
|
||||
h.serveMux.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// Middleware captures the Wails asset handler for fallback routing.
|
||||
func (h *Handler) Middleware(next http.Handler) http.Handler {
|
||||
h.wailsAssetHandler = next
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
// RegisterHandler adds a custom handler for a URL pattern.
|
||||
func (h *Handler) RegisterHandler(pattern string, handler http.Handler) {
|
||||
h.logger.Debug("registering asset handler", "pattern", pattern)
|
||||
h.serveMux.Handle(pattern, handler)
|
||||
}
|
||||
Reference in New Issue
Block a user