custom pwa and shortcut support
This commit is contained in:
@@ -21,37 +21,42 @@ import 'package:fast_equatable/fast_equatable.dart';
|
||||
import 'package:weblibre/utils/input_classification.dart';
|
||||
|
||||
sealed class SharedContent with FastEquatable {
|
||||
SharedContent();
|
||||
final String? contextId;
|
||||
|
||||
factory SharedContent.parse(String content) {
|
||||
SharedContent({this.contextId});
|
||||
|
||||
factory SharedContent.parse(String content, {String? contextId}) {
|
||||
if (parseSharedIntentUrl(content) case final Uri uri) {
|
||||
return SharedUrl(uri);
|
||||
return SharedUrl(uri, contextId: contextId);
|
||||
} else {
|
||||
return SharedText(content);
|
||||
return SharedText(content, contextId: contextId);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [contextId];
|
||||
}
|
||||
|
||||
final class SharedUrl extends SharedContent {
|
||||
final Uri url;
|
||||
|
||||
SharedUrl(this.url);
|
||||
SharedUrl(this.url, {super.contextId});
|
||||
|
||||
@override
|
||||
String toString() => url.toString();
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [url];
|
||||
List<Object?> get hashParameters => [url, ...super.hashParameters];
|
||||
}
|
||||
|
||||
final class SharedText extends SharedContent {
|
||||
final String text;
|
||||
|
||||
SharedText(this.text);
|
||||
SharedText(this.text, {super.contextId});
|
||||
|
||||
@override
|
||||
String toString() => text;
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [text];
|
||||
List<Object?> get hashParameters => [text, ...super.hashParameters];
|
||||
}
|
||||
|
||||
@@ -45,6 +45,12 @@ final _sharingIntentTransformer =
|
||||
_ => null,
|
||||
};
|
||||
|
||||
// Extract container context from shortcut intents
|
||||
final contextId =
|
||||
intent.action == 'android.intent.action.VIEW'
|
||||
? intent.extra['pwa_context_id'] as String?
|
||||
: null;
|
||||
|
||||
if (data != null) {
|
||||
if (uri_to_file.isUriSupported(data)) {
|
||||
var path = data;
|
||||
@@ -70,17 +76,23 @@ final _sharingIntentTransformer =
|
||||
final mimeType = mime.lookupMimeType(file.path);
|
||||
switch (mimeType) {
|
||||
case 'application/pdf':
|
||||
sink.add(ReceivedIntentParameter(path, null));
|
||||
sink.add(
|
||||
ReceivedIntentParameter(path, null, contextId: contextId),
|
||||
);
|
||||
default:
|
||||
logger.w('Unhandled mime type: $mimeType');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Failed to convert URI to file: $e');
|
||||
// Fallback: pass the original URI
|
||||
sink.add(ReceivedIntentParameter(data, null));
|
||||
sink.add(
|
||||
ReceivedIntentParameter(data, null, contextId: contextId),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
sink.add(ReceivedIntentParameter(data, null));
|
||||
sink.add(
|
||||
ReceivedIntentParameter(data, null, contextId: contextId),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user