Files
yellowjacket/backend/assets/handler.go
T
logan 30b2480df4 fix: resolve all lint errors and make linting a required CI check (#62)
- 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
2026-02-14 01:52:27 -06:00

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)
}