Changeset 90 in code for trunk


Ignore:
Timestamp:
Mar 12, 2020, 6:17:06 PM (5 years ago)
Author:
contact
Message:

Store NICK changes in the DB

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/db.go

    r89 r90  
    118118}
    119119
     120func (db *DB) StoreNetwork(username string, network *Network) error {
     121        db.lock.Lock()
     122        defer db.lock.Unlock()
     123
     124        var netUsername, netRealname *string
     125        if network.Username != "" {
     126                netUsername = &network.Username
     127        }
     128        if network.Realname != "" {
     129                netRealname = &network.Realname
     130        }
     131
     132        var err error
     133        if network.ID != 0 {
     134                _, err = db.db.Exec("UPDATE Network SET addr = ?, nick = ?, username = ?, realname = ? WHERE id = ?", network.Addr, network.Nick, netUsername, netRealname, network.ID)
     135        } else {
     136                var res sql.Result
     137                res, err = db.db.Exec("INSERT INTO Network(user, addr, nick, username, realname) VALUES (?, ?, ?, ?, ?)", username, network.Addr, network.Nick, netUsername, netRealname)
     138                if err != nil {
     139                        return err
     140                }
     141                network.ID, err = res.LastInsertId()
     142        }
     143        return err
     144}
     145
    120146func (db *DB) ListChannels(networkID int64) ([]Channel, error) {
    121147        db.lock.RLock()
  • trunk/downstream.go

    r89 r90  
    104104func (dc *downstreamConn) marshalChannel(uc *upstreamConn, name string) string {
    105105        return name
     106}
     107
     108func (dc *downstreamConn) forEachNetwork(f func(*network)) {
     109        if dc.network != nil {
     110                f(dc.network)
     111        } else {
     112                dc.user.forEachNetwork(f)
     113        }
    106114}
    107115
     
    459467                }}
    460468        case "NICK":
     469                var nick string
     470                if err := parseMessageParams(msg, &nick); err != nil {
     471                        return err
     472                }
     473
     474                var err error
     475                dc.forEachNetwork(func(n *network) {
     476                        if err != nil {
     477                                return
     478                        }
     479                        n.Nick = nick
     480                        err = dc.srv.db.StoreNetwork(dc.user.Username, &n.Network)
     481                })
     482                if err != nil {
     483                        return err
     484                }
     485
    461486                dc.forEachUpstream(func(uc *upstreamConn) {
    462487                        uc.SendMessage(msg)
  • trunk/server.go

    r79 r90  
    108108                srv:  srv,
    109109        }
     110}
     111
     112func (u *user) forEachNetwork(f func(*network)) {
     113        u.lock.Lock()
     114        for _, network := range u.networks {
     115                f(network)
     116        }
     117        u.lock.Unlock()
    110118}
    111119
Note: See TracChangeset for help on using the changeset viewer.