async def build_user_conversation_list(client):
conv_states, sync_timestamp = await _sync_all_conversations(client)<EOL>required_user_ids = set()<EOL>for conv_state in conv_states:<EOL><INDENT>required_user_ids |= {<EOL>user.UserID(chat_id=part.id.chat_id, gaia_id=part.id.gaia_id)<EOL>for part in conv_state.conversation.participant_data<EOL>}<EOL><DEDENT>required_entities = []<EOL>if required_user_ids:<EOL><INDENT>logger.debug('<STR_LIT>'<EOL>.format(required_user_ids))<EOL>try:<EOL><INDENT>response = await client.get_entity_by_id(<EOL>hangouts_pb2.GetEntityByIdRequest(<EOL>request_header=client.get_request_header(),<EOL>batch_lookup_spec=[<EOL>hangouts_pb2.EntityLookupSpec(<EOL>gaia_id=user_id.gaia_id,<EOL>create_offnetwork_gaia=True,<EOL>)<EOL>for user_id in required_user_ids<EOL>],<EOL>)<EOL>)<EOL>for entity_result in response.entity_result:<EOL><INDENT>required_entities.extend(entity_result.entity)<EOL><DEDENT><DEDENT>except exceptions.NetworkError as e:<EOL><INDENT>logger.warning('<STR_LIT>'.format(e))<EOL><DEDENT><DEDENT>conv_part_list = []<EOL>for conv_state in conv_states:<EOL><INDENT>conv_part_list.extend(conv_state.conversation.participant_data)<EOL><DEDENT>get_self_info_response = await client.get_self_info(<EOL>hangouts_pb2.GetSelfInfoRequest(<EOL>request_header=client.get_request_header(),<EOL>)<EOL>)<EOL>self_entity = get_self_info_response.self_entity<EOL>user_list = user.UserList(client, self_entity, required_entities,<EOL>conv_part_list)<EOL>conversation_list = ConversationList(client, conv_states,<EOL>user_list, sync_timestamp)<EOL>return (user_list, conversation_list)<EOL>
Build :class:`.UserList` and :class:`.ConversationList`.

    This method requests data necessary to build the list of conversations and
    users. Users that are not in the contact list but are participating in a
    conversation will also be retrieved.

    Args:
        client (Client): Connected client.

    Returns:
        (:class:`.UserList`, :class:`.ConversationList`):
            Tuple of built objects.