소스 검색

Merge incoming receipt and message channels

Otherwise receipts after downtime might be handled before the messages
those receipts point at.
Tulir Asokan 3 년 전
부모
커밋
0665c74cce
2개의 변경된 파일4개의 추가작업 그리고 10개의 파일을 삭제
  1. 3 9
      portal.go
  2. 1 1
      user.go

+ 3 - 9
portal.go

@@ -144,7 +144,6 @@ func (bridge *Bridge) newBlankPortal(key database.PortalKey) *Portal {
 		log:    bridge.Log.Sub(fmt.Sprintf("Portal/%s", key)),
 		log:    bridge.Log.Sub(fmt.Sprintf("Portal/%s", key)),
 
 
 		messages:       make(chan PortalMessage, bridge.Config.Bridge.PortalMessageBuffer),
 		messages:       make(chan PortalMessage, bridge.Config.Bridge.PortalMessageBuffer),
-		receipts:       make(chan PortalReceipt, bridge.Config.Bridge.PortalMessageBuffer),
 		matrixMessages: make(chan PortalMatrixMessage, bridge.Config.Bridge.PortalMessageBuffer),
 		matrixMessages: make(chan PortalMatrixMessage, bridge.Config.Bridge.PortalMessageBuffer),
 		mediaRetries:   make(chan PortalMediaRetry, bridge.Config.Bridge.PortalMessageBuffer),
 		mediaRetries:   make(chan PortalMediaRetry, bridge.Config.Bridge.PortalMessageBuffer),
 
 
@@ -180,15 +179,11 @@ type fakeMessage struct {
 type PortalMessage struct {
 type PortalMessage struct {
 	evt           *events.Message
 	evt           *events.Message
 	undecryptable *events.UndecryptableMessage
 	undecryptable *events.UndecryptableMessage
+	receipt       *events.Receipt
 	fake          *fakeMessage
 	fake          *fakeMessage
 	source        *User
 	source        *User
 }
 }
 
 
-type PortalReceipt struct {
-	evt    *events.Receipt
-	source *User
-}
-
 type PortalMatrixMessage struct {
 type PortalMatrixMessage struct {
 	evt  *event.Event
 	evt  *event.Event
 	user *User
 	user *User
@@ -225,7 +220,6 @@ type Portal struct {
 	currentlyTypingLock sync.Mutex
 	currentlyTypingLock sync.Mutex
 
 
 	messages       chan PortalMessage
 	messages       chan PortalMessage
-	receipts       chan PortalReceipt
 	matrixMessages chan PortalMatrixMessage
 	matrixMessages chan PortalMatrixMessage
 	mediaRetries   chan PortalMediaRetry
 	mediaRetries   chan PortalMediaRetry
 
 
@@ -249,6 +243,8 @@ func (portal *Portal) handleMessageLoopItem(msg PortalMessage) {
 	}
 	}
 	if msg.evt != nil {
 	if msg.evt != nil {
 		portal.handleMessage(msg.source, msg.evt)
 		portal.handleMessage(msg.source, msg.evt)
+	} else if msg.receipt != nil {
+		portal.handleReceipt(msg.receipt, msg.source)
 	} else if msg.undecryptable != nil {
 	} else if msg.undecryptable != nil {
 		portal.handleUndecryptableMessage(msg.source, msg.undecryptable)
 		portal.handleUndecryptableMessage(msg.source, msg.undecryptable)
 	} else if msg.fake != nil {
 	} else if msg.fake != nil {
@@ -313,8 +309,6 @@ func (portal *Portal) handleMessageLoop() {
 		select {
 		select {
 		case msg := <-portal.messages:
 		case msg := <-portal.messages:
 			portal.handleMessageLoopItem(msg)
 			portal.handleMessageLoopItem(msg)
-		case receipt := <-portal.receipts:
-			portal.handleReceipt(receipt.evt, receipt.source)
 		case msg := <-portal.matrixMessages:
 		case msg := <-portal.matrixMessages:
 			portal.handleMatrixMessageLoopItem(msg)
 			portal.handleMatrixMessageLoopItem(msg)
 		case retry := <-portal.mediaRetries:
 		case retry := <-portal.mediaRetries:

+ 1 - 1
user.go

@@ -1019,7 +1019,7 @@ func (user *User) handleReceipt(receipt *events.Receipt) {
 	if portal == nil || len(portal.MXID) == 0 {
 	if portal == nil || len(portal.MXID) == 0 {
 		return
 		return
 	}
 	}
-	portal.receipts <- PortalReceipt{evt: receipt, source: user}
+	portal.messages <- PortalMessage{receipt: receipt, source: user}
 }
 }
 
 
 func makeReadMarkerContent(eventID id.EventID, doublePuppet bool) CustomReadMarkers {
 func makeReadMarkerContent(eventID id.EventID, doublePuppet bool) CustomReadMarkers {