From 53bba6e633c78521ce2822664940b94d28324ccb Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Mon, 5 May 2025 14:31:15 +0200 Subject: [PATCH] switch to new intent plugin --- .../models/received_intent_parameter.dart | 7 ++++++- .../domain/entities/shared_content.dart | 15 +++++++++++---- .../domain/services/sharing_intent.dart | 19 ++++++++----------- .../domain/services/sharing_intent.g.dart | 6 +++--- app/pubspec.yaml | 6 ++---- app/pubspec_overrides.yaml | 4 +++- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/app/lib/data/models/received_intent_parameter.dart b/app/lib/data/models/received_intent_parameter.dart index 3a8b466b..db5c0b16 100644 --- a/app/lib/data/models/received_intent_parameter.dart +++ b/app/lib/data/models/received_intent_parameter.dart @@ -1,6 +1,11 @@ -class ReceivedIntentParameter { +import 'package:fast_equatable/fast_equatable.dart'; + +class ReceivedIntentParameter with FastEquatable { final String? content; final String? tool; ReceivedIntentParameter(this.content, this.tool); + + @override + List get hashParameters => [content, tool]; } diff --git a/app/lib/features/share_intent/domain/entities/shared_content.dart b/app/lib/features/share_intent/domain/entities/shared_content.dart index 4c49b3d8..1b64b352 100644 --- a/app/lib/features/share_intent/domain/entities/shared_content.dart +++ b/app/lib/features/share_intent/domain/entities/shared_content.dart @@ -1,7 +1,8 @@ +import 'package:fast_equatable/fast_equatable.dart'; import 'package:lensai/utils/uri_parser.dart' as uri_parser; -sealed class SharedContent { - const SharedContent(); +sealed class SharedContent with FastEquatable { + SharedContent(); factory SharedContent.parse(String content) { if (uri_parser.tryParseUrl(content, eagerParsing: true) @@ -16,17 +17,23 @@ sealed class SharedContent { final class SharedUrl extends SharedContent { final Uri url; - const SharedUrl(this.url); + SharedUrl(this.url); @override String toString() => url.toString(); + + @override + List get hashParameters => [url]; } final class SharedText extends SharedContent { final String text; - const SharedText(this.text); + SharedText(this.text); @override String toString() => text; + + @override + List get hashParameters => [text]; } diff --git a/app/lib/features/share_intent/domain/services/sharing_intent.dart b/app/lib/features/share_intent/domain/services/sharing_intent.dart index d8b5359b..57d851dc 100644 --- a/app/lib/features/share_intent/domain/services/sharing_intent.dart +++ b/app/lib/features/share_intent/domain/services/sharing_intent.dart @@ -3,10 +3,9 @@ import 'dart:async'; import 'package:lensai/core/logger.dart'; import 'package:lensai/data/models/received_intent_parameter.dart'; import 'package:mime/mime.dart' as mime; -import 'package:receive_intent/receive_intent.dart'; import 'package:riverpod/riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:rxdart/rxdart.dart'; +import 'package:simple_intent_receiver/simple_intent_receiver.dart'; import 'package:uri_to_file/uri_to_file.dart' as uri_to_file; part 'sharing_intent.g.dart'; @@ -16,11 +15,11 @@ final _sharingIntentTransformer = handleData: (intent, sink) async { final data = switch (intent.action) { 'android.intent.action.WEB_SEARCH' => - intent.extra?['query'] as String?, + intent.extra['query'] as String?, 'android.intent.action.VIEW' => intent.data, 'android.intent.action.SEND' => - intent.extra?['android.intent.extra.STREAM'] as String? ?? - intent.extra?['android.intent.extra.TEXT'] as String?, + intent.extra['android.intent.extra.STREAM'] as String? ?? + intent.extra['android.intent.extra.TEXT'] as String?, _ => null, }; @@ -41,11 +40,9 @@ final _sharingIntentTransformer = }, ); -@Riverpod() +@Riverpod(keepAlive: true) Raw> sharingIntentStream(Ref ref) { - return ConcatStream([ - // ignore: discarded_futures - ReceiveIntent.getInitialIntent().asStream(), - ReceiveIntent.receivedIntentStream, - ]).whereNotNull().transform(_sharingIntentTransformer); + final receiver = IntentReceiver.setUp(); + + return receiver.events.transform(_sharingIntentTransformer); } diff --git a/app/lib/features/share_intent/domain/services/sharing_intent.g.dart b/app/lib/features/share_intent/domain/services/sharing_intent.g.dart index 20a8276f..3bc5351a 100644 --- a/app/lib/features/share_intent/domain/services/sharing_intent.g.dart +++ b/app/lib/features/share_intent/domain/services/sharing_intent.g.dart @@ -7,12 +7,12 @@ part of 'sharing_intent.dart'; // ************************************************************************** String _$sharingIntentStreamHash() => - r'caf4ba31e79fd028a2497f6acc6d5a927924ed78'; + r'486f994fc0e01a2cffdb19d93f0a332f96a9850c'; /// See also [sharingIntentStream]. @ProviderFor(sharingIntentStream) final sharingIntentStreamProvider = - AutoDisposeProvider>>.internal( + Provider>>.internal( sharingIntentStream, name: r'sharingIntentStreamProvider', debugGetCreateSourceHash: @@ -26,6 +26,6 @@ final sharingIntentStreamProvider = @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef SharingIntentStreamRef = - AutoDisposeProviderRef>>; + ProviderRef>>; // 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 diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 46beeb81..58dd17c9 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -64,15 +64,13 @@ dependencies: path_provider: ^2.1.5 pocketbase: ^0.22.0 provider: ^6.1.5 - receive_intent: - git: - url: https://github.com/FaFre/receive_intent.git - ref: fix_recreate_activity riverpod: ^2.6.1 riverpod_annotation: ^2.6.1 rss_dart: ^1.0.12 rxdart: ^0.28.0 share_plus: ^11.0.0 + simple_intent_receiver: + path: ../packages/simple_intent_receiver skeletonizer: ^1.4.3 sliver_tools: ^0.2.12 speech_to_text_google_dialog: diff --git a/app/pubspec_overrides.yaml b/app/pubspec_overrides.yaml index acae63fa..5a8fe41b 100644 --- a/app/pubspec_overrides.yaml +++ b/app/pubspec_overrides.yaml @@ -1,7 +1,9 @@ -# melos_managed_dependency_overrides: flutter_mozilla_components,cross_cache,flutter_chat_core,langchain_core,tavily_dart +# melos_managed_dependency_overrides: flutter_mozilla_components,simple_intent_receiver,cross_cache,flutter_chat_core,langchain_core,tavily_dart dependency_overrides: flutter_mozilla_components: path: ../packages/flutter_mozilla_components + simple_intent_receiver: + path: ../packages/simple_intent_receiver cross_cache: path: ../../flutter_chat_ui/packages/cross_cache flutter_chat_core: