Skip to content

Commit d6e4318

Browse files
committed
msglist [nfc]: Factor out _fetchMore from fetchOlder
1 parent 27b95d9 commit d6e4318

File tree

1 file changed

+34
-19
lines changed

1 file changed

+34
-19
lines changed

lib/model/message_list.dart

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -649,10 +649,39 @@ class MessageListView with ChangeNotifier, _MessageSequence {
649649
if (haveOldest) return;
650650
if (busyFetchingMore) return;
651651
assert(fetched);
652+
assert(messages.isNotEmpty);
653+
await _fetchMore(
654+
anchor: NumericAnchor(messages[0].id),
655+
numBefore: kMessageListFetchBatchSize,
656+
numAfter: 0,
657+
processResult: (result) {
658+
if (result.messages.isNotEmpty
659+
&& result.messages.last.id == messages[0].id) {
660+
// TODO(server-6): includeAnchor should make this impossible
661+
result.messages.removeLast();
662+
}
663+
664+
store.reconcileMessages(result.messages);
665+
store.recentSenders.handleMessages(result.messages); // TODO(#824)
666+
667+
final fetchedMessages = _allMessagesVisible
668+
? result.messages // Avoid unnecessarily copying the list.
669+
: result.messages.where(_messageVisible);
670+
671+
_insertAllMessages(0, fetchedMessages);
672+
_haveOldest = result.foundOldest;
673+
});
674+
}
675+
676+
Future<void> _fetchMore({
677+
required Anchor anchor,
678+
required int numBefore,
679+
required int numAfter,
680+
required void Function(GetMessagesResult) processResult,
681+
}) async {
652682
assert(narrow is! TopicNarrow
653683
// We only intend to send "with" in [fetchInitial]; see there.
654684
|| (narrow as TopicNarrow).with_ == null);
655-
assert(messages.isNotEmpty);
656685
_setStatus(FetchingStatus.fetchingMore, was: FetchingStatus.idle);
657686
final generation = this.generation;
658687
bool hasFetchError = false;
@@ -661,10 +690,10 @@ class MessageListView with ChangeNotifier, _MessageSequence {
661690
try {
662691
result = await getMessages(store.connection,
663692
narrow: narrow.apiEncode(),
664-
anchor: NumericAnchor(messages[0].id),
693+
anchor: anchor,
665694
includeAnchor: false,
666-
numBefore: kMessageListFetchBatchSize,
667-
numAfter: 0,
695+
numBefore: numBefore,
696+
numAfter: numAfter,
668697
allowEmptyTopicName: true,
669698
);
670699
} catch (e) {
@@ -673,21 +702,7 @@ class MessageListView with ChangeNotifier, _MessageSequence {
673702
}
674703
if (this.generation > generation) return;
675704

676-
if (result.messages.isNotEmpty
677-
&& result.messages.last.id == messages[0].id) {
678-
// TODO(server-6): includeAnchor should make this impossible
679-
result.messages.removeLast();
680-
}
681-
682-
store.reconcileMessages(result.messages);
683-
store.recentSenders.handleMessages(result.messages); // TODO(#824)
684-
685-
final fetchedMessages = _allMessagesVisible
686-
? result.messages // Avoid unnecessarily copying the list.
687-
: result.messages.where(_messageVisible);
688-
689-
_insertAllMessages(0, fetchedMessages);
690-
_haveOldest = result.foundOldest;
705+
processResult(result);
691706
} finally {
692707
if (this.generation == generation) {
693708
if (hasFetchError) {

0 commit comments

Comments
 (0)