saveMessages static method
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);
}