feat(main): wire session management dependencies
- commit
- 924f06c83fa81829a6ef27f41e168069458715b1
- author
- bnema · · 2025-12-24 21:27 UTC
- committer
- brice · · 2025-12-25 05:18 UTC
- parent
- 2718ba9
- signature
- unsigned
1 file · +45 -34
M cmd/dumber/main.go +45 -34
| @@ -118,7 +118,7 @@ func runGUI() int { | |||
| 118 | 118 | _ = idleInhibitor.Close() | |
| 119 | 119 | } | |
| 120 | 120 | }() | |
| 121 | - | uiDeps := buildUIDependencies(ctx, cfg, themeManager, &stack, repos, useCases, idleInhibitor) | |
| 121 | + | uiDeps := buildUIDependencies(ctx, cfg, themeManager, &stack, repos, useCases, idleInhibitor, browserSession.Session.ID) | |
| 122 | 122 | ||
| 123 | 123 | app, err := ui.New(uiDeps) | |
| 124 | 124 | if err != nil { | |
| @@ -226,20 +226,24 @@ func openDatabase(ctx context.Context, logger zerolog.Logger, dataDir string) (* | |||
| 226 | 226 | ||
| 227 | 227 | // repositories groups infrastructure layer repository implementations. | |
| 228 | 228 | type repositories struct { | |
| 229 | - | history repository.HistoryRepository | |
| 230 | - | favorite repository.FavoriteRepository | |
| 231 | - | folder repository.FolderRepository | |
| 232 | - | tag repository.TagRepository | |
| 233 | - | zoom repository.ZoomRepository | |
| 229 | + | history repository.HistoryRepository | |
| 230 | + | favorite repository.FavoriteRepository | |
| 231 | + | folder repository.FolderRepository | |
| 232 | + | tag repository.TagRepository | |
| 233 | + | zoom repository.ZoomRepository | |
| 234 | + | session repository.SessionRepository | |
| 235 | + | sessionState repository.SessionStateRepository | |
| 234 | 236 | } | |
| 235 | 237 | ||
| 236 | 238 | func createRepositories(db *sql.DB) *repositories { | |
| 237 | 239 | return &repositories{ | |
| 238 | - | history: sqlite.NewHistoryRepository(db), | |
| 239 | - | favorite: sqlite.NewFavoriteRepository(db), | |
| 240 | - | folder: sqlite.NewFolderRepository(db), | |
| 241 | - | tag: sqlite.NewTagRepository(db), | |
| 242 | - | zoom: sqlite.NewZoomRepository(db), | |
| 240 | + | history: sqlite.NewHistoryRepository(db), | |
| 241 | + | favorite: sqlite.NewFavoriteRepository(db), | |
| 242 | + | folder: sqlite.NewFolderRepository(db), | |
| 243 | + | tag: sqlite.NewTagRepository(db), | |
| 244 | + | zoom: sqlite.NewZoomRepository(db), | |
| 245 | + | session: sqlite.NewSessionRepository(db), | |
| 246 | + | sessionState: sqlite.NewSessionStateRepository(db), | |
| 243 | 247 | } | |
| 244 | 248 | } | |
| 245 | 249 | ||
| @@ -252,6 +256,7 @@ type useCases struct { | |||
| 252 | 256 | zoom *usecase.ManageZoomUseCase | |
| 253 | 257 | navigate *usecase.NavigateUseCase | |
| 254 | 258 | copyURL *usecase.CopyURLUseCase | |
| 259 | + | snapshot *usecase.SnapshotSessionUseCase | |
| 255 | 260 | clipboard port.Clipboard | |
| 256 | 261 | favicon *favicon.Service | |
| 257 | 262 | } | |
| @@ -279,6 +284,7 @@ func createUseCases(repos *repositories, cfg *config.Config) *useCases { | |||
| 279 | 284 | zoom: usecase.NewManageZoomUseCase(repos.zoom, defaultZoom, zoomCache), | |
| 280 | 285 | navigate: usecase.NewNavigateUseCase(repos.history, repos.zoom, defaultZoom), | |
| 281 | 286 | copyURL: usecase.NewCopyURLUseCase(clipboardAdapter), | |
| 287 | + | snapshot: usecase.NewSnapshotSessionUseCase(repos.sessionState), | |
| 282 | 288 | clipboard: clipboardAdapter, | |
| 283 | 289 | favicon: favicon.NewService(faviconCacheDir), | |
| 284 | 290 | } | |
| @@ -292,30 +298,35 @@ func buildUIDependencies( | |||
| 292 | 298 | repos *repositories, | |
| 293 | 299 | uc *useCases, | |
| 294 | 300 | idleInhibitor port.IdleInhibitor, | |
| 301 | + | currentSessionID entity.SessionID, | |
| 295 | 302 | ) *ui.Dependencies { | |
| 296 | 303 | return &ui.Dependencies{ | |
| 297 | - | Ctx: ctx, | |
| 298 | - | Config: cfg, | |
| 299 | - | InitialURL: initialURL, | |
| 300 | - | Theme: themeManager, | |
| 301 | - | WebContext: stack.Context, | |
| 302 | - | Pool: stack.Pool, | |
| 303 | - | Settings: stack.Settings, | |
| 304 | - | Injector: stack.Injector, | |
| 305 | - | MessageRouter: stack.MessageRouter, | |
| 306 | - | FilterManager: stack.FilterManager, | |
| 307 | - | HistoryRepo: repos.history, | |
| 308 | - | FavoriteRepo: repos.favorite, | |
| 309 | - | ZoomRepo: repos.zoom, | |
| 310 | - | TabsUC: uc.tabs, | |
| 311 | - | PanesUC: uc.panes, | |
| 312 | - | HistoryUC: uc.history, | |
| 313 | - | FavoritesUC: uc.favorites, | |
| 314 | - | ZoomUC: uc.zoom, | |
| 315 | - | NavigateUC: uc.navigate, | |
| 316 | - | CopyURLUC: uc.copyURL, | |
| 317 | - | Clipboard: uc.clipboard, | |
| 318 | - | FaviconService: uc.favicon, | |
| 319 | - | IdleInhibitor: idleInhibitor, | |
| 304 | + | Ctx: ctx, | |
| 305 | + | Config: cfg, | |
| 306 | + | InitialURL: initialURL, | |
| 307 | + | Theme: themeManager, | |
| 308 | + | WebContext: stack.Context, | |
| 309 | + | Pool: stack.Pool, | |
| 310 | + | Settings: stack.Settings, | |
| 311 | + | Injector: stack.Injector, | |
| 312 | + | MessageRouter: stack.MessageRouter, | |
| 313 | + | FilterManager: stack.FilterManager, | |
| 314 | + | HistoryRepo: repos.history, | |
| 315 | + | FavoriteRepo: repos.favorite, | |
| 316 | + | ZoomRepo: repos.zoom, | |
| 317 | + | TabsUC: uc.tabs, | |
| 318 | + | PanesUC: uc.panes, | |
| 319 | + | HistoryUC: uc.history, | |
| 320 | + | FavoritesUC: uc.favorites, | |
| 321 | + | ZoomUC: uc.zoom, | |
| 322 | + | NavigateUC: uc.navigate, | |
| 323 | + | CopyURLUC: uc.copyURL, | |
| 324 | + | Clipboard: uc.clipboard, | |
| 325 | + | FaviconService: uc.favicon, | |
| 326 | + | IdleInhibitor: idleInhibitor, | |
| 327 | + | SessionRepo: repos.session, | |
| 328 | + | SessionStateRepo: repos.sessionState, | |
| 329 | + | CurrentSessionID: currentSessionID, | |
| 330 | + | SnapshotUC: uc.snapshot, | |
| 320 | 331 | } | |
| 321 | 332 | } | |
| @@ -118,7 +118,7 @@ func runGUI() int { | |||||
| 118 | _ = idleInhibitor.Close() | 118 | _ = idleInhibitor.Close() | ||
| 119 | } | 119 | } | ||
| 120 | }() | 120 | }() | ||
| 121 | - | uiDeps := buildUIDependencies(ctx, cfg, themeManager, &stack, repos, useCases, idleInhibitor) | 121 | + | uiDeps := buildUIDependencies(ctx, cfg, themeManager, &stack, repos, useCases, idleInhibitor, browserSession.Session.ID) |
| 122 | 122 | ||||
| 123 | app, err := ui.New(uiDeps) | 123 | app, err := ui.New(uiDeps) | ||
| 124 | if err != nil { | 124 | if err != nil { | ||
| @@ -226,20 +226,24 @@ func openDatabase(ctx context.Context, logger zerolog.Logger, dataDir string) (* | |||||
| 226 | 226 | ||||
| 227 | // repositories groups infrastructure layer repository implementations. | 227 | // repositories groups infrastructure layer repository implementations. | ||
| 228 | type repositories struct { | 228 | type repositories struct { | ||
| 229 | - | history repository.HistoryRepository | 229 | + | history repository.HistoryRepository |
| 230 | - | favorite repository.FavoriteRepository | 230 | + | favorite repository.FavoriteRepository |
| 231 | - | folder repository.FolderRepository | 231 | + | folder repository.FolderRepository |
| 232 | - | tag repository.TagRepository | 232 | + | tag repository.TagRepository |
| 233 | - | zoom repository.ZoomRepository | 233 | + | zoom repository.ZoomRepository |
| 234 | + | session repository.SessionRepository | |||
| 235 | + | sessionState repository.SessionStateRepository | |||
| 234 | } | 236 | } | ||
| 235 | 237 | ||||
| 236 | func createRepositories(db *sql.DB) *repositories { | 238 | func createRepositories(db *sql.DB) *repositories { | ||
| 237 | return &repositories{ | 239 | return &repositories{ | ||
| 238 | - | history: sqlite.NewHistoryRepository(db), | 240 | + | history: sqlite.NewHistoryRepository(db), |
| 239 | - | favorite: sqlite.NewFavoriteRepository(db), | 241 | + | favorite: sqlite.NewFavoriteRepository(db), |
| 240 | - | folder: sqlite.NewFolderRepository(db), | 242 | + | folder: sqlite.NewFolderRepository(db), |
| 241 | - | tag: sqlite.NewTagRepository(db), | 243 | + | tag: sqlite.NewTagRepository(db), |
| 242 | - | zoom: sqlite.NewZoomRepository(db), | 244 | + | zoom: sqlite.NewZoomRepository(db), |
| 245 | + | session: sqlite.NewSessionRepository(db), | |||
| 246 | + | sessionState: sqlite.NewSessionStateRepository(db), | |||
| 243 | } | 247 | } | ||
| 244 | } | 248 | } | ||
| 245 | 249 | ||||
| @@ -252,6 +256,7 @@ type useCases struct { | |||||
| 252 | zoom *usecase.ManageZoomUseCase | 256 | zoom *usecase.ManageZoomUseCase | ||
| 253 | navigate *usecase.NavigateUseCase | 257 | navigate *usecase.NavigateUseCase | ||
| 254 | copyURL *usecase.CopyURLUseCase | 258 | copyURL *usecase.CopyURLUseCase | ||
| 259 | + | snapshot *usecase.SnapshotSessionUseCase | |||
| 255 | clipboard port.Clipboard | 260 | clipboard port.Clipboard | ||
| 256 | favicon *favicon.Service | 261 | favicon *favicon.Service | ||
| 257 | } | 262 | } | ||
| @@ -279,6 +284,7 @@ func createUseCases(repos *repositories, cfg *config.Config) *useCases { | |||||
| 279 | zoom: usecase.NewManageZoomUseCase(repos.zoom, defaultZoom, zoomCache), | 284 | zoom: usecase.NewManageZoomUseCase(repos.zoom, defaultZoom, zoomCache), | ||
| 280 | navigate: usecase.NewNavigateUseCase(repos.history, repos.zoom, defaultZoom), | 285 | navigate: usecase.NewNavigateUseCase(repos.history, repos.zoom, defaultZoom), | ||
| 281 | copyURL: usecase.NewCopyURLUseCase(clipboardAdapter), | 286 | copyURL: usecase.NewCopyURLUseCase(clipboardAdapter), | ||
| 287 | + | snapshot: usecase.NewSnapshotSessionUseCase(repos.sessionState), | |||
| 282 | clipboard: clipboardAdapter, | 288 | clipboard: clipboardAdapter, | ||
| 283 | favicon: favicon.NewService(faviconCacheDir), | 289 | favicon: favicon.NewService(faviconCacheDir), | ||
| 284 | } | 290 | } | ||
| @@ -292,30 +298,35 @@ func buildUIDependencies( | |||||
| 292 | repos *repositories, | 298 | repos *repositories, | ||
| 293 | uc *useCases, | 299 | uc *useCases, | ||
| 294 | idleInhibitor port.IdleInhibitor, | 300 | idleInhibitor port.IdleInhibitor, | ||
| 301 | + | currentSessionID entity.SessionID, | |||
| 295 | ) *ui.Dependencies { | 302 | ) *ui.Dependencies { | ||
| 296 | return &ui.Dependencies{ | 303 | return &ui.Dependencies{ | ||
| 297 | - | Ctx: ctx, | 304 | + | Ctx: ctx, |
| 298 | - | Config: cfg, | 305 | + | Config: cfg, |
| 299 | - | InitialURL: initialURL, | 306 | + | InitialURL: initialURL, |
| 300 | - | Theme: themeManager, | 307 | + | Theme: themeManager, |
| 301 | - | WebContext: stack.Context, | 308 | + | WebContext: stack.Context, |
| 302 | - | Pool: stack.Pool, | 309 | + | Pool: stack.Pool, |
| 303 | - | Settings: stack.Settings, | 310 | + | Settings: stack.Settings, |
| 304 | - | Injector: stack.Injector, | 311 | + | Injector: stack.Injector, |
| 305 | - | MessageRouter: stack.MessageRouter, | 312 | + | MessageRouter: stack.MessageRouter, |
| 306 | - | FilterManager: stack.FilterManager, | 313 | + | FilterManager: stack.FilterManager, |
| 307 | - | HistoryRepo: repos.history, | 314 | + | HistoryRepo: repos.history, |
| 308 | - | FavoriteRepo: repos.favorite, | 315 | + | FavoriteRepo: repos.favorite, |
| 309 | - | ZoomRepo: repos.zoom, | 316 | + | ZoomRepo: repos.zoom, |
| 310 | - | TabsUC: uc.tabs, | 317 | + | TabsUC: uc.tabs, |
| 311 | - | PanesUC: uc.panes, | 318 | + | PanesUC: uc.panes, |
| 312 | - | HistoryUC: uc.history, | 319 | + | HistoryUC: uc.history, |
| 313 | - | FavoritesUC: uc.favorites, | 320 | + | FavoritesUC: uc.favorites, |
| 314 | - | ZoomUC: uc.zoom, | 321 | + | ZoomUC: uc.zoom, |
| 315 | - | NavigateUC: uc.navigate, | 322 | + | NavigateUC: uc.navigate, |
| 316 | - | CopyURLUC: uc.copyURL, | 323 | + | CopyURLUC: uc.copyURL, |
| 317 | - | Clipboard: uc.clipboard, | 324 | + | Clipboard: uc.clipboard, |
| 318 | - | FaviconService: uc.favicon, | 325 | + | FaviconService: uc.favicon, |
| 319 | - | IdleInhibitor: idleInhibitor, | 326 | + | IdleInhibitor: idleInhibitor, |
| 327 | + | SessionRepo: repos.session, | |||
| 328 | + | SessionStateRepo: repos.sessionState, | |||
| 329 | + | CurrentSessionID: currentSessionID, | |||
| 330 | + | SnapshotUC: uc.snapshot, | |||
| 320 | } | 331 | } | ||
| 321 | } | 332 | } | ||