config.go RawHistoryFolder
1package handlers
2
3import (
4 "context"
5 "encoding/json"
6 "fmt"
7
8 "github.com/bnema/dumber/internal/application/port"
9 "github.com/bnema/dumber/internal/infrastructure/webkit"
10 "github.com/bnema/dumber/internal/logging"
11)
12
13// ConfigHandler handles configuration-related messages.
14type ConfigHandler struct {
15 saveConfig func(context.Context, port.WebUIConfig) error
16}
17
18// NewConfigHandler creates a new ConfigHandler.
19// saveConfig is called to persist config changes (typically usecase.SaveWebUIConfigUseCase.Execute).
20func NewConfigHandler(saveConfig func(context.Context, port.WebUIConfig) error) *ConfigHandler {
21 if saveConfig == nil {
22 panic("NewConfigHandler: saveConfig must not be nil")
23 }
24 return &ConfigHandler{saveConfig: saveConfig}
25}
26
27// Handle processes the save_config message.
28func (h *ConfigHandler) Handle(ctx context.Context, _ webkit.WebViewID, payload json.RawMessage) (any, error) {
29 if h == nil {
30 return nil, fmt.Errorf("config handler is nil")
31 }
32 if h.saveConfig == nil {
33 return nil, fmt.Errorf("config handler: saveConfig not initialized")
34 }
35 log := logging.FromContext(ctx).With().Str("handler", "config").Logger()
36
37 var payloadCfg port.WebUIConfig
38 if err := json.Unmarshal(payload, &payloadCfg); err != nil {
39 log.Error().Err(err).Msg("failed to unmarshal config payload")
40 return nil, fmt.Errorf("invalid config format: %w", err)
41 }
42
43 log.Info().Msg("saving appearance configuration from webui")
44
45 if err := h.saveConfig(ctx, payloadCfg); err != nil {
46 log.Error().Err(err).Msg("failed to save config")
47 return nil, fmt.Errorf("failed to save config: %w", err)
48 }
49
50 return map[string]any{"status": "success"}, nil
51}
52
53// RegisterConfigHandlers registers configuration handlers with the router.
54func RegisterConfigHandlers(
55 ctx context.Context, router *webkit.MessageRouter,
56 saveConfig func(context.Context, port.WebUIConfig) error,
57) error {
58 handler := NewConfigHandler(saveConfig)
59
60 log := logging.FromContext(ctx).With().Str("component", "handlers").Logger()
61
62 if err := router.RegisterHandlerWithCallbacks(
63 "save_config",
64 "__dumber_config_saved",
65 "__dumber_config_error",
66 "",
67 handler,
68 ); err != nil {
69 return err
70 }
71
72 log.Info().Msg("registered save_config handler")
73
74 return nil
75}