getting there
This commit is contained in:
@@ -1,14 +1,20 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:lensai/features/geckoview/domain/providers.dart';
|
||||
import 'package:lensai/features/geckoview/features/topics/data/database/database.dart';
|
||||
import 'package:lensai/features/geckoview/features/topics/data/providers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'selected_tab.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class SelectedTab extends _$SelectedTab {
|
||||
late TabDatabase _db;
|
||||
|
||||
@override
|
||||
String? build() {
|
||||
_db = ref.watch(tabDatabaseProvider);
|
||||
|
||||
final eventSerivce = ref.watch(eventServiceProvider);
|
||||
|
||||
final selectedTabSub = eventSerivce.selectedTabEvents.listen(
|
||||
@@ -17,6 +23,12 @@ class SelectedTab extends _$SelectedTab {
|
||||
},
|
||||
);
|
||||
|
||||
ref.listenSelf((previous, next) async {
|
||||
if (next != null) {
|
||||
await _db.tabLinkDao.touchTabLink(next, timestamp: DateTime.now());
|
||||
}
|
||||
});
|
||||
|
||||
ref.onDispose(() {
|
||||
unawaited(selectedTabSub.cancel());
|
||||
});
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'selected_tab.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$selectedTabHash() => r'd30f0490c7924b7de30e23f3d4d132311bf336d0';
|
||||
String _$selectedTabHash() => r'd57003aa20d8a6f711918821ae355e5537a55685';
|
||||
|
||||
/// See also [SelectedTab].
|
||||
@ProviderFor(SelectedTab)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
@@ -31,6 +33,10 @@ class TabSession extends _$TabSession {
|
||||
return _sessionService.goForward();
|
||||
}
|
||||
|
||||
Future<Uint8List?> requestScreenshot() {
|
||||
return _sessionService.requestScreenshot();
|
||||
}
|
||||
|
||||
@override
|
||||
void build(String? tabId) {
|
||||
_sessionService = (tabId != null)
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'tab_session.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$tabSessionHash() => r'cdde9c7426178f50dc430284939e215f158e8535';
|
||||
String _$tabSessionHash() => r'25afbead5c1110ca865e48a5009da70eb20d3a28';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||
import 'package:lensai/extensions/image.dart';
|
||||
import 'package:lensai/features/geckoview/domain/entities/find_result_state.dart';
|
||||
@@ -9,6 +10,8 @@ import 'package:lensai/features/geckoview/domain/entities/security_state.dart';
|
||||
import 'package:lensai/features/geckoview/domain/entities/tab_state.dart';
|
||||
import 'package:lensai/features/geckoview/domain/providers.dart';
|
||||
import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart';
|
||||
import 'package:lensai/features/geckoview/features/topics/data/database/database.dart';
|
||||
import 'package:lensai/features/geckoview/features/topics/data/providers.dart';
|
||||
import 'package:lensai/features/geckoview/utils/image_helper.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
@@ -18,6 +21,8 @@ part 'tab_state.g.dart';
|
||||
class TabStates extends _$TabStates {
|
||||
final _tabsService = GeckoTabService();
|
||||
|
||||
late TabDatabase _db;
|
||||
|
||||
void _onTabListChange(List<String> tabs) {
|
||||
state = {
|
||||
for (final tabId in tabs) tabId: state[tabId] ?? TabState.$default(tabId),
|
||||
@@ -166,6 +171,7 @@ class TabStates extends _$TabStates {
|
||||
@override
|
||||
Map<String, TabState> build() {
|
||||
final eventService = ref.watch(eventServiceProvider);
|
||||
_db = ref.watch(tabDatabaseProvider);
|
||||
|
||||
final subscriptions = [
|
||||
eventService.tabListEvents.listen(_onTabListChange),
|
||||
@@ -178,6 +184,18 @@ class TabStates extends _$TabStates {
|
||||
eventService.findResultsEvent.listen(_onFindResults),
|
||||
];
|
||||
|
||||
ref.listenSelf(
|
||||
(previous, next) async {
|
||||
if (!const DeepCollectionEquality()
|
||||
.equals(previous?.keys.toSet(), next.keys.toSet())) {
|
||||
final ids = next.keys.toList();
|
||||
if (ids.isNotEmpty) {
|
||||
await _db.tabLinkDao.syncTabLinks(retainTabIds: ids);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
ref.onDispose(() {
|
||||
for (final sub in subscriptions) {
|
||||
unawaited(sub.cancel());
|
||||
|
||||
@@ -169,7 +169,7 @@ final selectedTabStateProvider = AutoDisposeProvider<TabState?>.internal(
|
||||
);
|
||||
|
||||
typedef SelectedTabStateRef = AutoDisposeProviderRef<TabState?>;
|
||||
String _$tabStatesHash() => r'22fd36fe2e443fd2dfb703dc3be72716fbccef6d';
|
||||
String _$tabStatesHash() => r'f3ae09e49150955dcb29ec89f0f3fe63155a1d6e';
|
||||
|
||||
/// See also [TabStates].
|
||||
@ProviderFor(TabStates)
|
||||
|
||||
Reference in New Issue
Block a user