Split unmarshalEntity into two functions
Some command handlers need to unmarshal without requiring the upstream to be connected.
This commit is contained in:
parent
79b0fe5de5
commit
cd64a7ffda
@ -304,41 +304,54 @@ func (dc *downstreamConn) marshalUserPrefix(net *network, prefix *irc.Prefix) *i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// unmarshalEntity converts a downstream entity name (ie. channel or nick) into
|
// unmarshalEntityNetwork converts a downstream entity name (ie. channel or
|
||||||
// an upstream entity name.
|
// nick) into an upstream entity name.
|
||||||
//
|
//
|
||||||
// This involves removing the "/<network>" suffix.
|
// This involves removing the "/<network>" suffix.
|
||||||
func (dc *downstreamConn) unmarshalEntity(name string) (*upstreamConn, string, error) {
|
func (dc *downstreamConn) unmarshalEntityNetwork(name string) (*network, string, error) {
|
||||||
if uc := dc.upstream(); uc != nil {
|
|
||||||
return uc, name, nil
|
|
||||||
}
|
|
||||||
if dc.network != nil {
|
if dc.network != nil {
|
||||||
|
return dc.network, name, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var net *network
|
||||||
|
if i := strings.LastIndexByte(name, '/'); i >= 0 {
|
||||||
|
network := name[i+1:]
|
||||||
|
name = name[:i]
|
||||||
|
|
||||||
|
for _, n := range dc.user.networks {
|
||||||
|
if network == n.GetName() {
|
||||||
|
net = n
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if net == nil {
|
||||||
|
return nil, "", ircError{&irc.Message{
|
||||||
|
Command: irc.ERR_NOSUCHCHANNEL,
|
||||||
|
Params: []string{name, "Missing network suffix in name"},
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return net, name, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// unmarshalEntity is the same as unmarshalEntityNetwork, but returns the
|
||||||
|
// upstream connection and fails if the upstream is disconnected.
|
||||||
|
func (dc *downstreamConn) unmarshalEntity(name string) (*upstreamConn, string, error) {
|
||||||
|
net, name, err := dc.unmarshalEntityNetwork(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if net.conn == nil {
|
||||||
return nil, "", ircError{&irc.Message{
|
return nil, "", ircError{&irc.Message{
|
||||||
Command: irc.ERR_NOSUCHCHANNEL,
|
Command: irc.ERR_NOSUCHCHANNEL,
|
||||||
Params: []string{name, "Disconnected from upstream network"},
|
Params: []string{name, "Disconnected from upstream network"},
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
var conn *upstreamConn
|
return net.conn, name, nil
|
||||||
if i := strings.LastIndexByte(name, '/'); i >= 0 {
|
|
||||||
network := name[i+1:]
|
|
||||||
name = name[:i]
|
|
||||||
|
|
||||||
dc.forEachUpstream(func(uc *upstreamConn) {
|
|
||||||
if network != uc.network.GetName() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
conn = uc
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if conn == nil {
|
|
||||||
return nil, "", ircError{&irc.Message{
|
|
||||||
Command: irc.ERR_NOSUCHCHANNEL,
|
|
||||||
Params: []string{name, "Missing network suffix in channel name"},
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
return conn, name, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dc *downstreamConn) unmarshalText(uc *upstreamConn, text string) string {
|
func (dc *downstreamConn) unmarshalText(uc *upstreamConn, text string) string {
|
||||||
|
Loading…
Reference in New Issue
Block a user