insertOrUpdateMsgExtras method

Future<bool> insertOrUpdateMsgExtras(
  1. List<WKMsgExtra> list
)

Implementation

Future<bool> insertOrUpdateMsgExtras(List<WKMsgExtra> list) async {
  List<String> msgIds = [];
  for (int i = 0, size = list.length; i < size; i++) {
    if (list[i].messageID != '') {
      msgIds.add(list[i].messageID);
    }
  }
  List<WKMsgExtra> existList = await queryMsgExtrasWithMsgIds(msgIds);
  List<Map<String, Object>> insertCVList = [];
  List<Map<String, Object>> updateCVList = [];
  for (int i = 0, size = list.length; i < size; i++) {
    bool isAdd = true;
    for (WKMsgExtra extra in existList) {
      if (list[i].messageID == extra.messageID) {
        updateCVList.add(getExtraMap(list[i]));
        isAdd = false;
        break;
      }
    }
    if (isAdd) {
      insertCVList.add(getExtraMap(list[i]));
    }
  }
  if (insertCVList.isNotEmpty || updateCVList.isNotEmpty) {
    WKDBHelper.shared.getDB()!.transaction((txn) async {
      if (insertCVList.isNotEmpty) {
        for (int i = 0; i < insertCVList.length; i++) {
          txn.insert(WKDBConst.tableMessageExtra, insertCVList[i],
              conflictAlgorithm: ConflictAlgorithm.replace);
        }
      }
      if (updateCVList.isNotEmpty) {
        for (int i = 0; i < updateCVList.length; i++) {
          txn.update(WKDBConst.tableMessageExtra, updateCVList[0],
              where: "message_id=?",
              whereArgs: [updateCVList[i]['message_id']]);
        }
      }
    });
  }
  return true;
}