78 lines
2.4 KiB
Dart
78 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:relationship_saver/features/local/local_models.dart';
|
|
import 'package:relationship_saver/features/people/presentation/people_view.dart';
|
|
import 'package:relationship_saver/features/people/presentation/providers/people_ui_state.dart';
|
|
import 'package:relationship_saver/features/share_intake/share_capture_models.dart';
|
|
import 'package:relationship_saver/features/share_intake/share_capture_review_sheet.dart';
|
|
import 'package:relationship_saver/features/share_intake/share_inbox_view.dart';
|
|
import 'package:relationship_saver/features/share_intake/share_payload_parser.dart';
|
|
|
|
SharedPayload? buildSharedPayloadFromRawText({
|
|
required String rawText,
|
|
required String platform,
|
|
String? sourceAppHint,
|
|
}) {
|
|
final String trimmed = rawText.trim();
|
|
if (trimmed.isEmpty) {
|
|
return null;
|
|
}
|
|
final String sourceApp = SharePayloadParser.detectSourceApp(
|
|
rawText: trimmed,
|
|
sourceAppHint: sourceAppHint,
|
|
);
|
|
final SharedPayload payload = SharePayloadParser.parse(
|
|
rawText: trimmed,
|
|
sourceApp: sourceApp,
|
|
platform: platform,
|
|
createdAt: DateTime.now(),
|
|
receivedAt: DateTime.now(),
|
|
);
|
|
if (payload.rawText.trim().isEmpty && (payload.url?.trim().isEmpty ?? true)) {
|
|
return null;
|
|
}
|
|
return payload;
|
|
}
|
|
|
|
Future<SharedMessageIngestResult?> startShareCaptureReview(
|
|
BuildContext context, {
|
|
required WidgetRef ref,
|
|
required SharedPayload payload,
|
|
}) {
|
|
return showShareCaptureReviewSheet(context, ref: ref, payload: payload);
|
|
}
|
|
|
|
void openShareCaptureDestination(
|
|
BuildContext context, {
|
|
required WidgetRef ref,
|
|
required SharedMessageIngestResult result,
|
|
}) {
|
|
if (result.isQueuedForResolution) {
|
|
Navigator.of(context).push<void>(
|
|
MaterialPageRoute<void>(
|
|
builder: (BuildContext context) => const ShareInboxView(),
|
|
),
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (result.profileId != null) {
|
|
ref.read(selectedPersonIdProvider.notifier).select(result.profileId!);
|
|
}
|
|
Navigator.of(context).push<void>(
|
|
MaterialPageRoute<void>(
|
|
builder: (BuildContext context) => const PeopleView(),
|
|
),
|
|
);
|
|
}
|
|
|
|
String shareCaptureResultMessage(SharedMessageIngestResult result) {
|
|
if (result.isQueuedForResolution) {
|
|
return 'Saved shared text to Capture inbox.';
|
|
}
|
|
if (result.createdProfile) {
|
|
return 'Saved shared text and created ${result.profileName}.';
|
|
}
|
|
return 'Saved shared text to ${result.profileName}.';
|
|
}
|