Refactoring and godocs
This commit is contained in:
@ -20,18 +20,34 @@ import (
|
||||
"maunium.net/go/gomatrix"
|
||||
)
|
||||
|
||||
type Membership string
|
||||
|
||||
// The allowed membership states as specified in spec section 10.5.5.
|
||||
const (
|
||||
MembershipJoin Membership = "join"
|
||||
MembershipLeave Membership = "leave"
|
||||
MembershipInvite Membership = "invite"
|
||||
MembershipKnock Membership = "knock"
|
||||
)
|
||||
|
||||
// Member represents a member in a room.
|
||||
type Member struct {
|
||||
UserID string `json:"-"`
|
||||
Membership string `json:"membership"`
|
||||
DisplayName string `json:"displayname"`
|
||||
AvatarURL string `json:"avatar_url"`
|
||||
// The MXID of the member.
|
||||
UserID string `json:"-"`
|
||||
// The membership status. Defaults to leave.
|
||||
Membership Membership `json:"membership"`
|
||||
// The display name of the user. Defaults to the user ID.
|
||||
DisplayName string `json:"displayname"`
|
||||
// The avatar URL of the user. Defaults to an empty string.
|
||||
AvatarURL string `json:"avatar_url"`
|
||||
}
|
||||
|
||||
// eventToRoomMember converts a m.room.member state event into a Member object.
|
||||
func eventToRoomMember(userID string, event *gomatrix.Event) *Member {
|
||||
if event == nil {
|
||||
return &Member{
|
||||
UserID: userID,
|
||||
Membership: "leave",
|
||||
Membership: MembershipLeave,
|
||||
}
|
||||
}
|
||||
membership, _ := event.Content["membership"].(string)
|
||||
@ -44,7 +60,7 @@ func eventToRoomMember(userID string, event *gomatrix.Event) *Member {
|
||||
|
||||
return &Member{
|
||||
UserID: userID,
|
||||
Membership: membership,
|
||||
Membership: Membership(membership),
|
||||
DisplayName: displayName,
|
||||
AvatarURL: avatarURL,
|
||||
}
|
||||
|
@ -26,11 +26,18 @@ import (
|
||||
type Room struct {
|
||||
*gomatrix.Room
|
||||
|
||||
// The first batch of events that has been fetched for this room.
|
||||
// Used for fetching additional history.
|
||||
PrevBatch string
|
||||
Owner string
|
||||
// The MXID of the user whose session this room was created for.
|
||||
SessionUserID string
|
||||
// MXID -> Member cache calculated from membership events.
|
||||
memberCache map[string]*Member
|
||||
// The first non-SessionUserID member in the room. Calculated at the same time as memberCache.
|
||||
firstMemberCache string
|
||||
// The name of the room. Calculated from the state event name, canonical_alias or alias or the member cache.
|
||||
nameCache string
|
||||
// The topic of the room. Directly fetched from the m.room.topic state event.
|
||||
topicCache string
|
||||
}
|
||||
|
||||
@ -135,7 +142,7 @@ func (room *Room) updateNameFromMembers() {
|
||||
}
|
||||
|
||||
// updateNameCache updates the room display name based on the room state in the order
|
||||
// specified in section 11.2.2.5 of r0.3.0 of the Client-Server API specification.
|
||||
// specified in spec section 11.2.2.5.
|
||||
func (room *Room) updateNameCache() {
|
||||
if len(room.nameCache) == 0 {
|
||||
room.updateNameFromNameEvent()
|
||||
@ -167,7 +174,7 @@ func (room *Room) createMemberCache() map[string]*Member {
|
||||
room.firstMemberCache = ""
|
||||
if events != nil {
|
||||
for userID, event := range events {
|
||||
if len(room.firstMemberCache) == 0 && userID != room.Owner {
|
||||
if len(room.firstMemberCache) == 0 && userID != room.SessionUserID {
|
||||
room.firstMemberCache = userID
|
||||
}
|
||||
member := eventToRoomMember(userID, event)
|
||||
@ -204,7 +211,7 @@ func (room *Room) GetMember(userID string) *Member {
|
||||
// NewRoom creates a new Room with the given ID
|
||||
func NewRoom(roomID, owner string) *Room {
|
||||
return &Room{
|
||||
Room: gomatrix.NewRoom(roomID),
|
||||
Owner: owner,
|
||||
Room: gomatrix.NewRoom(roomID),
|
||||
SessionUserID: owner,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user