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