switch to new intent plugin

This commit is contained in:
Fabian Freund
2025-05-05 14:31:15 +02:00
parent a2d59e2e39
commit 53bba6e633
6 changed files with 33 additions and 24 deletions
@@ -1,6 +1,11 @@
class ReceivedIntentParameter { import 'package:fast_equatable/fast_equatable.dart';
class ReceivedIntentParameter with FastEquatable {
final String? content; final String? content;
final String? tool; final String? tool;
ReceivedIntentParameter(this.content, this.tool); ReceivedIntentParameter(this.content, this.tool);
@override
List<Object?> get hashParameters => [content, tool];
} }
@@ -1,7 +1,8 @@
import 'package:fast_equatable/fast_equatable.dart';
import 'package:lensai/utils/uri_parser.dart' as uri_parser; import 'package:lensai/utils/uri_parser.dart' as uri_parser;
sealed class SharedContent { sealed class SharedContent with FastEquatable {
const SharedContent(); SharedContent();
factory SharedContent.parse(String content) { factory SharedContent.parse(String content) {
if (uri_parser.tryParseUrl(content, eagerParsing: true) if (uri_parser.tryParseUrl(content, eagerParsing: true)
@@ -16,17 +17,23 @@ sealed class SharedContent {
final class SharedUrl extends SharedContent { final class SharedUrl extends SharedContent {
final Uri url; final Uri url;
const SharedUrl(this.url); SharedUrl(this.url);
@override @override
String toString() => url.toString(); String toString() => url.toString();
@override
List<Object?> get hashParameters => [url];
} }
final class SharedText extends SharedContent { final class SharedText extends SharedContent {
final String text; final String text;
const SharedText(this.text); SharedText(this.text);
@override @override
String toString() => text; String toString() => text;
@override
List<Object?> get hashParameters => [text];
} }
@@ -3,10 +3,9 @@ import 'dart:async';
import 'package:lensai/core/logger.dart'; import 'package:lensai/core/logger.dart';
import 'package:lensai/data/models/received_intent_parameter.dart'; import 'package:lensai/data/models/received_intent_parameter.dart';
import 'package:mime/mime.dart' as mime; import 'package:mime/mime.dart' as mime;
import 'package:receive_intent/receive_intent.dart';
import 'package:riverpod/riverpod.dart'; import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.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; import 'package:uri_to_file/uri_to_file.dart' as uri_to_file;
part 'sharing_intent.g.dart'; part 'sharing_intent.g.dart';
@@ -16,11 +15,11 @@ final _sharingIntentTransformer =
handleData: (intent, sink) async { handleData: (intent, sink) async {
final data = switch (intent.action) { final data = switch (intent.action) {
'android.intent.action.WEB_SEARCH' => 'android.intent.action.WEB_SEARCH' =>
intent.extra?['query'] as String?, intent.extra['query'] as String?,
'android.intent.action.VIEW' => intent.data, 'android.intent.action.VIEW' => intent.data,
'android.intent.action.SEND' => 'android.intent.action.SEND' =>
intent.extra?['android.intent.extra.STREAM'] as String? ?? intent.extra['android.intent.extra.STREAM'] as String? ??
intent.extra?['android.intent.extra.TEXT'] as String?, intent.extra['android.intent.extra.TEXT'] as String?,
_ => null, _ => null,
}; };
@@ -41,11 +40,9 @@ final _sharingIntentTransformer =
}, },
); );
@Riverpod() @Riverpod(keepAlive: true)
Raw<Stream<ReceivedIntentParameter>> sharingIntentStream(Ref ref) { Raw<Stream<ReceivedIntentParameter>> sharingIntentStream(Ref ref) {
return ConcatStream([ final receiver = IntentReceiver.setUp();
// ignore: discarded_futures
ReceiveIntent.getInitialIntent().asStream(), return receiver.events.transform(_sharingIntentTransformer);
ReceiveIntent.receivedIntentStream,
]).whereNotNull().transform(_sharingIntentTransformer);
} }
@@ -7,12 +7,12 @@ part of 'sharing_intent.dart';
// ************************************************************************** // **************************************************************************
String _$sharingIntentStreamHash() => String _$sharingIntentStreamHash() =>
r'caf4ba31e79fd028a2497f6acc6d5a927924ed78'; r'486f994fc0e01a2cffdb19d93f0a332f96a9850c';
/// See also [sharingIntentStream]. /// See also [sharingIntentStream].
@ProviderFor(sharingIntentStream) @ProviderFor(sharingIntentStream)
final sharingIntentStreamProvider = final sharingIntentStreamProvider =
AutoDisposeProvider<Raw<Stream<ReceivedIntentParameter>>>.internal( Provider<Raw<Stream<ReceivedIntentParameter>>>.internal(
sharingIntentStream, sharingIntentStream,
name: r'sharingIntentStreamProvider', name: r'sharingIntentStreamProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
@@ -26,6 +26,6 @@ final sharingIntentStreamProvider =
@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 SharingIntentStreamRef = typedef SharingIntentStreamRef =
AutoDisposeProviderRef<Raw<Stream<ReceivedIntentParameter>>>; ProviderRef<Raw<Stream<ReceivedIntentParameter>>>;
// 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 -4
View File
@@ -64,15 +64,13 @@ dependencies:
path_provider: ^2.1.5 path_provider: ^2.1.5
pocketbase: ^0.22.0 pocketbase: ^0.22.0
provider: ^6.1.5 provider: ^6.1.5
receive_intent:
git:
url: https://github.com/FaFre/receive_intent.git
ref: fix_recreate_activity
riverpod: ^2.6.1 riverpod: ^2.6.1
riverpod_annotation: ^2.6.1 riverpod_annotation: ^2.6.1
rss_dart: ^1.0.12 rss_dart: ^1.0.12
rxdart: ^0.28.0 rxdart: ^0.28.0
share_plus: ^11.0.0 share_plus: ^11.0.0
simple_intent_receiver:
path: ../packages/simple_intent_receiver
skeletonizer: ^1.4.3 skeletonizer: ^1.4.3
sliver_tools: ^0.2.12 sliver_tools: ^0.2.12
speech_to_text_google_dialog: speech_to_text_google_dialog:
+3 -1
View File
@@ -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: dependency_overrides:
flutter_mozilla_components: flutter_mozilla_components:
path: ../packages/flutter_mozilla_components path: ../packages/flutter_mozilla_components
simple_intent_receiver:
path: ../packages/simple_intent_receiver
cross_cache: cross_cache:
path: ../../flutter_chat_ui/packages/cross_cache path: ../../flutter_chat_ui/packages/cross_cache
flutter_chat_core: flutter_chat_core: