Changeset 499 in code for trunk/upstream.go


Ignore:
Timestamp:
Apr 13, 2021, 5:11:05 PM (4 years ago)
Author:
contact
Message:

Relay detached channel backlog as BouncerServ NOTICE if necessary

Instead of ignoring detached channels wehn replaying backlog,
process them as usual and relay messages as BouncerServ NOTICEs
if necessary. Advance the delivery receipts as if the channel was
attached.

Closes: https://todo.sr.ht/~emersion/soju/98

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r498 r499  
    392392                        if ch != nil {
    393393                                if ch.Detached {
    394                                         uc.handleDetachedMessage(msg.Prefix.Name, text, ch)
     394                                        uc.handleDetachedMessage(ch, msg)
    395395                                }
    396396
    397                                 highlight := msg.Prefix.Name != uc.nick && isHighlight(text, uc.nick)
     397                                highlight := uc.network.isHighlight(msg)
    398398                                if ch.DetachOn == FilterMessage || ch.DetachOn == FilterDefault || (ch.DetachOn == FilterHighlight && highlight) {
    399399                                        uc.updateChannelAutoDetach(target)
     
    14381438}
    14391439
    1440 func (uc *upstreamConn) handleDetachedMessage(sender string, text string, ch *Channel) {
    1441         highlight := sender != uc.nick && isHighlight(text, uc.nick)
    1442         if ch.RelayDetached == FilterMessage || ((ch.RelayDetached == FilterHighlight || ch.RelayDetached == FilterDefault) && highlight) {
     1440func (uc *upstreamConn) handleDetachedMessage(ch *Channel, msg *irc.Message) {
     1441        if uc.network.detachedMessageNeedsRelay(ch, msg) {
    14431442                uc.forEachDownstream(func(dc *downstreamConn) {
    1444                         if highlight {
    1445                                 sendServiceNOTICE(dc, fmt.Sprintf("highlight in %v: <%v> %v", dc.marshalEntity(uc.network, ch.Name), sender, text))
    1446                         } else {
    1447                                 sendServiceNOTICE(dc, fmt.Sprintf("message in %v: <%v> %v", dc.marshalEntity(uc.network, ch.Name), sender, text))
    1448                         }
    1449                 })
    1450         }
    1451         if ch.ReattachOn == FilterMessage || (ch.ReattachOn == FilterHighlight && highlight) {
     1443                        dc.relayDetachedMessage(uc.network, msg)
     1444                })
     1445        }
     1446        if ch.ReattachOn == FilterMessage || (ch.ReattachOn == FilterHighlight && uc.network.isHighlight(msg)) {
    14521447                uc.network.attach(ch)
    14531448                if err := uc.srv.db.StoreChannel(uc.network.ID, ch); err != nil {
     
    17441739        // Don't forward messages if it's a detached channel
    17451740        ch := uc.network.channels.Value(target)
    1746         if ch != nil && ch.Detached {
    1747                 return
    1748         }
     1741        detached := ch != nil && ch.Detached
    17491742
    17501743        uc.forEachDownstream(func(dc *downstreamConn) {
    1751                 if dc != origin || dc.caps["echo-message"] {
     1744                if !detached && (dc != origin || dc.caps["echo-message"]) {
    17521745                        dc.sendMessageWithID(dc.marshalMessage(msg, uc.network), msgID)
    17531746                } else {
Note: See TracChangeset for help on using the changeset viewer.