Эх сурвалжийг харах

Add Matrix->WhatsApp room name changes

Tulir Asokan 6 жил өмнө
parent
commit
9da7f15e8f
3 өөрчлөгдсөн 38 нэмэгдсэн , 5 устгасан
  1. 1 1
      ROADMAP.md
  2. 36 3
      matrix.go
  3. 1 1
      portal.go

+ 1 - 1
ROADMAP.md

@@ -16,7 +16,7 @@
     * [ ] Leave
     * [ ] Kick
   * [ ] Room metadata changes
-    * [ ] Name
+    * [x] Name
     * [ ] Avatar
     * [ ] Topic
   * [ ] Initial room metadata

+ 36 - 3
matrix.go

@@ -17,11 +17,12 @@
 package main
 
 import (
+	"strings"
+
 	"maunium.net/go/gomatrix"
-	"maunium.net/go/mautrix-whatsapp/types"
-	"maunium.net/go/mautrix-appservice"
 	"maunium.net/go/maulogger"
-	"strings"
+	"maunium.net/go/mautrix-appservice"
+	"maunium.net/go/mautrix-whatsapp/types"
 )
 
 type MatrixHandler struct {
@@ -40,6 +41,9 @@ func NewMatrixHandler(bridge *Bridge) *MatrixHandler {
 	}
 	bridge.EventProcessor.On(gomatrix.EventMessage, handler.HandleMessage)
 	bridge.EventProcessor.On(gomatrix.StateMember, handler.HandleMembership)
+	bridge.EventProcessor.On(gomatrix.StateRoomName, handler.HandleRoomMetadata)
+	bridge.EventProcessor.On(gomatrix.StateRoomAvatar, handler.HandleRoomMetadata)
+	bridge.EventProcessor.On(gomatrix.StateTopic, handler.HandleRoomMetadata)
 	return handler
 }
 
@@ -94,6 +98,35 @@ func (mx *MatrixHandler) HandleMembership(evt *gomatrix.Event) {
 	}
 }
 
+func (mx *MatrixHandler) HandleRoomMetadata(evt *gomatrix.Event) {
+	user := mx.bridge.GetUser(types.MatrixUserID(evt.Sender))
+	if user == nil {
+		return
+	}
+
+	portal := user.GetPortalByMXID(evt.RoomID)
+	if portal == nil || portal.IsPrivateChat() {
+		return
+	}
+
+	var resp <-chan string
+	var err error
+	switch evt.Type {
+	case gomatrix.StateRoomName:
+		resp, err = user.Conn.UpdateGroupSubject(evt.Content.Name, portal.JID)
+	case gomatrix.StateRoomAvatar:
+		return
+	case gomatrix.StateTopic:
+		return
+	}
+	if err != nil {
+		mx.log.Errorln(err)
+	} else {
+		out := <-resp
+		mx.log.Infoln(out)
+	}
+}
+
 func (mx *MatrixHandler) HandleMessage(evt *gomatrix.Event) {
 	roomID := types.MatrixRoomID(evt.RoomID)
 	user := mx.bridge.GetUser(types.MatrixUserID(evt.Sender))

+ 1 - 1
portal.go

@@ -347,7 +347,7 @@ func (portal *Portal) CreateMatrixRoom() error {
 		InitialState: []*gomatrix.Event{{
 			Type: gomatrix.StatePowerLevels,
 			Content: gomatrix.Content{
-				PowerLevels: portal.GetBasePowerLevels(),
+				PowerLevels: *portal.GetBasePowerLevels(),
 			},
 		}},
 	})