[Persistence] Add support for pinned messages

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-02-22 17:39:23 +05:30
parent 953a82c7bc
commit cf6ae8761e
17 changed files with 1759 additions and 9 deletions
@@ -28,11 +28,13 @@ extension ChannelEntityX on ChannelEntity {
List<Member> members,
List<Read> reads,
List<Message> messages,
List<Message> pinnedMessages,
}) {
return ChannelState(
members: members,
read: reads,
messages: messages,
pinnedMessages: pinnedMessages,
channel: toChannelModel(createdBy: createdBy),
);
}
@@ -5,3 +5,4 @@ export 'event_mapper.dart';
export 'member_mapper.dart';
export 'read_mapper.dart';
export 'message_mapper.dart';
export 'pinned_message_mapper.dart';
@@ -8,6 +8,7 @@ extension MessageEntityX on MessageEntity {
/// Maps a [MessageEntity] into [Message]
Message toMessage({
User user,
User pinnedBy,
List<Reaction> latestReactions,
List<Reaction> ownReactions,
Message quotedMessage,
@@ -37,6 +38,10 @@ extension MessageEntityX on MessageEntity {
text: messageText,
user: user,
deletedAt: deletedAt,
pinned: pinned,
pinnedAt: pinnedAt,
pinExpires: pinExpires,
pinnedBy: pinnedBy,
);
}
}
@@ -67,6 +72,10 @@ extension MessageX on Message {
userId: user?.id,
deletedAt: deletedAt,
messageText: text,
pinned: pinned,
pinnedAt: pinnedAt,
pinExpires: pinExpires,
pinnedByUserId: pinnedBy?.id,
);
}
}
@@ -0,0 +1,81 @@
import 'dart:convert';
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
/// Useful mapping functions for [PinnedMessageEntity]
extension PinnedMessageEntityX on PinnedMessageEntity {
/// Maps a [PinnedMessageEntity] into [Message]
Message toMessage({
User user,
User pinnedBy,
List<Reaction> latestReactions,
List<Reaction> ownReactions,
Message quotedMessage,
}) {
return Message(
shadowed: shadowed,
latestReactions: latestReactions,
ownReactions: ownReactions,
attachments: attachments?.map((it) {
final json = jsonDecode(it);
return Attachment.fromData(json);
})?.toList(),
createdAt: createdAt,
extraData: extraData,
updatedAt: updatedAt,
id: id,
type: type,
status: status,
command: command,
parentId: parentId,
quotedMessageId: quotedMessageId,
quotedMessage: quotedMessage,
reactionCounts: reactionCounts,
reactionScores: reactionScores,
replyCount: replyCount,
showInChannel: showInChannel,
text: messageText,
user: user,
deletedAt: deletedAt,
pinned: pinned,
pinnedAt: pinnedAt,
pinExpires: pinExpires,
pinnedBy: pinnedBy,
);
}
}
/// Useful mapping functions for [Message]
extension PMessageX on Message {
/// Maps a [Message] into [PinnedMessageEntity]
PinnedMessageEntity toPinnedEntity({String cid}) {
return PinnedMessageEntity(
id: id,
attachments: attachments?.map((it) {
return jsonEncode(it.toData());
})?.toList(),
channelCid: cid,
type: type,
parentId: parentId,
quotedMessageId: quotedMessageId,
command: command,
createdAt: createdAt,
shadowed: shadowed,
showInChannel: showInChannel,
replyCount: replyCount,
reactionScores: reactionScores,
reactionCounts: reactionCounts,
status: status,
updatedAt: updatedAt,
extraData: extraData,
userId: user?.id,
deletedAt: deletedAt,
messageText: text,
pinned: pinned,
pinnedAt: pinnedAt,
pinExpires: pinExpires,
pinnedByUserId: pinnedBy?.id,
);
}
}