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/entity"
10 "github.com/bnema/dumber/internal/domain/repository"
11 "github.com/bnema/dumber/internal/infrastructure/config"
12 "github.com/bnema/dumber/internal/infrastructure/favicon"
13 "github.com/bnema/dumber/internal/infrastructure/filtering"
14 "github.com/bnema/dumber/internal/infrastructure/webkit"
15 "github.com/bnema/dumber/internal/ui/theme"
16)
17
18// Dependencies holds all injected dependencies for the UI layer.
19// This struct is created once at startup and passed to UI components.
20type Dependencies struct {
21 // Core context and configuration
22 Ctx context.Context
23 Config *config.Config
24 InitialURL string // URL to open on startup (optional)
25 RestoreSessionID string // Session ID to restore on startup (optional)
26 OnFirstWebViewShown func(context.Context)
27
28 // Theme management
29 Theme *theme.Manager
30
31 // WebKit infrastructure
32 WebContext *webkit.WebKitContext
33 Pool *webkit.WebViewPool
34 Factory port.WebViewFactory
35 Settings *webkit.SettingsManager
36 Injector *webkit.ContentInjector
37 MessageRouter *webkit.MessageRouter
38
39 // Repositories
40 HistoryRepo repository.HistoryRepository
41 FavoriteRepo repository.FavoriteRepository
42 ZoomRepo repository.ZoomRepository
43 FilterRepo repository.ContentWhitelistRepository
44
45 // Use Cases
46 TabsUC *usecase.ManageTabsUseCase
47 PanesUC *usecase.ManagePanesUseCase
48 NavigateUC *usecase.NavigateUseCase
49 ZoomUC *usecase.ManageZoomUseCase
50 FavoritesUC *usecase.ManageFavoritesUseCase
51 HistoryUC *usecase.SearchHistoryUseCase
52 CopyURLUC *usecase.CopyURLUseCase
53
54 // Infrastructure Adapters
55 Clipboard port.Clipboard
56 FaviconService *favicon.Service
57 FilterManager *filtering.Manager
58 IdleInhibitor port.IdleInhibitor
59
60 // Session management
61 SessionStateRepo repository.SessionStateRepository
62 SessionRepo repository.SessionRepository
63 CurrentSessionID entity.SessionID
64 SnapshotUC *usecase.SnapshotSessionUseCase
65
66 // Update management
67 CheckUpdateUC *usecase.CheckUpdateUseCase
68 ApplyUpdateUC *usecase.ApplyUpdateUseCase
69}
70
71// Validate checks that all required dependencies are set.
72func (d *Dependencies) Validate() error {
73 if d.Ctx == nil {
74 return ErrMissingDependency("Ctx")
75 }
76 if d.Config == nil {
77 return ErrMissingDependency("Config")
78 }
79 // WebKit dependencies are optional for testing without WebViews
80 // Use cases are optional - can be nil if not needed
81 return nil
82}
83
84// DependencyError indicates a missing required dependency.
85type DependencyError struct {
86 Name string
87}
88
89func (e DependencyError) Error() string {
90 return "missing required dependency: " + e.Name
91}
92
93// ErrMissingDependency creates a new DependencyError.
94func ErrMissingDependency(name string) error {
95 return DependencyError{Name: name}
96}