소스 검색

add newly created channels to the space

Co-authored-by: clmnin <clament.john.k@gmail.com>
Helder Ferreira 3 년 전
부모
커밋
727b11e7ef
3개의 변경된 파일26개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 1
      main.go
  2. 11 0
      portal.go
  3. 13 2
      user.go

+ 2 - 1
main.go

@@ -179,8 +179,9 @@ type Bridge struct {
 	usersByMXID         map[id.UserID]*User
 	usersByUsername     map[string]*User
 	usersLock           sync.Mutex
-	managementRooms     map[id.RoomID]*User
+	spaceRooms          map[id.RoomID]*User
 	managementRoomsLock sync.Mutex
+	managementRooms     map[id.RoomID]*User
 	portalsByMXID       map[id.RoomID]*Portal
 	portalsByJID        map[database.PortalKey]*Portal
 	portalsLock         sync.Mutex

+ 11 - 0
portal.go

@@ -1141,6 +1141,8 @@ func (portal *Portal) CreateMatrixRoom(user *User, groupInfo *types.GroupInfo, i
 	portal.ensureUserInvited(user)
 	user.syncChatDoublePuppetDetails(portal, true)
 
+	portal.addToSpace(user.getSpaceRoom(), portal.MXID)
+
 	if groupInfo != nil {
 		portal.SyncParticipants(user, groupInfo)
 		if groupInfo.IsAnnounce {
@@ -1176,6 +1178,15 @@ func (portal *Portal) CreateMatrixRoom(user *User, groupInfo *types.GroupInfo, i
 	return nil
 }
 
+func (portal *Portal) addToSpace(spaceID id.RoomID, portalID id.RoomID) {
+
+	parentSpaceContent := make(map[string]interface{})
+	parentSpaceContent["via"] = []string{"matrix.wounn.xyz"}
+
+	portal.log.Errorln("adding room " + portalID + " to the space " + spaceID)
+	portal.MainIntent().SendStateEvent(spaceID, event.Type{Type: "m.space.child", Class: event.StateEventType}, portalID.String(), parentSpaceContent)
+}
+
 func (portal *Portal) IsPrivateChat() bool {
 	return portal.Key.JID.Server == types.DefaultUserServer
 }

+ 13 - 2
user.go

@@ -196,6 +196,8 @@ func (user *User) getSpaceRoom() id.RoomID {
 		invite = append(invite, user.MXID)
 
 		resp, err := user.bridge.Bot.CreateRoom(&mautrix.ReqCreateRoom{
+			Visibility:      "private",
+			Name:            "WhatsApp",
 			Topic:           "WhatsApp bridge Space",
 			Invite:          invite,
 			CreationContent: creationContent,
@@ -207,12 +209,21 @@ func (user *User) getSpaceRoom() id.RoomID {
 		}
 	} else {
 		user.log.Debugln("Space found" + user.SpaceRoom)
+		roomID = user.SpaceRoom
 	}
 	return roomID
 }
 
-func (user *User) setSpaceRoom(roomID id.RoomID) {
-	user.log.Debugln("Space ID to set" + roomID)
+func (user *User) setSpaceRoom(spaceID id.RoomID) {
+	existingUser, ok := user.bridge.spaceRooms[spaceID]
+	if ok {
+		existingUser.SpaceRoom = ""
+		existingUser.Update()
+	}
+
+	user.SpaceRoom = spaceID
+	user.bridge.spaceRooms[user.SpaceRoom] = user
+	user.Update()
 }
 
 func (user *User) GetManagementRoom() id.RoomID {