Skip to content

Commit 6c57fe6

Browse files
committed
show tunnel icon for affected tabs
1 parent 107b2a9 commit 6c57fe6

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

app/lib/features/geckoview/domain/providers/tab_state.dart

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ import 'package:weblibre/features/geckoview/domain/providers.dart';
3535
import 'package:weblibre/features/geckoview/domain/providers/selected_tab.dart';
3636
import 'package:weblibre/features/geckoview/features/find_in_page/domain/repositories/find_in_page.dart';
3737
import 'package:weblibre/features/geckoview/features/tabs/domain/providers.dart';
38+
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart';
3839
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/gecko_inference.dart';
40+
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart';
3941
import 'package:weblibre/features/geckoview/utils/image_helper.dart';
42+
import 'package:weblibre/features/user/data/models/tor_settings.dart';
43+
import 'package:weblibre/features/user/domain/repositories/tor_settings.dart';
4044

4145
part 'tab_state.g.dart';
4246

@@ -238,6 +242,37 @@ TabState? tabState(Ref ref, String? tabId) {
238242
return ref.watch(tabStatesProvider.select((tabs) => tabs[tabId]));
239243
}
240244

245+
@Riverpod()
246+
Future<bool> isTabTunneled(Ref ref, String? tabId) async {
247+
final tabState = ref.watch(tabStateProvider(tabId));
248+
final torSettings = ref.watch(torSettingsWithDefaultsProvider);
249+
250+
if (tabState != null) {
251+
if (tabState.isPrivate) {
252+
return torSettings.proxyPrivateTabsTor;
253+
} else {
254+
switch (torSettings.proxyRegularTabsMode) {
255+
case TorRegularTabProxyMode.container:
256+
final containerId = await ref
257+
.read(tabDataRepositoryProvider.notifier)
258+
.getContainerTabId(tabState.id);
259+
260+
final containerData = await containerId.mapNotNull(
261+
(containerId) => ref
262+
.read(containerRepositoryProvider.notifier)
263+
.getContainerData(containerId),
264+
);
265+
266+
return containerData?.metadata.useProxy ?? false;
267+
case TorRegularTabProxyMode.all:
268+
return true;
269+
}
270+
}
271+
}
272+
273+
return false;
274+
}
275+
241276
@Riverpod()
242277
TabState? selectedTabState(Ref ref) {
243278
final tabId = ref.watch(selectedTabProvider);

app/lib/features/geckoview/domain/providers/tab_state.g.dart

Lines changed: 69 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/app_bar_title.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class AppBarTitle extends HookConsumerWidget {
3535
final theme = Theme.of(context);
3636

3737
final tabState = ref.watch(selectedTabStateProvider);
38+
final isTabTuneledAsync = ref.watch(isTabTunneledProvider(tabState?.id));
3839

3940
if (tabState == null) {
4041
return const SizedBox.shrink();
@@ -98,6 +99,11 @@ class AppBarTitle extends HookConsumerWidget {
9899
),
99100
Row(
100101
children: [
102+
if (isTabTuneledAsync.hasValue &&
103+
isTabTuneledAsync.value == true) ...[
104+
const Icon(MdiIcons.tunnelOutline, size: 14),
105+
const SizedBox(width: 4),
106+
],
101107
icon,
102108
const SizedBox(width: 4),
103109
Expanded(

0 commit comments

Comments
 (0)