fix the issue that may duplicate create room on matrix side

This commit is contained in:
zhaoYangguang 2021-12-15 16:25:17 +08:00
parent 1d58ca3270
commit 2d03904646
3 changed files with 13 additions and 9 deletions

View File

@ -1072,6 +1072,7 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
HistoryDisclosed: "true", HistoryDisclosed: "true",
Topic: roomNameEvent.Name, Topic: roomNameEvent.Name,
} }
ce.User.currentCreateRoomName = roomNameEvent.Name
handler.log.Debugln("Create Group", roomNameEvent.Name, "with", selfMembers, participants) handler.log.Debugln("Create Group", roomNameEvent.Name, "with", selfMembers, participants)
err = ce.User.Conn.HandleGroupCreate(selfMembers) err = ce.User.Conn.HandleGroupCreate(selfMembers)
if err != nil { if err != nil {
@ -1087,6 +1088,7 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
}) })
} }
conversationId, ok := <-ce.User.Conn.CreateChan conversationId, ok := <-ce.User.Conn.CreateChan
handler.log.Debugln("Create Group: conversationId=", conversationId)
if ok { if ok {
portal := handler.bridge.GetPortalByJID(database.GroupPortalKey(conversationId)) portal := handler.bridge.GetPortalByJID(database.GroupPortalKey(conversationId))
portal.roomCreateLock.Lock() portal.roomCreateLock.Lock()
@ -1105,9 +1107,11 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
} }
portal.Encrypted = true portal.Encrypted = true
} }
handler.log.Debugln("Create Group: before update protal")
portal.Update() portal.Update()
portal.UpdateBridgeInfo() portal.UpdateBridgeInfo()
ce.User.currentCreateRoomName = ""
handler.log.Debugln("Create Group: after update protal")
err = ce.User.Conn.AddMember(participantMembers, conversationId) err = ce.User.Conn.AddMember(participantMembers, conversationId)
ce.Reply("Successfully created Skype group %s", portal.Key.JID) ce.Reply("Successfully created Skype group %s", portal.Key.JID)

View File

@ -1101,10 +1101,7 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
if err := intent.EnsureRegistered(); err != nil { if err := intent.EnsureRegistered(); err != nil {
return err return err
} }
portal.log.Debugln("Creating Matrix room: user.MXID=%s, portal.Key.JID=%s", user.MXID, portal.Key.JID)
portal.log.Infoln("Creating Matrix room. Info source user.MXID:", user.MXID)
portal.log.Infoln("Creating Matrix room. Info source portal.Key.JID:", portal.Key.JID)
var metadata *skypeExt.GroupInfo var metadata *skypeExt.GroupInfo
if portal.IsPrivateChat() { if portal.IsPrivateChat() {
puppet := portal.bridge.GetPuppetByJID(portal.Key.JID + skypeExt.NewUserSuffix) puppet := portal.bridge.GetPuppetByJID(portal.Key.JID + skypeExt.NewUserSuffix)
@ -1134,9 +1131,7 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
} }
if noRoomTopic { if noRoomTopic {
for index, participant := range metadata.Participants { for index, participant := range metadata.Participants {
fmt.Println() portal.log.Debugfln("metadata.Participants2: %+v", participant)
fmt.Printf("metadata.Participants2: %+v", participant)
fmt.Println()
if participant.JID == user.JID { if participant.JID == user.JID {
continue continue
@ -1157,6 +1152,9 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
portal.Name = portalName portal.Name = portalName
} else { } else {
portal.Name = metadata.Name portal.Name = metadata.Name
if (user.currentCreateRoomName == portal.Name && portal.Name != "") {
return errors.New("It looks like a room is being created in the matrix using command 'create', so there is no need to create a new room here.")
}
} }
// portal.Topic = metadata.Topic // portal.Topic = metadata.Topic
portal.Topic = "" portal.Topic = ""

View File

@ -57,6 +57,7 @@ type User struct {
mgmtCreateLock sync.Mutex mgmtCreateLock sync.Mutex
contactsPresence map[string]*skypeExt.Presence contactsPresence map[string]*skypeExt.Presence
currentCreateRoomName string
} }
func (bridge *Bridge) GetUserByMXID(userID id.UserID) *User { func (bridge *Bridge) GetUserByMXID(userID id.UserID) *User {
@ -873,9 +874,10 @@ func (user *User) HandleChatUpdate(cmd skype.Resource) {
case skypeExt.ChatMemberAdd: case skypeExt.ChatMemberAdd:
user.log.Debugfln("chat member add") user.log.Debugfln("chat member add")
if len(portal.MXID) == 0 { if len(portal.MXID) == 0 {
user.log.Debugfln("seems no room for chat member add, start create a new matrix room")
err := portal.CreateMatrixRoom(user) err := portal.CreateMatrixRoom(user)
if err != nil { if err != nil {
fmt.Println("create room failed") user.log.Debugln(err.Error())
} }
} }
go portal.membershipAdd(cmd.Content) go portal.membershipAdd(cmd.Content)