deps.go RawHistoryFolder
1// Package ui provides the GTK4 presentation layer for the dumber browser.
2package ui
3
4import (
5 "context"
6
7 "github.com/bnema/dumber/internal/application/port"
8 "github.com/bnema/dumber/internal/application/usecase"
9 "github.com/bnema/dumber/internal/domain/repository"
10 "github.com/bnema/dumber/internal/infrastructure/config"
11 "github.com/bnema/dumber/internal/infrastructure/favicon"
12 "github.com/bnema/dumber/internal/infrastructure/filtering"
13 "github.com/bnema/dumber/internal/infrastructure/webkit"
14 "github.com/bnema/dumber/internal/ui/theme"
15)
16
17// Dependencies holds all injected dependencies for the UI layer.
18// This struct is created once at startup and passed to UI components.
19type Dependencies struct {
20 // Core context and configuration
21 Ctx context.Context
22 Config *config.Config
23 InitialURL string // URL to open on startup (optional)
24
25 // Theme management
26 Theme *theme.Manager
27
28 // WebKit infrastructure
29 WebContext *webkit.WebKitContext
30 Pool *webkit.WebViewPool
31 Factory port.WebViewFactory
32 Settings *webkit.SettingsManager
33 Injector *webkit.ContentInjector
34 MessageRouter *webkit.MessageRouter
35
36 // Repositories
37 HistoryRepo repository.HistoryRepository
38 FavoriteRepo repository.FavoriteRepository
39 ZoomRepo repository.ZoomRepository
40 FilterRepo repository.ContentWhitelistRepository
41
42 // Use Cases
43 TabsUC *usecase.ManageTabsUseCase
44 PanesUC *usecase.ManagePanesUseCase
45 NavigateUC *usecase.NavigateUseCase
46 ZoomUC *usecase.ManageZoomUseCase
47 FavoritesUC *usecase.ManageFavoritesUseCase
48 HistoryUC *usecase.SearchHistoryUseCase
49 CopyURLUC *usecase.CopyURLUseCase
50
51 // Infrastructure Adapters
52 Clipboard port.Clipboard
53 FaviconService *favicon.Service
54 FilterManager *filtering.Manager
55 IdleInhibitor port.IdleInhibitor
56}
57
58// Validate checks that all required dependencies are set.
59func (d *Dependencies) Validate() error {
60 if d.Ctx == nil {
61 return ErrMissingDependency("Ctx")
62 }
63 if d.Config == nil {
64 return ErrMissingDependency("Config")
65 }
66 // WebKit dependencies are optional for testing without WebViews
67 // Use cases are optional - can be nil if not needed
68 return nil
69}
70
71// DependencyError indicates a missing required dependency.
72type DependencyError struct {
73 Name string
74}
75
76func (e DependencyError) Error() string {
77 return "missing required dependency: " + e.Name
78}
79
80// ErrMissingDependency creates a new DependencyError.
81func ErrMissingDependency(name string) error {
82 return DependencyError{Name: name}
83}