getOrSyncHistoryMessages method

dynamic getOrSyncHistoryMessages(
  1. String channelId,
  2. int channelType,
  3. int oldestOrderSeq,
  4. bool contain,
  5. int pullMode,
  6. int limit,
  7. int aroundMsgOrderSeq,
  8. dynamic iGetOrSyncHistoryMsgBack(
    1. List<WKMsg>
    ),
  9. dynamic syncBack(),
)

Implementation

getOrSyncHistoryMessages(
    String channelId,
    int channelType,
    int oldestOrderSeq,
    bool contain,
    int pullMode,
    int limit,
    int aroundMsgOrderSeq,
    final Function(List<WKMsg>) iGetOrSyncHistoryMsgBack,
    final Function() syncBack) async {
  if (aroundMsgOrderSeq != 0) {
    int maxMsgSeq = await getMaxMessageSeq(channelId, channelType);
    int aroundMsgSeq = getOrNearbyMsgSeq(aroundMsgOrderSeq);

    if (maxMsgSeq >= aroundMsgSeq && maxMsgSeq - aroundMsgSeq <= limit) {
      // 显示最后一页数据
//                oldestOrderSeq = 0;
      oldestOrderSeq =
          await getMessageOrderSeq(maxMsgSeq, channelId, channelType);
      contain = true;
      pullMode = 0;
    } else {
      int minOrderSeq = await MessageDB.shared
          .getOrderSeq(channelId, channelType, aroundMsgOrderSeq, 3);
      if (minOrderSeq == 0) {
        oldestOrderSeq = aroundMsgOrderSeq;
      } else {
        if (minOrderSeq + limit < aroundMsgOrderSeq) {
          if (aroundMsgOrderSeq % wkOrderSeqFactor == 0) {
            oldestOrderSeq = ((aroundMsgOrderSeq / wkOrderSeqFactor - 3) *
                    wkOrderSeqFactor)
                .toInt();
          } else {
            oldestOrderSeq = aroundMsgOrderSeq - 3;
          }
        } else {
          // todo 这里只会查询3条数据  oldestOrderSeq = minOrderSeq
          int startOrderSeq = await MessageDB.shared
              .getOrderSeq(channelId, channelType, aroundMsgOrderSeq, limit);
          if (startOrderSeq == 0) {
            oldestOrderSeq = aroundMsgOrderSeq;
          } else {
            oldestOrderSeq = startOrderSeq;
          }
        }
      }
      pullMode = 1;
      contain = true;
    }
  }
  MessageDB.shared.getOrSyncHistoryMessages(
      channelId,
      channelType,
      oldestOrderSeq,
      contain,
      pullMode,
      limit,
      iGetOrSyncHistoryMsgBack,
      syncBack);
}