mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
Fix retry flow and contact filters
This commit is contained in:
@@ -1788,6 +1788,7 @@ class _MessageBubbleState extends State<MessageBubble> {
|
||||
receptionDetails?.rssiDbm ??
|
||||
matchedRxLog?.logRxDataInfo?.rssiDbm ??
|
||||
message.lastEchoRssiDbm;
|
||||
final routeMetadata = messagesProvider.getMessageRouteMetadata(message.id);
|
||||
|
||||
// Look up contact information for rich display name
|
||||
final contactsProvider = context.read<ContactsProvider>();
|
||||
@@ -2515,7 +2516,7 @@ class _MessageBubbleState extends State<MessageBubble> {
|
||||
switch (recipient.deliveryStatus) {
|
||||
case MessageDeliveryStatus.delivered:
|
||||
statusColor = Colors.green;
|
||||
statusIcon = Icons.check_circle;
|
||||
statusIcon = Icons.done_all;
|
||||
statusText =
|
||||
recipient.roundTripTimeMs != null
|
||||
? '${recipient.roundTripTimeMs}ms'
|
||||
@@ -2523,6 +2524,15 @@ class _MessageBubbleState extends State<MessageBubble> {
|
||||
context,
|
||||
)!.delivered;
|
||||
break;
|
||||
case MessageDeliveryStatus.sent:
|
||||
statusColor = Theme.of(
|
||||
context,
|
||||
).colorScheme.onSurfaceVariant;
|
||||
statusIcon = Icons.done;
|
||||
statusText = AppLocalizations.of(
|
||||
context,
|
||||
)!.sent;
|
||||
break;
|
||||
case MessageDeliveryStatus.failed:
|
||||
statusColor = Colors.red;
|
||||
statusIcon = Icons.cancel;
|
||||
@@ -2531,7 +2541,6 @@ class _MessageBubbleState extends State<MessageBubble> {
|
||||
)!.failed;
|
||||
break;
|
||||
case MessageDeliveryStatus.sending:
|
||||
case MessageDeliveryStatus.sent:
|
||||
default:
|
||||
statusColor = Colors.orange;
|
||||
statusIcon = Icons.schedule;
|
||||
@@ -2726,6 +2735,7 @@ class _MessageBubbleState extends State<MessageBubble> {
|
||||
context,
|
||||
message: message,
|
||||
isSarMarker: isSarMarker,
|
||||
routeMetadata: routeMetadata,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import '../../models/contact.dart';
|
||||
import '../../models/message.dart';
|
||||
import '../../models/message_route_metadata.dart';
|
||||
import '../../utils/avatar_label_helper.dart';
|
||||
import '../../utils/message_extensions.dart';
|
||||
import '../common/contact_avatar.dart';
|
||||
@@ -59,6 +60,7 @@ Widget buildBubbleMetaFooter(
|
||||
BuildContext context, {
|
||||
required Message message,
|
||||
required bool isSarMarker,
|
||||
MessageRouteMetadata? routeMetadata,
|
||||
}) {
|
||||
final metaColor = Theme.of(
|
||||
context,
|
||||
@@ -86,12 +88,13 @@ Widget buildBubbleMetaFooter(
|
||||
).textTheme.labelSmall?.copyWith(color: metaColor),
|
||||
),
|
||||
]);
|
||||
} else if (!isSarMarker && message.pathLen < 255) {
|
||||
} else if (!isSarMarker && _effectivePathLen(message, routeMetadata) < 255) {
|
||||
final effectivePathLen = _effectivePathLen(message, routeMetadata);
|
||||
items.addAll([
|
||||
Icon(Icons.alt_route, size: 11, color: metaColor),
|
||||
const SizedBox(width: 3),
|
||||
Text(
|
||||
message.pathLen == 0 ? 'direct' : '${message.pathLen}hop',
|
||||
effectivePathLen == 0 ? 'direct' : '${effectivePathLen}hop',
|
||||
style: Theme.of(
|
||||
context,
|
||||
).textTheme.labelSmall?.copyWith(color: metaColor),
|
||||
@@ -124,6 +127,9 @@ Widget buildBubbleMetaFooter(
|
||||
);
|
||||
}
|
||||
|
||||
int _effectivePathLen(Message message, MessageRouteMetadata? routeMetadata) =>
|
||||
routeMetadata?.hopCount ?? message.pathLen;
|
||||
|
||||
Widget buildChannelHeaderPill(
|
||||
BuildContext context, {
|
||||
required String label,
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../models/message.dart';
|
||||
import '../../models/message_route_metadata.dart';
|
||||
import '../../models/path_selection.dart';
|
||||
import '../../models/message_reception_details.dart';
|
||||
import '../../providers/messages_provider.dart';
|
||||
@@ -209,7 +210,7 @@ Widget buildSentDirectSignalStatus(
|
||||
_techChip(
|
||||
context,
|
||||
icon: Icons.alt_route,
|
||||
label: hopDisplayLabel(message),
|
||||
label: hopDisplayLabelForMessage(message, routeMetadata),
|
||||
color: Colors.indigo,
|
||||
),
|
||||
_techChip(
|
||||
@@ -294,6 +295,17 @@ String hopDisplayLabel(Message message) {
|
||||
return '${message.pathLen} hop${message.pathLen == 1 ? '' : 's'}';
|
||||
}
|
||||
|
||||
String hopDisplayLabelForMessage(
|
||||
Message message,
|
||||
MessageRouteMetadata? routeMetadata,
|
||||
) {
|
||||
final effectivePathLen = routeMetadata?.hopCount ?? message.pathLen;
|
||||
if (effectivePathLen == 0) return 'Direct';
|
||||
if (effectivePathLen >= 255 && message.isContactMessage) return 'Direct';
|
||||
if (effectivePathLen >= 255) return 'Unknown';
|
||||
return '$effectivePathLen hop${effectivePathLen == 1 ? '' : 's'}';
|
||||
}
|
||||
|
||||
Widget _techChip(
|
||||
BuildContext context, {
|
||||
required IconData icon,
|
||||
|
||||
Reference in New Issue
Block a user