mirror of https://github.com/mautrix/go.git
108 lines
2.7 KiB
Go
108 lines
2.7 KiB
Go
// Copyright (c) 2020 Tulir Asokan
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package event
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"time"
|
|
|
|
"maunium.net/go/mautrix/id"
|
|
)
|
|
|
|
// TagEventContent represents the content of a m.tag room account data event.
|
|
// https://spec.matrix.org/v1.2/client-server-api/#mtag
|
|
type TagEventContent struct {
|
|
Tags Tags `json:"tags"`
|
|
}
|
|
|
|
type Tags map[RoomTag]TagMetadata
|
|
|
|
type RoomTag string
|
|
|
|
const (
|
|
RoomTagFavourite RoomTag = "m.favourite"
|
|
RoomTagLowPriority RoomTag = "m.lowpriority"
|
|
RoomTagServerNotice RoomTag = "m.server_notice"
|
|
)
|
|
|
|
func (rt RoomTag) IsUserDefined() bool {
|
|
return strings.HasPrefix(string(rt), "u.")
|
|
}
|
|
|
|
func (rt RoomTag) String() string {
|
|
return string(rt)
|
|
}
|
|
|
|
func (rt RoomTag) Name() string {
|
|
if rt.IsUserDefined() {
|
|
return string(rt[2:])
|
|
}
|
|
switch rt {
|
|
case RoomTagFavourite:
|
|
return "Favourite"
|
|
case RoomTagLowPriority:
|
|
return "Low priority"
|
|
case RoomTagServerNotice:
|
|
return "Server notice"
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// Deprecated: type alias
|
|
type Tag = TagMetadata
|
|
|
|
type TagMetadata struct {
|
|
Order json.Number `json:"order,omitempty"`
|
|
|
|
MauDoublePuppetSource string `json:"fi.mau.double_puppet_source,omitempty"`
|
|
}
|
|
|
|
// DirectChatsEventContent represents the content of a m.direct account data event.
|
|
// https://spec.matrix.org/v1.2/client-server-api/#mdirect
|
|
type DirectChatsEventContent map[id.UserID][]id.RoomID
|
|
|
|
// FullyReadEventContent represents the content of a m.fully_read account data event.
|
|
// https://spec.matrix.org/v1.2/client-server-api/#mfully_read
|
|
type FullyReadEventContent struct {
|
|
EventID id.EventID `json:"event_id"`
|
|
}
|
|
|
|
// IgnoredUserListEventContent represents the content of a m.ignored_user_list account data event.
|
|
// https://spec.matrix.org/v1.2/client-server-api/#mignored_user_list
|
|
type IgnoredUserListEventContent struct {
|
|
IgnoredUsers map[id.UserID]IgnoredUser `json:"ignored_users"`
|
|
}
|
|
|
|
type IgnoredUser struct {
|
|
// This is an empty object
|
|
}
|
|
|
|
type MarkedUnreadEventContent struct {
|
|
Unread bool `json:"unread"`
|
|
}
|
|
|
|
type BeeperMuteEventContent struct {
|
|
MutedUntil int64 `json:"muted_until,omitempty"`
|
|
}
|
|
|
|
func (bmec *BeeperMuteEventContent) IsMuted() bool {
|
|
return bmec.MutedUntil < 0 || (bmec.MutedUntil > 0 && bmec.GetMutedUntilTime().After(time.Now()))
|
|
}
|
|
|
|
var MutedForever = time.Date(9999, 12, 31, 23, 59, 59, 999999999, time.UTC)
|
|
|
|
func (bmec *BeeperMuteEventContent) GetMutedUntilTime() time.Time {
|
|
if bmec.MutedUntil < 0 {
|
|
return MutedForever
|
|
} else if bmec.MutedUntil > 0 {
|
|
return time.UnixMilli(bmec.MutedUntil)
|
|
}
|
|
return time.Time{}
|
|
}
|