small optimizations
This commit is contained in:
@@ -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',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$intentStreamHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
/// See also [EngineBoundIntentStream].
|
||||
@ProviderFor(EngineBoundIntentStream)
|
||||
final engineBoundIntentStreamProvider = AutoDisposeStreamNotifierProvider<
|
||||
EngineBoundIntentStream,
|
||||
SharedContent
|
||||
>.internal(
|
||||
EngineBoundIntentStream.new,
|
||||
name: r'engineBoundIntentStreamProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$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
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user