implemented reading of pdf files
This commit is contained in:
@@ -39,6 +39,11 @@
|
|||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:mimeType="application/pdf" />
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<receiver android:name="BangNavigatorWidgetProvider" android:exported="true">
|
<receiver android:name="BangNavigatorWidgetProvider" android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|||||||
@@ -1,14 +1,52 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:bang_navigator/core/logger.dart';
|
||||||
import 'package:bang_navigator/domain/entities/received_parameter.dart';
|
import 'package:bang_navigator/domain/entities/received_parameter.dart';
|
||||||
|
import 'package:bang_navigator/features/search_browser/domain/entities/modes.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:flutter_pdf_text/flutter_pdf_text.dart';
|
||||||
import 'package:flutter_sharing_intent/flutter_sharing_intent.dart';
|
import 'package:flutter_sharing_intent/flutter_sharing_intent.dart';
|
||||||
import 'package:flutter_sharing_intent/model/sharing_file.dart';
|
import 'package:flutter_sharing_intent/model/sharing_file.dart';
|
||||||
|
import 'package:mime/mime.dart' as mime;
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:rxdart/rxdart.dart';
|
import 'package:rxdart/rxdart.dart';
|
||||||
|
import 'package:uri_to_file/uri_to_file.dart' as uri_to_file;
|
||||||
|
|
||||||
part 'sharing_intent.g.dart';
|
part 'sharing_intent.g.dart';
|
||||||
|
|
||||||
|
final _sharingIntentTransformer =
|
||||||
|
StreamTransformer<List<SharedFile>, ReceivedParameter>.fromHandlers(
|
||||||
|
handleData: (files, sink) async {
|
||||||
|
//For now only one file is supported to share with the app
|
||||||
|
final data = files.firstOrNull;
|
||||||
|
|
||||||
|
if (data != null && data.value != null) {
|
||||||
|
switch (data.type) {
|
||||||
|
case SharedMediaType.TEXT:
|
||||||
|
case SharedMediaType.URL:
|
||||||
|
if (uri_to_file.isUriSupported(data.value!)) {
|
||||||
|
final file = await uri_to_file.toFile(data.value!);
|
||||||
|
final mimeType = mime.lookupMimeType(file.path);
|
||||||
|
switch (mimeType) {
|
||||||
|
case 'application/pdf':
|
||||||
|
final content =
|
||||||
|
await PDFDoc.fromFile(file).then((doc) => doc.text);
|
||||||
|
sink.add(
|
||||||
|
ReceivedParameter(content, KagiTool.summarizer.name),
|
||||||
|
);
|
||||||
|
default:
|
||||||
|
logger.w('Unhandled mime type: $mimeType');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sink.add(ReceivedParameter(data.value, null));
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
logger.w('Unhandled media type: $data');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
Raw<Stream<ReceivedParameter>> sharingIntentStream(SharingIntentStreamRef ref) {
|
Raw<Stream<ReceivedParameter>> sharingIntentStream(SharingIntentStreamRef ref) {
|
||||||
final initialStream = FlutterSharingIntent.instance
|
final initialStream = FlutterSharingIntent.instance
|
||||||
@@ -22,18 +60,5 @@ Raw<Stream<ReceivedParameter>> sharingIntentStream(SharingIntentStreamRef ref) {
|
|||||||
|
|
||||||
return ConcatStream(
|
return ConcatStream(
|
||||||
[initialStream, FlutterSharingIntent.instance.getMediaStream()],
|
[initialStream, FlutterSharingIntent.instance.getMediaStream()],
|
||||||
)
|
).transform(_sharingIntentTransformer);
|
||||||
.map(
|
|
||||||
(event) => event
|
|
||||||
.where(
|
|
||||||
(shared) =>
|
|
||||||
shared.type == SharedMediaType.TEXT ||
|
|
||||||
shared.type == SharedMediaType.URL,
|
|
||||||
)
|
|
||||||
.map((shared) => shared.value)
|
|
||||||
.whereNotNull()
|
|
||||||
.firstOrNull,
|
|
||||||
)
|
|
||||||
.whereNotNull()
|
|
||||||
.map((content) => ReceivedParameter(content, null));
|
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-1
@@ -406,6 +406,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.7447"
|
version: "1.1.7447"
|
||||||
|
flutter_pdf_text:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_pdf_text
|
||||||
|
sha256: "97a49ecba6cf711a607642785758bf74fe0aaa3a2223524fa0c142e3966c56a0"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.0"
|
||||||
flutter_riverpod:
|
flutter_riverpod:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -660,7 +668,7 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "1.12.0"
|
version: "1.12.0"
|
||||||
mime:
|
mime:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: mime
|
name: mime
|
||||||
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
|
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
|
||||||
@@ -1064,6 +1072,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.2"
|
version: "2.2.2"
|
||||||
|
uri_to_file:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: uri_to_file
|
||||||
|
sha256: cbbb38f975d22311efacc9a53cdcb806708606666d8092314b81c5cb7983b700
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ dependencies:
|
|||||||
flutter_hooks: ^0.20.5
|
flutter_hooks: ^0.20.5
|
||||||
flutter_inappwebview: ^6.0.0
|
flutter_inappwebview: ^6.0.0
|
||||||
flutter_material_design_icons: ^1.1.7447
|
flutter_material_design_icons: ^1.1.7447
|
||||||
|
flutter_pdf_text: ^0.6.0
|
||||||
flutter_secure_storage: ^9.0.0
|
flutter_secure_storage: ^9.0.0
|
||||||
flutter_sharing_intent: ^1.1.1
|
flutter_sharing_intent: ^1.1.1
|
||||||
go_router: ^13.2.2
|
go_router: ^13.2.2
|
||||||
@@ -26,6 +27,7 @@ dependencies:
|
|||||||
html: ^0.15.4
|
html: ^0.15.4
|
||||||
http: ^1.2.1
|
http: ^1.2.1
|
||||||
logger: ^2.2.0
|
logger: ^2.2.0
|
||||||
|
mime: ^1.0.5
|
||||||
riverpod: ^2.5.1
|
riverpod: ^2.5.1
|
||||||
riverpod_annotation: ^2.3.5
|
riverpod_annotation: ^2.3.5
|
||||||
rxdart: ^0.27.7
|
rxdart: ^0.27.7
|
||||||
@@ -35,6 +37,7 @@ dependencies:
|
|||||||
speech_to_text_google_dialog: ^0.0.6
|
speech_to_text_google_dialog: ^0.0.6
|
||||||
text_scroll: ^0.2.0
|
text_scroll: ^0.2.0
|
||||||
universal_io: ^2.2.2
|
universal_io: ^2.2.2
|
||||||
|
uri_to_file: ^1.0.0
|
||||||
url_launcher: ^6.2.5
|
url_launcher: ^6.2.5
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
Reference in New Issue
Block a user