extends Object class_name MessageData signal message_added(message) signal message_group_added(message_group) # warning-ignore:unused_signal signal message_edited const FILE_NAME = "message_history.dat" const MAX_MESSAGES = 200 var dirty_flag = false var loaded_message_groups = [] var message_count = 0 func add_message(content, time_stamp, user): var message_group: MessageGroup if loaded_message_groups.empty(): message_group = _add_message_group(time_stamp, user) else: var latest_message_group = loaded_message_groups[-1] if latest_message_group.associated_user != user: message_group = _add_message_group(time_stamp, user) else: var latest_message = latest_message_group.messages[-1] if time_stamp - latest_message.time_stamp >= 120: message_group = _add_message_group(time_stamp, user) else: message_group = loaded_message_groups[-1] var message = Message.new() message.content = content message.time_stamp = time_stamp message_group.add(message) message_count += 1 if message_count > MAX_MESSAGES: get_first_message().delete() emit_signal("message_added", message) dirty_flag = true func get_first_message() -> Message: if loaded_message_groups.empty(): return null else: return loaded_message_groups[0].messages[0] func get_last_message_of_user(user: User) -> Message: if not loaded_message_groups.empty(): for i in range(loaded_message_groups.size() -1, -1, -1): var message_group = loaded_message_groups[i] if message_group.associated_user == user: return loaded_message_groups[i].messages[-1] return null func load_data(): var file = File.new() if not file.file_exists("user://" + FILE_NAME): return file.open("user://" + FILE_NAME, File.READ) var json_string = file.get_as_text() if validate_json(json_string): printerr("\"" + FILE_NAME + "\" was found, but is corrupted.") return var message_data_list = parse_json(json_string) for message_data in message_data_list: var user = Users.get_primary() if message_data["user"] else Users.get_helper() add_message( message_data["content"], message_data["time_stamp"], user ) func save_data(): if dirty_flag: var message_data_list = [] for message_group in loaded_message_groups: var user = message_group.associated_user.is_primary() for message in message_group.messages: var message_data = { "user" : user, "time_stamp" : message.time_stamp, "content" : message.content } message_data_list.append(message_data) var json_string = to_json(message_data_list) var file = File.new() file.open("user://" + FILE_NAME, File.WRITE) file.store_string(json_string) file.close() # dirty_flag needs to be set to false after successful save! dirty_flag = false func _add_message_group(time_stamp, user) -> MessageGroup: var message_group = MessageGroup.new() message_group.associated_user = user message_group.time_stamp = time_stamp loaded_message_groups.append(message_group) emit_signal("message_group_added", message_group) return message_group