window size saved to config, smaller font in track-list

This commit is contained in:
2026-02-16 03:48:53 -05:00
parent f97e8c4840
commit 6fbe16a84b
5 changed files with 271 additions and 198 deletions
+22
View File
@@ -107,6 +107,11 @@ func NewYellowJacketApp(
return yjApp, nil
}
// WindowConfig returns the window configuration for use by the host.
func (yj *YellowJacketApp) WindowConfig() *config.WindowConfig {
return yj.appConfig.Window
}
var startupErr error
// OnStartup initializes components that require the Wails runtime context.
@@ -143,6 +148,23 @@ func (yj *YellowJacketApp) OnStartup(ctx context.Context) {
yj.FEBindings = append(yj.FEBindings, yj.player)
}
// OnBeforeClose captures window state while the window is still alive.
func (yj *YellowJacketApp) OnBeforeClose(ctx context.Context) bool {
w, h := wailsruntime.WindowGetSize(ctx)
yj.appConfig.Window.Width = w
yj.appConfig.Window.Height = h
if err := yj.appConfig.Save(); err != nil {
yj.logger.Error(
"Failed to save window state",
"err", err,
)
}
return false
}
// OnShutdown saves player state and cleans up resources before the application exits.
func (yj *YellowJacketApp) OnShutdown(_ context.Context) {
if yj.player != nil {
+14
View File
@@ -23,6 +23,8 @@ type Config struct {
serveMux *http.ServeMux
filePath string // required
Library *library.Config `form:"Library" schema:"library,required"`
Window *WindowConfig `toml:"Window"`
}
// NewConfig creates a new config by loading it from disk.
@@ -36,6 +38,7 @@ func NewConfig(logger *slog.Logger) (*Config, error) {
filePath: path.Join(confDir, "config.toml"),
serveMux: http.NewServeMux(),
}
conf.applyDefaults()
conf.logger = logger.WithGroup("config").With("config", conf)
conf.serveMux.HandleFunc("/", conf.handle)
@@ -99,6 +102,8 @@ func (c *Config) Load() error {
return fmt.Errorf("problem parsing config file %s: %w", c.filePath, err)
}
c.applyDefaults()
// validate the config
if err = c.Validate(); err != nil {
return fmt.Errorf("invalid config file at %s: %w", c.filePath, err)
@@ -130,6 +135,15 @@ func (c *Config) Save() error {
return nil
}
// applyDefaults ensures all config sections have valid defaults.
func (c *Config) applyDefaults() {
if c.Window == nil {
c.Window = NewDefaultWindowConfig()
} else {
c.Window.applyDefaults()
}
}
// SetContext sets the Wails runtime context for event emission.
func (c *Config) SetContext(ctx context.Context) {
c.ctx = ctx
+33
View File
@@ -0,0 +1,33 @@
package config
const (
// DefaultWidth is the default window width in pixels.
DefaultWidth = 512
// DefaultHeight is the default window height in pixels.
DefaultHeight = 384
)
// WindowConfig holds window size preferences.
type WindowConfig struct {
Width int `toml:"Width"`
Height int `toml:"Height"`
}
// NewDefaultWindowConfig returns a WindowConfig with sensible defaults.
func NewDefaultWindowConfig() *WindowConfig {
return &WindowConfig{
Width: DefaultWidth,
Height: DefaultHeight,
}
}
// applyDefaults fills in zero-value fields with defaults.
func (w *WindowConfig) applyDefaults() {
if w.Width <= 0 {
w.Width = DefaultWidth
}
if w.Height <= 0 {
w.Height = DefaultHeight
}
}
@@ -64,6 +64,7 @@ export class TrackList extends LitElement {
.track-row {
display: grid;
grid-template-columns: 1fr 1fr 80px;
font-size: 12px;
padding: 8px;
border-bottom: 1px solid #333;
align-items: center;
+5 -2
View File
@@ -57,10 +57,12 @@ func main() {
}
// Create application with options
winCfg := yjApp.WindowConfig()
err = wails.Run(&options.App{
Title: "yellowjacket",
Width: 512,
Height: 384,
Width: winCfg.Width,
Height: winCfg.Height,
Logger: logging.NewLogger(
sLogger,
[]string{},
@@ -69,6 +71,7 @@ func main() {
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
OnStartup: yjApp.OnStartup,
OnDomReady: yjApp.OnDomReady,
OnBeforeClose: yjApp.OnBeforeClose,
OnShutdown: yjApp.OnShutdown,
Bind: yjApp.FEBindings,
MinWidth: 512,