# Copyright 2018 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

type: object
title: m.presence
description: |-
  An EDU representing presence updates for users of the sending homeserver.
allOf:
  - $ref: ../edu.yaml
  - type: object
    properties:
      edu_type:
        type: enum
        enum: ['m.presence']
        description: The string ``m.presence``
        example: "m.presence"
      content:
        type: object
        description: The presence updates and requests.
        title: Presence Update
        properties:
          push:
            type: array
            description: |-
              A list of presence updates that the receiving server is likely
              to be interested in.
            items:
              type: object
              title: User Presence Update
              properties:
                user_id:
                  type: string
                  description: The user ID this presence EDU is for.
                  example: "@john:matrix.org"
                presence:
                  type: enum
                  enum: ['offline', 'unavailable', 'online']
                  description: The presence of the user.
                  example: "online"
                status_msg:
                  type: string
                  description: An optional description to accompany the presence.
                  example: "Making cupcakes"
                last_active_ago:
                  type: integer
                  format: int64
                  description: |-
                    The number of milliseconds that have elapsed since the user
                    last did something.
                  example: 5000
                currently_active:
                  type: boolean
                  description: |-
                    True if the user is likely to be interacting with their
                    client. This may be indicated by the user having a 
                    ``last_active_ago`` within the last few minutes. Defaults
                    to false.
                  example: true
              required: ['user_id', 'presence', 'last_active_ago']
        required: ['push']
