Changeset 434 in code


Ignore:
Timestamp:
Dec 14, 2020, 7:54:02 PM (4 years ago)
Author:
delthas
Message:

Introduce Channel.{RelayDetached,ReattachOn,DetachAfter,DetachOn}

This adds several fields to the channel database schema and struct.
These fields will be used to add support for customizable message
relaying through BouncerServ, auto-reattaching, auto-detaching.

  • RelayDetached is a filter for which notices to relay through BouncerServ for detached channels.
  • ReattachOn is a filter for which messages to trigger a channel reattach on.
  • DetachAfter is the duration after which to automatically detach a channel if no matching messages are received.
  • DetachOn is a filter for which messages will reset the auto-detach timer.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/db.go

    r422 r434  
    44        "database/sql"
    55        "fmt"
     6        "math"
    67        "strings"
    78        "sync"
     9        "time"
    810
    911        _ "github.com/mattn/go-sqlite3"
     
    5355}
    5456
     57type MessageFilter int
     58
     59const (
     60        // TODO: use customizable user defaults for FilterDefault
     61        FilterDefault MessageFilter = iota
     62        FilterNone
     63        FilterHighlight
     64        FilterMessage
     65)
     66
     67func parseFilter(filter string) (MessageFilter, error) {
     68        switch filter {
     69        case "default":
     70                return FilterDefault, nil
     71        case "none":
     72                return FilterNone, nil
     73        case "highlight":
     74                return FilterHighlight, nil
     75        case "message":
     76                return FilterMessage, nil
     77        }
     78        return 0, fmt.Errorf("unknown filter: %q", filter)
     79}
     80
    5581type Channel struct {
    5682        ID       int64
     
    5884        Key      string
    5985        Detached bool
     86
     87        RelayDetached MessageFilter
     88        ReattachOn    MessageFilter
     89        DetachAfter   time.Duration
     90        DetachOn      MessageFilter
    6091}
    6192
     
    94125        key VARCHAR(255),
    95126        detached INTEGER NOT NULL DEFAULT 0,
     127        relay_detached INTEGER NOT NULL DEFAULT 0,
     128        reattach_on INTEGER NOT NULL DEFAULT 0,
     129        detach_after INTEGER NOT NULL DEFAULT 0,
     130        detach_on INTEGER NOT NULL DEFAULT 0,
    96131        FOREIGN KEY(network) REFERENCES Network(id),
    97132        UNIQUE(network, name)
     
    147182                ALTER TABLE NetworkNew RENAME TO Network;
    148183        `,
     184        `
     185                ALTER TABLE Channel ADD COLUMN relay_detached INTEGER NOT NULL DEFAULT 0;
     186                ALTER TABLE Channel ADD COLUMN reattach_on INTEGER NOT NULL DEFAULT 0;
     187                ALTER TABLE Channel ADD COLUMN detach_after INTEGER NOT NULL DEFAULT 0;
     188                ALTER TABLE Channel ADD COLUMN detach_on INTEGER NOT NULL DEFAULT 0;
     189        `,
    149190}
    150191
     
    448489        defer db.lock.RUnlock()
    449490
    450         rows, err := db.db.Query(`SELECT id, name, key, detached
     491        rows, err := db.db.Query(`SELECT id, name, key, detached, relay_detached, reattach_on, detach_after, detach_on
    451492                FROM Channel
    452493                WHERE network = ?`, networkID)
     
    460501                var ch Channel
    461502                var key sql.NullString
    462                 if err := rows.Scan(&ch.ID, &ch.Name, &key, &ch.Detached); err != nil {
     503                var detachAfter int64
     504                if err := rows.Scan(&ch.ID, &ch.Name, &key, &ch.Detached, &ch.RelayDetached, &ch.ReattachOn, &detachAfter, &ch.DetachOn); err != nil {
    463505                        return nil, err
    464506                }
    465507                ch.Key = key.String
     508                ch.DetachAfter = time.Duration(detachAfter) * time.Second
    466509                channels = append(channels, ch)
    467510        }
     
    478521
    479522        key := toNullString(ch.Key)
     523        detachAfter := int64(math.Ceil(ch.DetachAfter.Seconds()))
    480524
    481525        var err error
    482526        if ch.ID != 0 {
    483527                _, err = db.db.Exec(`UPDATE Channel
    484                         SET network = ?, name = ?, key = ?, detached = ?
     528                        SET network = ?, name = ?, key = ?, detached = ?, relay_detached = ?, reattach_on = ?, detach_after = ?, detach_on = ?
    485529                        WHERE id = ?`,
    486                         networkID, ch.Name, key, ch.Detached, ch.ID)
     530                        networkID, ch.Name, key, ch.Detached, ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn, ch.ID)
    487531        } else {
    488532                var res sql.Result
    489                 res, err = db.db.Exec(`INSERT INTO Channel(network, name, key, detached)
    490                         VALUES (?, ?, ?, ?)`,
    491                         networkID, ch.Name, key, ch.Detached)
     533                res, err = db.db.Exec(`INSERT INTO Channel(network, name, key, detached, relay_detached, reattach_on, detach_after, detach_on)
     534                        VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
     535                        networkID, ch.Name, key, ch.Detached, ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn)
    492536                if err != nil {
    493537                        return err
Note: See TracChangeset for help on using the changeset viewer.