register.go RawHistoryFolder
1package handlers
2
3import (
4 "context"
5 "fmt"
6
7 "github.com/bnema/dumber/internal/application/port"
8 "github.com/bnema/dumber/internal/application/usecase"
9 "github.com/bnema/dumber/internal/infrastructure/config"
10 "github.com/bnema/dumber/internal/infrastructure/webkit"
11 "github.com/bnema/dumber/internal/infrastructure/webkit/handlers/homepage"
12)
13
14// Config holds all dependencies for message handlers.
15type Config struct {
16 HistoryUC *usecase.SearchHistoryUseCase
17 FavoritesUC *usecase.ManageFavoritesUseCase
18 Clipboard port.Clipboard
19 ConfigGetter func() *config.Config
20 OnClipboardCopied func(textLen int) // Called when auto-copy completes (for toast notification)
21}
22
23// RegisterAll registers all message handlers with the router.
24func RegisterAll(ctx context.Context, router *webkit.MessageRouter, cfg Config) error {
25 // Homepage handlers (history, favorites, folders, tags)
26 if cfg.HistoryUC != nil && cfg.FavoritesUC != nil {
27 if err := homepage.RegisterHandlers(ctx, router, homepage.Config{
28 HistoryUC: cfg.HistoryUC,
29 FavoritesUC: cfg.FavoritesUC,
30 }); err != nil {
31 return err
32 }
33 }
34
35 // Configuration handlers (always available)
36 if err := RegisterConfigHandlers(ctx, router); err != nil {
37 return err
38 }
39
40 // Keybindings handlers (always available)
41 keybindingsHandler, err := createKeybindingsHandler()
42 if err != nil {
43 return fmt.Errorf("failed to create keybindings handler: %w", err)
44 }
45 if err := RegisterKeybindingsHandlers(ctx, router, keybindingsHandler); err != nil {
46 return err
47 }
48
49 // Clipboard handlers (for auto-copy on selection feature)
50 if cfg.Clipboard != nil && cfg.ConfigGetter != nil {
51 if err := RegisterClipboardHandlers(ctx, router, cfg.Clipboard, cfg.ConfigGetter, cfg.OnClipboardCopied); err != nil {
52 return err
53 }
54 }
55
56 // Future handler groups go here:
57 // - settings handlers
58 // - downloads handlers
59 // - etc.
60
61 return nil
62}
63
64// createKeybindingsHandler wires the gateway and use cases for keybindings.
65func createKeybindingsHandler() (*KeybindingsHandler, error) {
66 mgr := config.GetManager()
67 if mgr == nil {
68 return nil, fmt.Errorf("config manager not initialized")
69 }
70
71 gateway := config.NewKeybindingsGateway(mgr)
72
73 return NewKeybindingsHandler(
74 usecase.NewGetKeybindingsUseCase(gateway),
75 usecase.NewSetKeybindingUseCase(gateway, gateway),
76 usecase.NewResetKeybindingUseCase(gateway),
77 usecase.NewResetAllKeybindingsUseCase(gateway),
78 ), nil
79}