fix(llc): retry queue now follows the creation date
This commit is contained in:
@@ -1698,7 +1698,7 @@ class ChannelClientState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_channelState = _channelState.copyWith(
|
_channelState = _channelState.copyWith(
|
||||||
messages: newMessages,
|
messages: newMessages..sort(_sortByCreatedAt),
|
||||||
channel: _channelState.channel?.copyWith(
|
channel: _channelState.channel?.copyWith(
|
||||||
lastMessageAt: message.createdAt,
|
lastMessageAt: message.createdAt,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -88,20 +88,24 @@ class RetryQueue {
|
|||||||
_isRetrying = true;
|
_isRetrying = true;
|
||||||
|
|
||||||
logger?.info('Started retrying failed messages');
|
logger?.info('Started retrying failed messages');
|
||||||
for (var i = 0; i < _messageQueue.length; ++i) {
|
while (_messageQueue.isNotEmpty) {
|
||||||
logger?.info('${_messageQueue.length} messages remaining in the queue');
|
logger?.info('${_messageQueue.length} messages remaining in the queue');
|
||||||
final message = _messageQueue.toList()[i];
|
final message = _messageQueue.first;
|
||||||
await _runAndRetry(message);
|
final succeeded = await _runAndRetry(message);
|
||||||
|
if (!succeeded) {
|
||||||
|
_messageQueue.toList().forEach(_sendFailedEvent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_isRetrying = false;
|
_isRetrying = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _runAndRetry(Message message) async {
|
Future<bool> _runAndRetry(Message message) async {
|
||||||
var attempt = 1;
|
var attempt = 1;
|
||||||
|
|
||||||
final maxAttempt = _retryPolicy.maxRetryAttempts;
|
final maxAttempt = _retryPolicy.maxRetryAttempts;
|
||||||
// early return in case maxAttempt is less than 0
|
// early return in case maxAttempt is less than 0
|
||||||
if (attempt > maxAttempt) return;
|
if (attempt > maxAttempt) return false;
|
||||||
|
|
||||||
// ignore: literal_only_boolean_expressions
|
// ignore: literal_only_boolean_expressions
|
||||||
while (true) {
|
while (true) {
|
||||||
@@ -110,11 +114,11 @@ class RetryQueue {
|
|||||||
await _retryMessage(message);
|
await _retryMessage(message);
|
||||||
logger?.info('Message (${message.id}) sent successfully');
|
logger?.info('Message (${message.id}) sent successfully');
|
||||||
_messageQueue.removeMessage(message);
|
_messageQueue.removeMessage(message);
|
||||||
return;
|
return true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e is! StreamChatNetworkError || !e.isRetriable) {
|
if (e is! StreamChatNetworkError || !e.isRetriable) {
|
||||||
_messageQueue.removeMessage(message);
|
_messageQueue.removeMessage(message);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
// retry logic
|
// retry logic
|
||||||
final maxAttempt = _retryPolicy.maxRetryAttempts;
|
final maxAttempt = _retryPolicy.maxRetryAttempts;
|
||||||
@@ -150,6 +154,7 @@ class RetryQueue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _sendFailedEvent(Message message) {
|
void _sendFailedEvent(Message message) {
|
||||||
|
|||||||
@@ -533,11 +533,7 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
final channel = StreamChannel.of(context).channel;
|
final channel = StreamChannel.of(context).channel;
|
||||||
if (isUpdateFailed) {
|
channel.state?.retryFailedMessages();
|
||||||
channel.updateMessage(widget.message);
|
|
||||||
} else {
|
|
||||||
channel.sendMessage(widget.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 11, horizontal: 16),
|
padding: const EdgeInsets.symmetric(vertical: 11, horizontal: 16),
|
||||||
|
|||||||
Reference in New Issue
Block a user