Changeset 553 in code for trunk


Ignore:
Timestamp:
Jun 10, 2021, 9:17:00 AM (4 years ago)
Author:
greg
Message:

Forward user mode changes in single-upstream mode

References: https://todo.sr.ht/~emersion/soju/20

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r552 r553  
    11031103                dc.SendMessage(msg)
    11041104        }
     1105        if uc := dc.upstream(); uc != nil {
     1106                dc.SendMessage(&irc.Message{
     1107                        Prefix:  dc.srv.prefix(),
     1108                        Command: irc.RPL_UMODEIS,
     1109                        Params:  []string{dc.nick, string(uc.modes)},
     1110                })
     1111        }
    11051112        dc.SendMessage(&irc.Message{
    11061113                Prefix:  dc.srv.prefix(),
     
    16021609                                })
    16031610                        } else {
    1604                                 // TODO: only do this in multi-upstream mode
     1611                                var userMode string
     1612                                if uc := dc.upstream(); uc != nil {
     1613                                        userMode = string(uc.modes)
     1614                                }
     1615
    16051616                                dc.SendMessage(&irc.Message{
    16061617                                        Prefix:  dc.srv.prefix(),
    16071618                                        Command: irc.RPL_UMODEIS,
    1608                                         Params:  []string{dc.nick, ""}, // TODO
     1619                                        Params:  []string{dc.nick, userMode},
    16091620                                })
    16101621                        }
  • trunk/upstream.go

    r552 r553  
    673673                }
    674674
    675                 uc.forEachDownstreamByID(downstreamID, func (dc *downstreamConn) {
    676                         dc.SendMessage(&irc.Message {
    677                                 Prefix: uc.srv.prefix(),
     675                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
     676                        dc.SendMessage(&irc.Message{
     677                                Prefix:  uc.srv.prefix(),
    678678                                Command: msg.Command,
    679                                 Params: msg.Params,
     679                                Params:  msg.Params,
    680680                        })
    681681                })
     
    933933                                return fmt.Errorf("received MODE message for unknown nick %q", name)
    934934                        }
    935                         return uc.modes.Apply(modeStr)
    936                         // TODO: notify downstreams about user mode change?
     935
     936                        if err := uc.modes.Apply(modeStr); err != nil {
     937                                return err
     938                        }
     939
     940                        uc.forEachDownstream(func(dc *downstreamConn) {
     941                                if dc.upstream() == nil {
     942                                        return
     943                                }
     944
     945                                dc.SendMessage(msg)
     946                        })
    937947                } else { // channel mode change
    938948                        ch, err := uc.getChannel(name)
     
    983993                        return err
    984994                }
    985                 // TODO: send RPL_UMODEIS to downstream connections when applicable
     995
     996                uc.forEachDownstream(func(dc *downstreamConn) {
     997                        if dc.upstream() == nil {
     998                                return
     999                        }
     1000
     1001                        dc.SendMessage(msg)
     1002                })
    9861003        case irc.RPL_CHANNELMODEIS:
    9871004                var channel string
     
    14431460                }
    14441461
    1445                 uc.forEachDownstreamByID(downstreamID, func (dc *downstreamConn) {
    1446                         dc.SendMessage(&irc.Message {
    1447                                 Prefix: uc.srv.prefix(),
     1462                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
     1463                        dc.SendMessage(&irc.Message{
     1464                                Prefix:  uc.srv.prefix(),
    14481465                                Command: msg.Command,
    1449                                 Params: msg.Params,
     1466                                Params:  msg.Params,
    14501467                        })
    14511468                })
Note: See TracChangeset for help on using the changeset viewer.