getting there

This commit is contained in:
Fabian Freund
2024-10-15 11:13:32 +02:00
parent 10d6a3de1d
commit c4d93e8fe7
56 changed files with 1830 additions and 762 deletions
@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_session.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -8,6 +10,8 @@ part 'providers.g.dart';
GeckoEventService eventService(EventServiceRef ref) {
final service = GeckoEventService.setUp();
unawaited(GeckoTabService().syncEvents());
ref.onDispose(() {
service.dispose();
});
@@ -6,7 +6,7 @@ part of 'providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$eventServiceHash() => r'5aa357fdf0d217677a9a66ecb50417ac18929cad';
String _$eventServiceHash() => r'c36c6d895629002945c7b4eafba8389771e2eb2d';
/// See also [eventService].
@ProviderFor(eventService)
@@ -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)