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}
56
57// Validate checks that all required dependencies are set.
58func (d *Dependencies) Validate() error {
59 if d.Ctx == nil {
60 return ErrMissingDependency("Ctx")
61 }
62 if d.Config == nil {
63 return ErrMissingDependency("Config")
64 }
65 // WebKit dependencies are optional for testing without WebViews
66 // Use cases are optional - can be nil if not needed
67 return nil
68}
69
70// DependencyError indicates a missing required dependency.
71type DependencyError struct {
72 Name string
73}
74
75func (e DependencyError) Error() string {
76 return "missing required dependency: " + e.Name
77}
78
79// ErrMissingDependency creates a new DependencyError.
80func ErrMissingDependency(name string) error {
81 return DependencyError{Name: name}
82}