small optimizations

This commit is contained in:
Fabian Freund
2025-03-25 19:48:10 +01:00
parent 9bc9c53559
commit 9ad5f485b9
8 changed files with 42 additions and 29 deletions
+11 -7
View File
@@ -1,26 +1,30 @@
extension NullableX<T extends Object?> on T? {
@pragma('vm:prefer-inline')
R? mapNotNull<R>(R? Function(T) callback) {
// We can simplify this by using the null-aware operator
return this != null ? callback(this as T) : null;
// Already optimized, but can simplify further
return this == null ? null : callback(this as T);
}
}
extension NullableStringX on String? {
@pragma('vm:prefer-inline')
String? get whenNotEmpty => (this?.isNotEmpty ?? false) ? this : null;
String? get whenNotEmpty {
// Avoid double null check
final value = this;
return value != null && value.isNotEmpty ? value : null;
}
@pragma('vm:prefer-inline')
bool get isNotEmpty => this?.isNotEmpty ?? false;
bool get isNotEmpty => this != null && this!.isNotEmpty;
@pragma('vm:prefer-inline')
bool get isEmpty => this?.isEmpty ?? true;
bool get isEmpty => this == null || this!.isEmpty;
}
extension NullableIterable on Iterable? {
@pragma('vm:prefer-inline')
bool get isNotEmpty => this?.isNotEmpty ?? false;
bool get isNotEmpty => this != null && this!.isNotEmpty;
@pragma('vm:prefer-inline')
bool get isEmpty => this?.isEmpty ?? true;
bool get isEmpty => this == null || this!.isEmpty;
}
@@ -136,7 +136,7 @@ class EngineReadyState extends _$EngineReadyState {
eventService.engineReadyStateEvents
.firstWhere((value) => value == true)
.timeout(
const Duration(seconds: 5),
const Duration(seconds: 3),
onTimeout: () {
logger.w('Waiting for engine ready state timed out');
return true;
@@ -96,7 +96,7 @@ final engineSuggestionsServiceProvider =
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef EngineSuggestionsServiceRef = ProviderRef<GeckoSuggestionsService>;
String _$engineReadyStateHash() => r'c682333e2e07cf0635aa7ae793a2088ca648c950';
String _$engineReadyStateHash() => r'a892c48ffc29e3414de12e66d9bfec522e4f40a8';
/// See also [EngineReadyState].
@ProviderFor(EngineReadyState)
@@ -268,7 +268,7 @@ class TabRepository extends _$TabRepository {
});
});
ref.listen(intentStreamProvider, (previous, next) {
ref.listen(engineBoundIntentStreamProvider, (previous, next) {
next.whenData((value) async {
switch (value) {
case SharedUrl():
@@ -6,7 +6,7 @@ part of 'tab.dart';
// RiverpodGenerator
// **************************************************************************
String _$tabRepositoryHash() => r'9bdd6ddc0254c830b783eb2a987d98d4f1d313fb';
String _$tabRepositoryHash() => r'a7f1112a2404b0be96be44b6c1763aa5cc931e5b';
/// See also [TabRepository].
@ProviderFor(TabRepository)
@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:lensai/data/models/received_intent_parameter.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/app_widget/domain/services/home_widget.dart';
import 'package:lensai/features/geckoview/domain/providers.dart';
import 'package:lensai/features/share_intent/domain/entities/shared_content.dart';
import 'package:lensai/features/share_intent/domain/services/sharing_intent.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -24,7 +25,7 @@ final _contentParserTransformer =
);
@Riverpod()
class IntentStream extends _$IntentStream {
class EngineBoundIntentStream extends _$EngineBoundIntentStream {
late StreamController<SharedContent> _streamController;
@override
@@ -34,6 +35,11 @@ class IntentStream extends _$IntentStream {
await _streamController.close();
});
final engineReady = ref.watch(engineReadyStateProvider);
if (!engineReady) {
return const Stream.empty();
}
final sharingItentStream = ref.watch(sharingIntentStreamProvider);
final appWidgetLaunchStream = ref.watch(appWidgetLaunchStreamProvider);
@@ -6,22 +6,25 @@ part of 'intent.dart';
// RiverpodGenerator
// **************************************************************************
String _$intentStreamHash() => r'e78268ec703cd0d1f08d41b9e10a487e6000b7da';
String _$engineBoundIntentStreamHash() =>
r'860e39a7b608d579f7383e2199719067ad26f268';
/// See also [IntentStream].
@ProviderFor(IntentStream)
final intentStreamProvider =
AutoDisposeStreamNotifierProvider<IntentStream, SharedContent>.internal(
IntentStream.new,
name: r'intentStreamProvider',
/// See also [EngineBoundIntentStream].
@ProviderFor(EngineBoundIntentStream)
final engineBoundIntentStreamProvider = AutoDisposeStreamNotifierProvider<
EngineBoundIntentStream,
SharedContent
>.internal(
EngineBoundIntentStream.new,
name: r'engineBoundIntentStreamProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$intentStreamHash,
: _$engineBoundIntentStreamHash,
dependencies: null,
allTransitiveDependencies: null,
);
);
typedef _$IntentStream = AutoDisposeStreamNotifier<SharedContent>;
typedef _$EngineBoundIntentStream = AutoDisposeStreamNotifier<SharedContent>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
@@ -5,7 +5,7 @@ import 'package:lensai/features/geckoview/features/tabs/features/vector_store/ut
typedef DocumentParts = ({String mainDocumentId, List<Document> parts});
List<Document> mergeShortDocuments(
List<Document> _mergeShortDocuments(
List<Document> documents,
int maxLength, {
String separator = '\n',
@@ -69,7 +69,7 @@ DocumentParts? splitMarkdownDocument(
}
final headerKeys = headersToSplitOn.map((header) => header.$2).toSet();
final mergedDocChunks = mergeShortDocuments(
final mergedDocChunks = _mergeShortDocuments(
docChunks,
chunkSize,
doMerge: (a, b) {