diff --git a/events.go b/events.go index e45c4f4..cbc70a8 100644 --- a/events.go +++ b/events.go @@ -102,6 +102,47 @@ type HTMLMessage struct { FormattedBody string `json:"formatted_body"` } +// FileInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file +type FileInfo struct { + Mimetype string `json:"mimetype,omitempty"` + Size uint `json:"size,omitempty"` //filesize in bytes +} + +// FileMessage is an m.file event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file +type FileMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + URL string `json:"url"` + Filename string `json:"filename"` + Info FileInfo `json:"info,omitempty"` + ThumbnailURL string `json:"thumbnail_url,omitempty"` + ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` +} + +// LocationMessage is an m.location event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-location +type LocationMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + GeoURI string `json:"geo_uri"` + ThumbnailURL string `json:"thumbnail_url,omitempty"` + ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` +} + +// AudioInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio +type AudioInfo struct { + Mimetype string `json:"mimetype,omitempty"` + Size uint `json:"size,omitempty"` //filesize in bytes + Duration uint `json:"duration,omitempty"` //audio duration in ms +} + +// AudioMessage is an m.audio event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio +type AudioMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + URL string `json:"url"` + Info AudioInfo `json:"info,omitempty"` +} + var htmlRegex = regexp.MustCompile("<[^<]+?>") // GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition diff --git a/responses.go b/responses.go index 420690e..f488e69 100644 --- a/responses.go +++ b/responses.go @@ -189,6 +189,9 @@ type RespSync struct { Limited bool `json:"limited"` PrevBatch string `json:"prev_batch"` } `json:"timeline"` + Ephemeral struct { + Events []Event `json:"events"` + } `json:"ephemeral"` } `json:"join"` Invite map[string]struct { State struct { diff --git a/sync.go b/sync.go index c4bea48..ac326c3 100644 --- a/sync.go +++ b/sync.go @@ -64,6 +64,10 @@ func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error) event.RoomID = roomID s.notifyListeners(&event) } + for _, event := range roomData.Ephemeral.Events { + event.RoomID = roomID + s.notifyListeners(&event) + } } for roomID, roomData := range res.Rooms.Invite { room := s.getOrCreateRoom(roomID)