saveMessages static method

Future<void> saveMessages(
  1. List<MBMessage> messages, {
  2. bool fromFetch = false,
})

Save a list of messages. @param messages The list of messages that will be saved. @param fromFetch If the save has been triggered after an API call.

Implementation

static Future<void> saveMessages(
  List<MBMessage> messages, {
  bool fromFetch = false,
}) async {
  String path = await _messagesPath();
  File f = File(path);
  List<MBMessage>? messagesSaved = await savedMessages();
  List<MBMessage> messagesToSave = [];
  if (fromFetch) {
    for (MBMessage message in messages) {
      MBMessage? savedMessage =
          messagesSaved?.firstWhereOrNull((m) => m.id == message.id);
      if (savedMessage != null) {
        if (savedMessage.triggers != null && message.triggers != null) {
          if (savedMessage.triggers is MBMessageTriggers &&
              message.triggers is MBMessageTriggers) {
            MBMessageTriggers savedTriggers = savedMessage.triggers;
            MBMessageTriggers messageTriggers = message.triggers;
            savedTriggers.updateTriggers(messageTriggers);
          }
        } else if (savedMessage.triggers == null &&
            message.triggers != null) {
          savedMessage.triggers = message.triggers;
          savedMessage.sendAfterDays = message.sendAfterDays;
          savedMessage.repeatTimes = message.repeatTimes;
        }
        messagesToSave.add(savedMessage);
      } else {
        messagesToSave.add(message);
      }
    }
  } else {
    messagesToSave = messages;
  }
  List<Map<String, dynamic>> jsonDictionaries = messagesToSave
      .map((m) => MBMessageSavingUtility.jsonDictionaryForMessage(m))
      .toList();
  String jsonString = json.encode(jsonDictionaries);
  if (!(await f.exists())) {
    await f.create(recursive: true);
  }
  await f.writeAsString(jsonString);
}