searchWithChannel method

Future<List<WKMsg>> searchWithChannel(
  1. String keyword,
  2. String channelId,
  3. int channelType
)

Implementation

Future<List<WKMsg>> searchWithChannel(
    String keyword, String channelId, int channelType) async {
  List<WKMsg> list = [];
  var sql =
      "select * from (select $messageCols,$extraCols from ${WKDBConst.tableMessage} left join ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id= ${WKDBConst.tableMessageExtra}.message_id where  ${WKDBConst.tableMessage}.searchable_word like ? and  ${WKDBConst.tableMessage}.channel_id=? and  ${WKDBConst.tableMessage}.channel_type=?) where is_deleted=0 and revoke=0";
  List<Map<String, Object?>> results = await WKDBHelper.shared
      .getDB()!
      .rawQuery(sql, ['%$keyword%', channelId, channelType]);
  List<String> fromUIDs = [];
  WKChannel? channel =
      await WKIM.shared.channelManager.getChannel(channelId, channelType);

  for (Map<String, Object?> data in results) {
    var msg = WKDBConst.serializeWKMsg(data);
    if (channel != null) {
      msg.setChannelInfo(channel);
    }
    if (msg.fromUID != '') {
      fromUIDs.add(msg.fromUID);
    }
    list.add(msg);
  }
  if (fromUIDs.isNotEmpty) {
    List<String> uniqueList = fromUIDs.toSet().toList();
    List<WKChannel> wkChannels = await ChannelDB.shared
        .queryWithChannelIdsAndChannelType(
            uniqueList, WKChannelType.personal);
    if (wkChannels.isNotEmpty) {
      for (WKChannel channel in wkChannels) {
        for (WKMsg msg in list) {
          if (msg.fromUID == channel.channelID) {
            msg.setFrom(channel);
            break;
          }
        }
      }
    }

    if (channelType == WKChannelType.group) {
      List<WKChannelMember> members = await ChannelMemberDB.shared
          .queryMemberWithUIDs(channelId, channelType, uniqueList);
      if (members.isNotEmpty) {
        for (WKChannelMember member in members) {
          for (WKMsg msg in list) {
            if (msg.fromUID == member.memberUID) {
              msg.setMemberOfFrom(member);
              break;
            }
          }
        }
      }
    }
  }
  return list;
}