From 9b7286ffd409cfafb80783534dea338dc293344a Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sun, 15 Jun 2025 21:27:41 +0200 Subject: [PATCH] use fire immediatialy --- .../geckoview/domain/repositories/tab.dart | 5 ++- .../services/engine_settings_replication.dart | 6 +++- .../services/proxy_settings_replication.dart | 18 +++++----- .../widgets/browser_modules/browser_view.dart | 30 +++++++++++++--- .../tor/domain/services/tor_proxy.dart | 5 ++- .../controllers/website_title.dart | 34 +++++++++++-------- 6 files changed, 67 insertions(+), 31 deletions(-) diff --git a/app/lib/features/geckoview/domain/repositories/tab.dart b/app/lib/features/geckoview/domain/repositories/tab.dart index 092922d5..4d6104ca 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.dart @@ -244,7 +244,10 @@ class TabRepository extends _$TabRepository { ); }); - ref.listen(selectedTabProvider, (previous, tabId) async { + ref.listen(fireImmediately: true, selectedTabProvider, ( + previous, + tabId, + ) async { if (tabId != null) { _previousTabId = previous; await db.tabDao.touchTab(tabId, timestamp: DateTime.now()); diff --git a/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart b/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart index b9528de8..19ce2add 100644 --- a/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart +++ b/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart @@ -16,6 +16,7 @@ class EngineSettingsReplicationService var initialSettingsSent = false; ref.listen( + fireImmediately: true, generalSettingsRepositoryProvider.select( (settings) => settings.themeMode, ), @@ -30,7 +31,10 @@ class EngineSettingsReplicationService }, ); - ref.listen(engineSettingsRepositoryProvider, (previous, next) async { + ref.listen(fireImmediately: true, engineSettingsRepositoryProvider, ( + previous, + next, + ) async { if (initialSettingsSent && previous != null) { if (previous.javascriptEnabled != next.javascriptEnabled) { await _service.javascriptEnabled(next.javascriptEnabled); diff --git a/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart b/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart index a138c980..c115c227 100644 --- a/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart +++ b/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart @@ -12,16 +12,18 @@ class ProxySettingsReplication extends _$ProxySettingsReplication { @override void build() { - ref.listen(torProxyServiceProvider.select((data) => data.valueOrNull), ( - previous, - next, - ) async { - if (next != null) { - await _service.setProxyPort(next); - } - }); + ref.listen( + fireImmediately: true, + torProxyServiceProvider.select((data) => data.valueOrNull), + (previous, next) async { + if (next != null) { + await _service.setProxyPort(next); + } + }, + ); ref.listen( + fireImmediately: true, containersWithCountProvider.select( (value) => EquatableValue( value.valueOrNull diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart index 7eff6ec0..850d5287 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart @@ -152,30 +152,50 @@ class _BrowserViewState extends ConsumerState WidgetsBinding.instance.addObserver(this); //Initialize and register dependencies - ref.listenManual(tabRepositoryProvider, (previous, next) {}); - - ref.listenManual(selectionActionServiceProvider, (previous, next) {}); + ref.listenManual( + fireImmediately: true, + tabRepositoryProvider, + (previous, next) {}, + ); ref.listenManual( + fireImmediately: true, + selectionActionServiceProvider, + (previous, next) {}, + ); + + ref.listenManual( + fireImmediately: true, webExtensionsStateProvider(WebExtensionActionType.browser), (previous, next) {}, ); ref.listenManual( + fireImmediately: true, webExtensionsStateProvider(WebExtensionActionType.page), (previous, next) {}, ); - ref.listenManual(cacheRepositoryProvider, (previous, next) {}); + ref.listenManual( + fireImmediately: true, + cacheRepositoryProvider, + (previous, next) {}, + ); ref.listenManual( + fireImmediately: true, engineSettingsReplicationServiceProvider, (previous, next) {}, ); - ref.listenManual(proxySettingsReplicationProvider, (previous, next) {}); + ref.listenManual( + fireImmediately: true, + proxySettingsReplicationProvider, + (previous, next) {}, + ); ref.listenManual( + fireImmediately: true, articleContentProcessorServiceProvider, (previous, next) {}, ); diff --git a/app/lib/features/tor/domain/services/tor_proxy.dart b/app/lib/features/tor/domain/services/tor_proxy.dart index 79579e5c..788ebd1d 100644 --- a/app/lib/features/tor/domain/services/tor_proxy.dart +++ b/app/lib/features/tor/domain/services/tor_proxy.dart @@ -108,7 +108,10 @@ class TorProxyService extends _$TorProxyService { await _tor.initializeService(); - ref.listen(browserViewLifecycleProvider, (previous, next) { + ref.listen(fireImmediately: true, browserViewLifecycleProvider, ( + previous, + next, + ) { switch (next) { case AppLifecycleState.resumed: if (_timerPaused) { diff --git a/app/lib/presentation/controllers/website_title.dart b/app/lib/presentation/controllers/website_title.dart index a8d5410a..ed1fb990 100644 --- a/app/lib/presentation/controllers/website_title.dart +++ b/app/lib/presentation/controllers/website_title.dart @@ -13,21 +13,25 @@ class CompletePageInfo extends _$CompletePageInfo { return AsyncData(cached!); } - ref.listen(pageInfoProvider(url, isImageRequest: false), (previous, next) { - if (cached != null && next.hasValue) { - state = AsyncData( - WebPageInfo( - url: url, - //Cached is preferred as this comes from gecko and is more likely to be correct compared to manual request - favicon: cached.favicon ?? next.value!.favicon, - feeds: cached.feeds ?? next.value!.feeds, - title: cached.title ?? next.value!.title, - ), - ); - } else { - state = next; - } - }); + ref.listen( + fireImmediately: true, + pageInfoProvider(url, isImageRequest: false), + (previous, next) { + if (cached != null && next.hasValue) { + state = AsyncData( + WebPageInfo( + url: url, + //Cached is preferred as this comes from gecko and is more likely to be correct compared to manual request + favicon: cached.favicon ?? next.value!.favicon, + feeds: cached.feeds ?? next.value!.feeds, + title: cached.title ?? next.value!.title, + ), + ); + } else { + state = next; + } + }, + ); return (cached != null) ? AsyncData(cached) : const AsyncLoading(); }