Fix room list updating when joining/leaving
This commit is contained in:
parent
9ad3a95ba6
commit
c600ce68a2
@ -31,7 +31,7 @@ type MatrixContainer interface {
|
||||
SendMessage(roomID, msgtype, message string) (string, error)
|
||||
SendMarkdownMessage(roomID, msgtype, message string) (string, error)
|
||||
SendTyping(roomID string, typing bool)
|
||||
JoinRoom(roomID string) error
|
||||
JoinRoom(roomID string) (*rooms.Room, error)
|
||||
LeaveRoom(roomID string) error
|
||||
GetHistory(roomID, prevBatch string, limit int) ([]gomatrix.Event, string, error)
|
||||
GetRoom(roomID string) *rooms.Room
|
||||
|
@ -294,7 +294,7 @@ func (c *Container) processOwnMembershipChange(evt *gomatrix.Event) {
|
||||
}
|
||||
}
|
||||
|
||||
// HandleMembership is the event handler for the m.room.membership state event.
|
||||
// HandleMembership is the event handler for the m.room.member state event.
|
||||
func (c *Container) HandleMembership(source EventSource, evt *gomatrix.Event) {
|
||||
if !c.config.Session.InitialSyncDone && source == EventSourceLeave {
|
||||
return
|
||||
@ -418,9 +418,9 @@ func (c *Container) SendTyping(roomID string, typing bool) {
|
||||
}
|
||||
|
||||
// JoinRoom makes the current user try to join the given room.
|
||||
func (c *Container) JoinRoom(roomID string) error {
|
||||
func (c *Container) JoinRoom(roomID string) (*rooms.Room, error) {
|
||||
if len(roomID) == 0 {
|
||||
return fmt.Errorf("invalid room ID")
|
||||
return nil, fmt.Errorf("invalid room ID")
|
||||
}
|
||||
|
||||
server := ""
|
||||
@ -428,12 +428,15 @@ func (c *Container) JoinRoom(roomID string) error {
|
||||
server = roomID[strings.Index(roomID, ":")+1:]
|
||||
}
|
||||
|
||||
_, err := c.client.JoinRoom(roomID, server, nil)
|
||||
resp, err := c.client.JoinRoom(roomID, server, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil
|
||||
room := c.GetRoom(resp.RoomID)
|
||||
room.HasLeft = false
|
||||
|
||||
return room, nil
|
||||
}
|
||||
|
||||
// LeaveRoom makes the current user leave the given room.
|
||||
@ -447,20 +450,11 @@ func (c *Container) LeaveRoom(roomID string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
room := c.GetRoom(roomID)
|
||||
room.HasLeft = true
|
||||
return nil
|
||||
}
|
||||
|
||||
// getState requests the state of the given room.
|
||||
func (c *Container) getState(roomID string) []*gomatrix.Event {
|
||||
content := make([]*gomatrix.Event, 0)
|
||||
err := c.client.StateEvent(roomID, "", "", &content)
|
||||
if err != nil {
|
||||
debug.Print("Error getting state of", roomID, err)
|
||||
return nil
|
||||
}
|
||||
return content
|
||||
}
|
||||
|
||||
// GetHistory fetches room history.
|
||||
func (c *Container) GetHistory(roomID, prevBatch string, limit int) ([]gomatrix.Event, string, error) {
|
||||
resp, err := c.client.Messages(roomID, prevBatch, "", 'b', limit)
|
||||
@ -471,19 +465,8 @@ func (c *Container) GetHistory(roomID, prevBatch string, limit int) ([]gomatrix.
|
||||
}
|
||||
|
||||
// GetRoom gets the room instance stored in the session.
|
||||
//
|
||||
// If the room doesn't have any state events stored, its state will be updated.
|
||||
func (c *Container) GetRoom(roomID string) *rooms.Room {
|
||||
room := c.config.Session.GetRoom(roomID)
|
||||
if room != nil && len(room.State) == 0 {
|
||||
/*events := c.getState(room.ID)
|
||||
if events != nil {
|
||||
for _, event := range events {
|
||||
room.UpdateState(event)
|
||||
}
|
||||
}*/
|
||||
}
|
||||
return room
|
||||
return c.config.Session.GetRoom(roomID)
|
||||
}
|
||||
|
||||
var mxcRegex = regexp.MustCompile("mxc://(.+)/(.+)")
|
||||
|
@ -150,7 +150,7 @@ func (s *GomuksSyncer) OnFailedSync(res *gomatrix.RespSync, err error) (time.Dur
|
||||
func (s *GomuksSyncer) GetFilterJSON(userID string) json.RawMessage {
|
||||
return json.RawMessage(`{
|
||||
"room": {
|
||||
"include_leave": true,
|
||||
"include_leave": false,
|
||||
"state": {
|
||||
"types": [
|
||||
"m.room.member",
|
||||
|
@ -137,5 +137,5 @@ func ParseMembershipEvent(room *rooms.Room, evt *gomatrix.Event) messages.UIMess
|
||||
}
|
||||
|
||||
ts := unixToTime(evt.Timestamp)
|
||||
return messages.NewExpandedTextMessage(evt.ID, evt.Sender, displayname, "m.room.membership", text, ts)
|
||||
return messages.NewExpandedTextMessage(evt.ID, evt.Sender, displayname, "m.room.member", text, ts)
|
||||
}
|
||||
|
@ -152,13 +152,21 @@ func (view *MainView) HandleCommand(roomView *RoomView, command string, args []s
|
||||
case "/panic":
|
||||
panic("This is a test panic.")
|
||||
case "/part", "/leave":
|
||||
debug.Print("Leave room result:", view.matrix.LeaveRoom(roomView.Room.ID))
|
||||
err := view.matrix.LeaveRoom(roomView.Room.ID)
|
||||
debug.Print("Leave room error:", err)
|
||||
if err == nil {
|
||||
view.RemoveRoom(roomView.Room.ID)
|
||||
}
|
||||
case "/join":
|
||||
if len(args) == 0 {
|
||||
roomView.AddServiceMessage("Usage: /join <room>")
|
||||
break
|
||||
}
|
||||
debug.Print("Join room result:", view.matrix.JoinRoom(args[0]))
|
||||
room, err := view.matrix.JoinRoom(args[0])
|
||||
debug.Print("Join room error:", err)
|
||||
if err == nil {
|
||||
view.AddRoom(room.ID)
|
||||
}
|
||||
default:
|
||||
roomView.AddServiceMessage("Unknown command.")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user