Skip to content

Commit 8051630

Browse files
committed
msglist [nfc]: Factor out _fetchMore from fetchOlder
1 parent f6e8113 commit 8051630

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
@@ -619,10 +619,39 @@ class MessageListView with ChangeNotifier, _MessageSequence {
619619
if (haveOldest) return;
620620
if (busyFetchingMore) return;
621621
assert(fetched);
622+
assert(messages.isNotEmpty);
623+
await _fetchMore(
624+
anchor: NumericAnchor(messages[0].id),
625+
numBefore: kMessageListFetchBatchSize,
626+
numAfter: 0,
627+
processResult: (result) {
628+
if (result.messages.isNotEmpty
629+
&& result.messages.last.id == messages[0].id) {
630+
// TODO(server-6): includeAnchor should make this impossible
631+
result.messages.removeLast();
632+
}
633+
634+
store.reconcileMessages(result.messages);
635+
store.recentSenders.handleMessages(result.messages); // TODO(#824)
636+
637+
final fetchedMessages = _allMessagesVisible
638+
? result.messages // Avoid unnecessarily copying the list.
639+
: result.messages.where(_messageVisible);
640+
641+
_insertAllMessages(0, fetchedMessages);
642+
_haveOldest = result.foundOldest;
643+
});
644+
}
645+
646+
Future<void> _fetchMore({
647+
required Anchor anchor,
648+
required int numBefore,
649+
required int numAfter,
650+
required void Function(GetMessagesResult) processResult,
651+
}) async {
622652
assert(narrow is! TopicNarrow
623653
// We only intend to send "with" in [fetchInitial]; see there.
624654
|| (narrow as TopicNarrow).with_ == null);
625-
assert(messages.isNotEmpty);
626655
_setStatus(FetchingStatus.fetchingMore, was: FetchingStatus.idle);
627656
final generation = this.generation;
628657
bool hasFetchError = false;
@@ -631,10 +660,10 @@ class MessageListView with ChangeNotifier, _MessageSequence {
631660
try {
632661
result = await getMessages(store.connection,
633662
narrow: narrow.apiEncode(),
634-
anchor: NumericAnchor(messages[0].id),
663+
anchor: anchor,
635664
includeAnchor: false,
636-
numBefore: kMessageListFetchBatchSize,
637-
numAfter: 0,
665+
numBefore: numBefore,
666+
numAfter: numAfter,
638667
allowEmptyTopicName: true,
639668
);
640669
} catch (e) {
@@ -643,21 +672,7 @@ class MessageListView with ChangeNotifier, _MessageSequence {
643672
}
644673
if (this.generation > generation) return;
645674

646-
if (result.messages.isNotEmpty
647-
&& result.messages.last.id == messages[0].id) {
648-
// TODO(server-6): includeAnchor should make this impossible
649-
result.messages.removeLast();
650-
}
651-
652-
store.reconcileMessages(result.messages);
653-
store.recentSenders.handleMessages(result.messages); // TODO(#824)
654-
655-
final fetchedMessages = _allMessagesVisible
656-
? result.messages // Avoid unnecessarily copying the list.
657-
: result.messages.where(_messageVisible);
658-
659-
_insertAllMessages(0, fetchedMessages);
660-
_haveOldest = result.foundOldest;
675+
processResult(result);
661676
} finally {
662677
if (this.generation == generation) {
663678
if (hasFetchError) {

0 commit comments

Comments
 (0)