Store NICK changes in the DB
This commit is contained in:
parent
0c4e9b539c
commit
0ef08dfbb5
26
db.go
26
db.go
@ -117,6 +117,32 @@ func (db *DB) ListNetworks(username string) ([]Network, error) {
|
|||||||
return networks, nil
|
return networks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *DB) StoreNetwork(username string, network *Network) error {
|
||||||
|
db.lock.Lock()
|
||||||
|
defer db.lock.Unlock()
|
||||||
|
|
||||||
|
var netUsername, netRealname *string
|
||||||
|
if network.Username != "" {
|
||||||
|
netUsername = &network.Username
|
||||||
|
}
|
||||||
|
if network.Realname != "" {
|
||||||
|
netRealname = &network.Realname
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
if network.ID != 0 {
|
||||||
|
_, err = db.db.Exec("UPDATE Network SET addr = ?, nick = ?, username = ?, realname = ? WHERE id = ?", network.Addr, network.Nick, netUsername, netRealname, network.ID)
|
||||||
|
} else {
|
||||||
|
var res sql.Result
|
||||||
|
res, err = db.db.Exec("INSERT INTO Network(user, addr, nick, username, realname) VALUES (?, ?, ?, ?, ?)", username, network.Addr, network.Nick, netUsername, netRealname)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
network.ID, err = res.LastInsertId()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (db *DB) ListChannels(networkID int64) ([]Channel, error) {
|
func (db *DB) ListChannels(networkID int64) ([]Channel, error) {
|
||||||
db.lock.RLock()
|
db.lock.RLock()
|
||||||
defer db.lock.RUnlock()
|
defer db.lock.RUnlock()
|
||||||
|
@ -105,6 +105,14 @@ func (dc *downstreamConn) marshalChannel(uc *upstreamConn, name string) string {
|
|||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dc *downstreamConn) forEachNetwork(f func(*network)) {
|
||||||
|
if dc.network != nil {
|
||||||
|
f(dc.network)
|
||||||
|
} else {
|
||||||
|
dc.user.forEachNetwork(f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (dc *downstreamConn) forEachUpstream(f func(*upstreamConn)) {
|
func (dc *downstreamConn) forEachUpstream(f func(*upstreamConn)) {
|
||||||
dc.user.forEachUpstream(func(uc *upstreamConn) {
|
dc.user.forEachUpstream(func(uc *upstreamConn) {
|
||||||
if dc.network != nil && uc.network != dc.network {
|
if dc.network != nil && uc.network != dc.network {
|
||||||
@ -458,6 +466,23 @@ func (dc *downstreamConn) handleMessageRegistered(msg *irc.Message) error {
|
|||||||
Params: []string{dc.nick, "You may not reregister"},
|
Params: []string{dc.nick, "You may not reregister"},
|
||||||
}}
|
}}
|
||||||
case "NICK":
|
case "NICK":
|
||||||
|
var nick string
|
||||||
|
if err := parseMessageParams(msg, &nick); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
dc.forEachNetwork(func(n *network) {
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n.Nick = nick
|
||||||
|
err = dc.srv.db.StoreNetwork(dc.user.Username, &n.Network)
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
dc.forEachUpstream(func(uc *upstreamConn) {
|
dc.forEachUpstream(func(uc *upstreamConn) {
|
||||||
uc.SendMessage(msg)
|
uc.SendMessage(msg)
|
||||||
})
|
})
|
||||||
|
@ -109,6 +109,14 @@ func newUser(srv *Server, record *User) *user {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *user) forEachNetwork(f func(*network)) {
|
||||||
|
u.lock.Lock()
|
||||||
|
for _, network := range u.networks {
|
||||||
|
f(network)
|
||||||
|
}
|
||||||
|
u.lock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
func (u *user) forEachUpstream(f func(uc *upstreamConn)) {
|
func (u *user) forEachUpstream(f func(uc *upstreamConn)) {
|
||||||
u.lock.Lock()
|
u.lock.Lock()
|
||||||
for _, network := range u.networks {
|
for _, network := range u.networks {
|
||||||
|
Loading…
Reference in New Issue
Block a user