getMessageByRefer method
Resolves the full message represented by a message reference.
Implementation
@override
Future<NIMResult<NIMMessage>> getMessageByRefer(
NIMMessageRefer messageRefer,
) async {
final localResult = await super.getMessageByRefer(messageRefer);
if (localResult.isSuccess && localResult.data != null) {
return localResult;
}
final topic = _currentTopic;
final createTime = messageRefer.createTime;
if (topic == null || createTime == null || createTime <= 0) {
return localResult;
}
final result = await TopicRepo.instance.getTopicMessageList(
V2NIMTopicMessageListOption(
topic: topic,
beginTime: createTime,
endTime: createTime,
limit: 100,
direction: NIMQueryDirection.desc,
),
);
if (!result.isSuccess) {
Alog.e(
tag: 'TopicChatViewModel',
moduleName: 'getTopicMessageList',
content: 'getTopicMessageList error code: ${result.code}',
);
return NIMResult.failure(
message: result.errorDetails,
code: result.code,
);
}
final candidates = <NIMMessage>[
...?result.data?.replyList,
if (result.data?.anchorMessage != null) result.data!.anchorMessage!,
];
for (final message in candidates) {
if (TopicMessageHelper.matchesMessageRefer(message, messageRefer)) {
return NIMResult.success(data: message);
}
}
return NIMResult.failure(message: 'message not found');
}