Update mautrix-go content stuff
This commit is contained in:
		@@ -119,7 +119,6 @@ func (fs *FuzzySearchModal) changeHandler(str string) {
 | 
			
		||||
 | 
			
		||||
func (fs *FuzzySearchModal) OnKeyEvent(event mauview.KeyEvent) bool {
 | 
			
		||||
	highlights := fs.results.GetHighlights()
 | 
			
		||||
	debug.Print("Search key event:", event)
 | 
			
		||||
	switch event.Key() {
 | 
			
		||||
	case tcell.KeyEsc:
 | 
			
		||||
		// Close room finder
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ func (rml roomMemberList) Swap(i, j int) {
 | 
			
		||||
	rml[i], rml[j] = rml[j], rml[i]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ml *MemberList) Update(data map[id.UserID]*rooms.Member, levels *event.PowerLevels) *MemberList {
 | 
			
		||||
func (ml *MemberList) Update(data map[id.UserID]*rooms.Member, levels *event.PowerLevelsEventContent) *MemberList {
 | 
			
		||||
	ml.list = make(roomMemberList, len(data))
 | 
			
		||||
	i := 0
 | 
			
		||||
	highestLevel := math.MinInt32
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,8 @@ const DateFormat = "January _2, 2006"
 | 
			
		||||
const TimeFormat = "15:04:05"
 | 
			
		||||
 | 
			
		||||
func newUIMessage(evt *muksevt.Event, displayname string, renderer MessageRenderer) *UIMessage {
 | 
			
		||||
	msgtype := evt.Content.MsgType
 | 
			
		||||
	msgContent := evt.Content.AsMessage()
 | 
			
		||||
	msgtype := msgContent.MsgType
 | 
			
		||||
	if len(msgtype) == 0 {
 | 
			
		||||
		msgtype = event.MessageType(evt.Type.String())
 | 
			
		||||
	}
 | 
			
		||||
@@ -117,7 +118,7 @@ func newUIMessage(evt *muksevt.Event, displayname string, renderer MessageRender
 | 
			
		||||
		Type:               msgtype,
 | 
			
		||||
		EventID:            evt.ID,
 | 
			
		||||
		TxnID:              evt.Unsigned.TransactionID,
 | 
			
		||||
		Relation:           *evt.Content.GetRelatesTo(),
 | 
			
		||||
		Relation:           *msgContent.GetRelatesTo(),
 | 
			
		||||
		State:              evt.Gomuks.OutgoingState,
 | 
			
		||||
		IsHighlight:        false,
 | 
			
		||||
		IsService:          false,
 | 
			
		||||
 
 | 
			
		||||
@@ -48,11 +48,12 @@ type FileMessage struct {
 | 
			
		||||
 | 
			
		||||
// NewFileMessage creates a new FileMessage object with the provided values and the default state.
 | 
			
		||||
func NewFileMessage(matrix ifc.MatrixContainer, evt *muksevt.Event, displayname string) *UIMessage {
 | 
			
		||||
	url, _ := evt.Content.URL.Parse()
 | 
			
		||||
	thumbnail, _ := evt.Content.GetInfo().ThumbnailURL.Parse()
 | 
			
		||||
	content := evt.Content.AsMessage()
 | 
			
		||||
	url, _ := content.URL.Parse()
 | 
			
		||||
	thumbnail, _ := content.GetInfo().ThumbnailURL.Parse()
 | 
			
		||||
	return newUIMessage(evt, displayname, &FileMessage{
 | 
			
		||||
		Type:      evt.Content.MsgType,
 | 
			
		||||
		Body:      evt.Content.Body,
 | 
			
		||||
		Type:      content.MsgType,
 | 
			
		||||
		Body:      content.Body,
 | 
			
		||||
		URL:       url,
 | 
			
		||||
		Thumbnail: thumbnail,
 | 
			
		||||
		matrix:    matrix,
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,6 @@ import (
 | 
			
		||||
	"github.com/lucasb-eyer/go-colorful"
 | 
			
		||||
	"golang.org/x/net/html"
 | 
			
		||||
 | 
			
		||||
	"maunium.net/go/gomuks/matrix/muksevt"
 | 
			
		||||
	"maunium.net/go/mautrix/event"
 | 
			
		||||
	"maunium.net/go/mautrix/id"
 | 
			
		||||
	"maunium.net/go/tcell"
 | 
			
		||||
@@ -384,10 +383,10 @@ func (parser *htmlParser) Parse(htmlData string) Entity {
 | 
			
		||||
const TabLength = 4
 | 
			
		||||
 | 
			
		||||
// Parse parses a HTML-formatted Matrix event into a UIMessage.
 | 
			
		||||
func Parse(room *rooms.Room, evt *muksevt.Event, senderDisplayname string) Entity {
 | 
			
		||||
	htmlData := evt.Content.FormattedBody
 | 
			
		||||
	if evt.Content.Format != event.FormatHTML {
 | 
			
		||||
		htmlData = strings.Replace(html.EscapeString(evt.Content.Body), "\n", "<br/>", -1)
 | 
			
		||||
func Parse(room *rooms.Room, content *event.MessageEventContent, sender id.UserID, senderDisplayname string) Entity {
 | 
			
		||||
	htmlData := content.FormattedBody
 | 
			
		||||
	if content.Format != event.FormatHTML {
 | 
			
		||||
		htmlData = strings.Replace(html.EscapeString(content.Body), "\n", "<br/>", -1)
 | 
			
		||||
	}
 | 
			
		||||
	htmlData = strings.Replace(htmlData, "\t", strings.Repeat(" ", TabLength), -1)
 | 
			
		||||
 | 
			
		||||
@@ -403,14 +402,14 @@ func Parse(room *rooms.Room, evt *muksevt.Event, senderDisplayname string) Entit
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if evt.Content.MsgType == event.MsgEmote {
 | 
			
		||||
	if content.MsgType == event.MsgEmote {
 | 
			
		||||
		root = &ContainerEntity{
 | 
			
		||||
			BaseEntity: &BaseEntity{
 | 
			
		||||
				Tag: "emote",
 | 
			
		||||
			},
 | 
			
		||||
			Children: []Entity{
 | 
			
		||||
				NewTextEntity("* "),
 | 
			
		||||
				NewTextEntity(senderDisplayname).AdjustStyle(AdjustStyleTextColor(widget.GetHashColor(evt.Sender))),
 | 
			
		||||
				NewTextEntity(senderDisplayname).AdjustStyle(AdjustStyleTextColor(widget.GetHashColor(sender))),
 | 
			
		||||
				NewTextEntity(" "),
 | 
			
		||||
				root,
 | 
			
		||||
			},
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"maunium.net/go/gomuks/debug"
 | 
			
		||||
	"maunium.net/go/gomuks/matrix/muksevt"
 | 
			
		||||
	"maunium.net/go/mautrix/event"
 | 
			
		||||
	"maunium.net/go/mautrix/id"
 | 
			
		||||
@@ -48,10 +49,10 @@ func ParseEvent(matrix ifc.MatrixContainer, mainView ifc.MainView, room *rooms.R
 | 
			
		||||
	if msg == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if len(evt.Content.GetReplyTo()) > 0 {
 | 
			
		||||
		if replyToMsg := getCachedEvent(mainView, room.ID, evt.Content.GetReplyTo()); replyToMsg != nil {
 | 
			
		||||
	if content, ok := evt.Content.Parsed.(*event.MessageEventContent); ok && len(content.GetReplyTo()) > 0 {
 | 
			
		||||
		if replyToMsg := getCachedEvent(mainView, room.ID, content.GetReplyTo()); replyToMsg != nil {
 | 
			
		||||
			msg.ReplyTo = replyToMsg.Clone()
 | 
			
		||||
		} else if replyToEvt, _ := matrix.GetEvent(room, evt.Content.GetReplyTo()); replyToEvt != nil {
 | 
			
		||||
		} else if replyToEvt, _ := matrix.GetEvent(room, content.GetReplyTo()); replyToEvt != nil {
 | 
			
		||||
			if replyToMsg := directParseEvent(matrix, room, replyToEvt); replyToMsg != nil {
 | 
			
		||||
				msg.ReplyTo = replyToMsg
 | 
			
		||||
				msg.ReplyTo.Reactions = nil
 | 
			
		||||
@@ -74,48 +75,49 @@ func directParseEvent(matrix ifc.MatrixContainer, room *rooms.Room, evt *muksevt
 | 
			
		||||
	if evt.Unsigned.RedactedBecause != nil || evt.Type == event.EventRedaction {
 | 
			
		||||
		return NewRedactedMessage(evt, displayname)
 | 
			
		||||
	}
 | 
			
		||||
	switch evt.Type {
 | 
			
		||||
	case event.EventSticker:
 | 
			
		||||
		evt.Content.MsgType = event.MsgImage
 | 
			
		||||
		fallthrough
 | 
			
		||||
	case event.EventMessage:
 | 
			
		||||
	switch content := evt.Content.Parsed.(type) {
 | 
			
		||||
	case *event.MessageEventContent:
 | 
			
		||||
		if evt.Type == event.EventSticker {
 | 
			
		||||
			content.MsgType = event.MsgImage
 | 
			
		||||
		}
 | 
			
		||||
		return ParseMessage(matrix, room, evt, displayname)
 | 
			
		||||
	case event.EventEncrypted:
 | 
			
		||||
	case *event.EncryptedEventContent:
 | 
			
		||||
		return NewExpandedTextMessage(evt, displayname, tstring.NewStyleTString("Encrypted messages are not yet supported", tcell.StyleDefault.Italic(true)))
 | 
			
		||||
	case event.StateTopic, event.StateRoomName, event.StateAliases, event.StateCanonicalAlias:
 | 
			
		||||
	case *event.TopicEventContent, *event.RoomNameEventContent, *event.CanonicalAliasEventContent:
 | 
			
		||||
		return ParseStateEvent(evt, displayname)
 | 
			
		||||
	case event.StateMember:
 | 
			
		||||
	case *event.MemberEventContent:
 | 
			
		||||
		return ParseMembershipEvent(room, evt)
 | 
			
		||||
	default:
 | 
			
		||||
		debug.Printf("Unknown event content type %T in directParseEvent", content)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ParseStateEvent(evt *muksevt.Event, displayname string) *UIMessage {
 | 
			
		||||
	text := tstring.NewColorTString(displayname, widget.GetHashColor(evt.Sender))
 | 
			
		||||
	switch evt.Type {
 | 
			
		||||
	case event.StateTopic:
 | 
			
		||||
		if len(evt.Content.Topic) == 0 {
 | 
			
		||||
	switch content := evt.Content.Parsed.(type) {
 | 
			
		||||
	case *event.TopicEventContent:
 | 
			
		||||
		if len(content.Topic) == 0 {
 | 
			
		||||
			text = text.AppendColor(" removed the topic.", tcell.ColorGreen)
 | 
			
		||||
		} else {
 | 
			
		||||
			text = text.AppendColor(" changed the topic to ", tcell.ColorGreen).
 | 
			
		||||
				AppendStyle(evt.Content.Topic, tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendStyle(content.Topic, tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendColor(".", tcell.ColorGreen)
 | 
			
		||||
		}
 | 
			
		||||
	case event.StateRoomName:
 | 
			
		||||
		if len(evt.Content.Name) == 0 {
 | 
			
		||||
	case *event.RoomNameEventContent:
 | 
			
		||||
		if len(content.Name) == 0 {
 | 
			
		||||
			text = text.AppendColor(" removed the room name.", tcell.ColorGreen)
 | 
			
		||||
		} else {
 | 
			
		||||
			text = text.AppendColor(" changed the room name to ", tcell.ColorGreen).
 | 
			
		||||
				AppendStyle(evt.Content.Name, tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendStyle(content.Name, tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendColor(".", tcell.ColorGreen)
 | 
			
		||||
		}
 | 
			
		||||
	case event.StateCanonicalAlias:
 | 
			
		||||
		if len(evt.Content.Alias) == 0 {
 | 
			
		||||
	case *event.CanonicalAliasEventContent:
 | 
			
		||||
		if len(content.Alias) == 0 {
 | 
			
		||||
			text = text.AppendColor(" removed the main address of the room.", tcell.ColorGreen)
 | 
			
		||||
		} else {
 | 
			
		||||
			text = text.AppendColor(" changed the main address of the room to ", tcell.ColorGreen).
 | 
			
		||||
				AppendStyle(string(evt.Content.Alias), tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendStyle(string(content.Alias), tcell.StyleDefault.Underline(true)).
 | 
			
		||||
				AppendColor(".", tcell.ColorGreen)
 | 
			
		||||
		}
 | 
			
		||||
	//case event.StateAliases:
 | 
			
		||||
@@ -125,19 +127,20 @@ func ParseStateEvent(evt *muksevt.Event, displayname string) *UIMessage {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ParseMessage(matrix ifc.MatrixContainer, room *rooms.Room, evt *muksevt.Event, displayname string) *UIMessage {
 | 
			
		||||
	if len(evt.Content.GetReplyTo()) > 0 {
 | 
			
		||||
		evt.Content.RemoveReplyFallback()
 | 
			
		||||
	content := evt.Content.AsMessage()
 | 
			
		||||
	if len(content.GetReplyTo()) > 0 {
 | 
			
		||||
		content.RemoveReplyFallback()
 | 
			
		||||
	}
 | 
			
		||||
	if len(evt.Gomuks.Edits) > 0 {
 | 
			
		||||
		evt.Content = *evt.Gomuks.Edits[len(evt.Gomuks.Edits)-1].Content.NewContent
 | 
			
		||||
		content = evt.Gomuks.Edits[len(evt.Gomuks.Edits)-1].Content.AsMessage().NewContent
 | 
			
		||||
	}
 | 
			
		||||
	switch evt.Content.MsgType {
 | 
			
		||||
	switch content.MsgType {
 | 
			
		||||
	case event.MsgText, event.MsgNotice, event.MsgEmote:
 | 
			
		||||
		if evt.Content.Format == event.FormatHTML {
 | 
			
		||||
			return NewHTMLMessage(evt, displayname, html.Parse(room, evt, displayname))
 | 
			
		||||
		if content.Format == event.FormatHTML {
 | 
			
		||||
			return NewHTMLMessage(evt, displayname, html.Parse(room, content, evt.Sender, displayname))
 | 
			
		||||
		}
 | 
			
		||||
		evt.Content.Body = strings.Replace(evt.Content.Body, "\t", "    ", -1)
 | 
			
		||||
		return NewTextMessage(evt, displayname, evt.Content.Body)
 | 
			
		||||
		content.Body = strings.Replace(content.Body, "\t", "    ", -1)
 | 
			
		||||
		return NewTextMessage(evt, displayname, content.Body)
 | 
			
		||||
	case event.MsgImage, event.MsgVideo, event.MsgAudio, event.MsgFile:
 | 
			
		||||
		msg := NewFileMessage(matrix, evt, displayname)
 | 
			
		||||
		if !matrix.Preferences().DisableDownloads {
 | 
			
		||||
@@ -149,8 +152,8 @@ func ParseMessage(matrix ifc.MatrixContainer, room *rooms.Room, evt *muksevt.Eve
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getMembershipChangeMessage(evt *muksevt.Event, membership, prevMembership event.Membership, senderDisplayname, displayname, prevDisplayname string) (sender string, text tstring.TString) {
 | 
			
		||||
	switch membership {
 | 
			
		||||
func getMembershipChangeMessage(evt *muksevt.Event, content *event.MemberEventContent, prevMembership event.Membership, senderDisplayname, displayname, prevDisplayname string) (sender string, text tstring.TString) {
 | 
			
		||||
	switch content.Membership {
 | 
			
		||||
	case "invite":
 | 
			
		||||
		sender = "---"
 | 
			
		||||
		text = tstring.NewColorTString(fmt.Sprintf("%s invited %s.", senderDisplayname, displayname), tcell.ColorGreen)
 | 
			
		||||
@@ -171,7 +174,7 @@ func getMembershipChangeMessage(evt *muksevt.Event, membership, prevMembership e
 | 
			
		||||
				text = tstring.NewColorTString(fmt.Sprintf("%s unbanned %s", senderDisplayname, displayname), tcell.ColorGreen)
 | 
			
		||||
				text.Colorize(len(senderDisplayname)+len(" unbanned "), len(displayname), widget.GetHashColor(evt.StateKey))
 | 
			
		||||
			} else {
 | 
			
		||||
				text = tstring.NewColorTString(fmt.Sprintf("%s kicked %s: %s", senderDisplayname, displayname, evt.Content.Reason), tcell.ColorRed)
 | 
			
		||||
				text = tstring.NewColorTString(fmt.Sprintf("%s kicked %s: %s", senderDisplayname, displayname, content.Reason), tcell.ColorRed)
 | 
			
		||||
				text.Colorize(len(senderDisplayname)+len(" kicked "), len(displayname), widget.GetHashColor(evt.StateKey))
 | 
			
		||||
			}
 | 
			
		||||
			text.Colorize(0, len(senderDisplayname), widget.GetHashColor(evt.Sender))
 | 
			
		||||
@@ -187,7 +190,7 @@ func getMembershipChangeMessage(evt *muksevt.Event, membership, prevMembership e
 | 
			
		||||
			text.Colorize(0, len(displayname), widget.GetHashColor(evt.StateKey))
 | 
			
		||||
		}
 | 
			
		||||
	case "ban":
 | 
			
		||||
		text = tstring.NewColorTString(fmt.Sprintf("%s banned %s: %s", senderDisplayname, displayname, evt.Content.Reason), tcell.ColorRed)
 | 
			
		||||
		text = tstring.NewColorTString(fmt.Sprintf("%s banned %s: %s", senderDisplayname, displayname, content.Reason), tcell.ColorRed)
 | 
			
		||||
		text.Colorize(len(senderDisplayname)+len(" banned "), len(displayname), widget.GetHashColor(evt.StateKey))
 | 
			
		||||
		text.Colorize(0, len(senderDisplayname), widget.GetHashColor(evt.Sender))
 | 
			
		||||
	}
 | 
			
		||||
@@ -201,8 +204,8 @@ func getMembershipEventContent(room *rooms.Room, evt *muksevt.Event) (sender str
 | 
			
		||||
		senderDisplayname = member.Displayname
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	membership := evt.Content.Membership
 | 
			
		||||
	displayname := evt.Content.Displayname
 | 
			
		||||
	content := evt.Content.AsMember()
 | 
			
		||||
	displayname := content.Displayname
 | 
			
		||||
	if len(displayname) == 0 {
 | 
			
		||||
		displayname = *evt.StateKey
 | 
			
		||||
	}
 | 
			
		||||
@@ -210,15 +213,16 @@ func getMembershipEventContent(room *rooms.Room, evt *muksevt.Event) (sender str
 | 
			
		||||
	prevMembership := event.MembershipLeave
 | 
			
		||||
	prevDisplayname := *evt.StateKey
 | 
			
		||||
	if evt.Unsigned.PrevContent != nil {
 | 
			
		||||
		prevMembership = evt.Unsigned.PrevContent.Membership
 | 
			
		||||
		prevDisplayname = evt.Unsigned.PrevContent.Displayname
 | 
			
		||||
		prevContent := evt.Unsigned.PrevContent.AsMember()
 | 
			
		||||
		prevMembership = prevContent.Membership
 | 
			
		||||
		prevDisplayname = prevContent.Displayname
 | 
			
		||||
		if len(prevDisplayname) == 0 {
 | 
			
		||||
			prevDisplayname = *evt.StateKey
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if membership != prevMembership {
 | 
			
		||||
		sender, text = getMembershipChangeMessage(evt, membership, prevMembership, senderDisplayname, displayname, prevDisplayname)
 | 
			
		||||
	if content.Membership != prevMembership {
 | 
			
		||||
		sender, text = getMembershipChangeMessage(evt, content, prevMembership, senderDisplayname, displayname, prevDisplayname)
 | 
			
		||||
	} else if displayname != prevDisplayname {
 | 
			
		||||
		sender = "---"
 | 
			
		||||
		color := widget.GetHashColor(evt.StateKey)
 | 
			
		||||
 
 | 
			
		||||
@@ -480,8 +480,8 @@ func (view *RoomView) SetEditing(evt *muksevt.Event) {
 | 
			
		||||
		view.editing = evt
 | 
			
		||||
		// replying should never be non-nil when SetEditing, but do this just to be safe
 | 
			
		||||
		view.replying = nil
 | 
			
		||||
		text := view.editing.Content.Body
 | 
			
		||||
		if view.editing.Content.MsgType == event.MsgEmote {
 | 
			
		||||
		text := view.editing.Content.AsMessage().Body
 | 
			
		||||
		if view.editing.Content.AsMessage().MsgType == event.MsgEmote {
 | 
			
		||||
			text = "/me " + text
 | 
			
		||||
		}
 | 
			
		||||
		view.input.SetText(text)
 | 
			
		||||
@@ -497,11 +497,11 @@ func (view *RoomView) filterOwnOnly(evt *muksevt.Event) bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) filterMediaOnly(evt *muksevt.Event) bool {
 | 
			
		||||
	return evt.Type == event.EventMessage && (
 | 
			
		||||
		evt.Content.MsgType == event.MsgFile ||
 | 
			
		||||
			evt.Content.MsgType == event.MsgImage ||
 | 
			
		||||
			evt.Content.MsgType == event.MsgAudio ||
 | 
			
		||||
			evt.Content.MsgType == event.MsgVideo)
 | 
			
		||||
	content, ok := evt.Content.Parsed.(*event.MessageEventContent)
 | 
			
		||||
	return ok && content.MsgType == event.MsgFile ||
 | 
			
		||||
		content.MsgType == event.MsgImage ||
 | 
			
		||||
		content.MsgType == event.MsgAudio ||
 | 
			
		||||
		content.MsgType == event.MsgVideo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) findMessage(current *muksevt.Event, forward bool, allow findFilter) *messages.UIMessage {
 | 
			
		||||
@@ -660,13 +660,11 @@ func (view *RoomView) SendReaction(eventID id.EventID, reaction string) {
 | 
			
		||||
		Event: &event.Event{
 | 
			
		||||
			Type:   event.EventReaction,
 | 
			
		||||
			RoomID: view.Room.ID,
 | 
			
		||||
			Content: event.Content{
 | 
			
		||||
				RelatesTo: &event.RelatesTo{
 | 
			
		||||
					Type:    event.RelAnnotation,
 | 
			
		||||
					EventID: eventID,
 | 
			
		||||
					Key:     reaction,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			Content: event.Content{Parsed: event.ReactionEventContent{RelatesTo: event.RelatesTo{
 | 
			
		||||
				Type:    event.RelAnnotation,
 | 
			
		||||
				EventID: eventID,
 | 
			
		||||
				Key:     reaction,
 | 
			
		||||
			}}},
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -745,9 +743,9 @@ func (view *RoomView) Update() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *RoomView) UpdateUserList() {
 | 
			
		||||
	pls := &event.PowerLevels{}
 | 
			
		||||
	pls := &event.PowerLevelsEventContent{}
 | 
			
		||||
	if plEvent := view.Room.GetStateEvent(event.StatePowerLevels, ""); plEvent != nil {
 | 
			
		||||
		pls = plEvent.Content.GetPowerLevels()
 | 
			
		||||
		pls = plEvent.Content.AsPowerLevels()
 | 
			
		||||
	}
 | 
			
		||||
	view.userList.Update(view.Room.GetMembers(), pls)
 | 
			
		||||
	view.userListLoaded = true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user