Changeset 260 in code for trunk/downstream.go


Ignore:
Timestamp:
Apr 16, 2020, 3:19:00 PM (5 years ago)
Author:
contact
Message:

Make downstreamConn.marshal{Entity,UserPrefix} take a network

This will be used when sending history while upstream is disconnected.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r259 r260  
    122122}
    123123
     124func isOurNick(net *network, nick string) bool {
     125        // TODO: this doesn't account for nick changes
     126        if net.conn != nil {
     127                return nick == net.conn.nick
     128        }
     129        // We're not currently connected to the upstream connection, so we don't
     130        // know whether this name is our nickname. Best-effort: use the network's
     131        // configured nickname and hope it was the one being used when we were
     132        // connected.
     133        return nick == net.Nick
     134}
     135
    124136// marshalEntity converts an upstream entity name (ie. channel or nick) into a
    125137// downstream entity name.
     
    127139// This involves adding a "/<network>" suffix if the entity isn't the current
    128140// user.
    129 func (dc *downstreamConn) marshalEntity(uc *upstreamConn, name string) string {
     141func (dc *downstreamConn) marshalEntity(net *network, name string) string {
    130142        if dc.network != nil {
    131                 if dc.network != uc.network {
     143                if dc.network != net {
    132144                        panic("soju: tried to marshal an entity for another network")
    133145                }
    134146                return name
    135147        }
    136         if name == uc.nick {
     148        if isOurNick(net, name) {
    137149                return dc.nick
    138150        }
    139         return name + "/" + uc.network.GetName()
    140 }
    141 
    142 func (dc *downstreamConn) marshalUserPrefix(uc *upstreamConn, prefix *irc.Prefix) *irc.Prefix {
    143         if prefix.Name == uc.nick {
     151        return name + "/" + net.GetName()
     152}
     153
     154func (dc *downstreamConn) marshalUserPrefix(net *network, prefix *irc.Prefix) *irc.Prefix {
     155        if isOurNick(net, prefix.Name) {
    144156                return dc.prefix()
    145157        }
    146158        if dc.network != nil {
    147                 if dc.network != uc.network {
     159                if dc.network != net {
    148160                        panic("soju: tried to marshal a user prefix for another network")
    149161                }
     
    151163        }
    152164        return &irc.Prefix{
    153                 Name: prefix.Name + "/" + uc.network.GetName(),
     165                Name: prefix.Name + "/" + net.GetName(),
    154166                User: prefix.User,
    155167                Host: prefix.Host,
     
    229241func (dc *downstreamConn) marshalMessage(msg *irc.Message, uc *upstreamConn) *irc.Message {
    230242        msg = msg.Copy()
    231         msg.Prefix = dc.marshalUserPrefix(uc, msg.Prefix)
     243        msg.Prefix = dc.marshalUserPrefix(uc.network, msg.Prefix)
    232244
    233245        switch msg.Command {
    234246        case "PRIVMSG", "NOTICE":
    235                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     247                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    236248        case "NICK":
    237249                // Nick change for another user
    238                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     250                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    239251        case "JOIN", "PART":
    240                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     252                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    241253        case "KICK":
    242                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
    243                 msg.Params[1] = dc.marshalEntity(uc, msg.Params[1])
     254                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
     255                msg.Params[1] = dc.marshalEntity(uc.network, msg.Params[1])
    244256        case "TOPIC":
    245                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     257                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    246258        case "MODE":
    247                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     259                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    248260        case "QUIT":
    249261                // This space is intentinally left blank
     
    663675                                        Prefix:  dc.prefix(),
    664676                                        Command: "JOIN",
    665                                         Params:  []string{dc.marshalEntity(ch.conn, ch.Name)},
     677                                        Params:  []string{dc.marshalEntity(ch.conn.network, ch.Name)},
    666678                                })
    667679
     
    714726                                Prefix:  dc.srv.prefix(),
    715727                                Command: "BATCH",
    716                                 Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(uc, target)},
     728                                Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)},
    717729                        })
    718730                }
Note: See TracChangeset for help on using the changeset viewer.