def update_conversation(self, conversation):
<EOL>new_state = conversation.self_conversation_state<EOL>old_state = self._conversation.self_conversation_state<EOL>self._conversation = conversation<EOL>if not new_state.delivery_medium_option:<EOL><INDENT>new_state.delivery_medium_option.extend(<EOL>old_state.delivery_medium_option<EOL>)<EOL><DEDENT>old_timestamp = old_state.self_read_state.latest_read_timestamp<EOL>new_timestamp = new_state.self_read_state.latest_read_timestamp<EOL>if new_timestamp == <NUM_LIT:0>:<EOL><INDENT>new_state.self_read_state.latest_read_timestamp = old_timestamp<EOL><DEDENT>for new_entry in conversation.read_state:<EOL><INDENT>tstamp = parsers.from_timestamp(new_entry.latest_read_timestamp)<EOL>if tstamp == <NUM_LIT:0>:<EOL><INDENT>continue<EOL><DEDENT>uid = parsers.from_participantid(new_entry.participant_id)<EOL>if uid not in self._watermarks or self._watermarks[uid] < tstamp:<EOL><INDENT>self._watermarks[uid] = tstamp<EOL><DEDENT><DEDENT>
Update the internal state of the conversation.

        This method is used by :class:`.ConversationList` to maintain this
        instance.

        Args:
            conversation: ``Conversation`` message.