- Fix 10 err113 violations: extract dynamic errors to package-level sentinels - Fix 12 errcheck violations: handle unchecked error returns in player, metadata, and config packages - Fix 4 revive stutter warnings: rename player.PlayerState to player.State, player.PlayerVolume to player.Volume, queue.QueueTrack to queue.Track, queue.QueueState to queue.State - Fix 2 staticcheck SA4001: simplify *&x to x in assets handler - Fix 5 unused constants: remove dead AudioFileType iota block in models - Fix gci/gofumpt/wsl formatting issues across multiple files - Add gofumpt module-path setting to .golangci.yml for correct import grouping - Fix player test: gate integration test behind YELLOWJACKET_INTEGRATION env var instead of only skipping in CI, and replace t.Errorf+t.Failed with t.Fatalf - Remove continue-on-error from golangci-lint CI step so linting is now required
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
// 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)
|
|
}
|