Changeset 440 in code


Ignore:
Timestamp:
Jan 4, 2021, 3:26:30 PM (4 years ago)
Author:
contact
Message:

Add store-agnostic message ID format

Allow to query the network ID and entity from the message ID regardless
of the underlying store used.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r438 r440  
    314314// ackMsgID acknowledges that a message has been received.
    315315func (dc *downstreamConn) ackMsgID(id string) {
    316         netName, entity, _, _, err := parseMsgID(id)
     316        netID, entity, _, err := parseMsgID(id)
    317317        if err != nil {
    318318                dc.logger.Printf("failed to ACK message ID %q: %v", id, err)
     
    320320        }
    321321
    322         network := dc.user.getNetwork(netName)
     322        network := dc.user.getNetworkByID(netID)
    323323        if network == nil {
    324324                return
  • trunk/msgstore.go

    r439 r440  
    22
    33import (
     4        "fmt"
     5        "strconv"
     6        "strings"
    47        "time"
    58
     
    1922        Append(network *network, entity string, msg *irc.Message) (id string, err error)
    2023}
     24
     25func formatMsgID(netID int64, entity, extra string) string {
     26        return fmt.Sprintf("%v %v %v", netID, entity, extra)
     27}
     28
     29func parseMsgID(s string) (netID int64, entity, extra string, err error) {
     30        l := strings.SplitN(s, " ", 3)
     31        if len(l) != 3 {
     32                return 0, "", "", fmt.Errorf("invalid message ID %q: expected 3 fields", s)
     33        }
     34        netID, err = strconv.ParseInt(l[0], 10, 64)
     35        if err != nil {
     36                return 0, "", "", fmt.Errorf("invalid message ID %q: %v", s, err)
     37        }
     38        return netID, l[1], l[2], nil
     39}
  • trunk/msgstore_fs.go

    r439 r440  
    3737}
    3838
    39 func parseMsgID(s string) (network, entity string, t time.Time, offset int64, err error) {
     39func parseFSMsgID(s string) (netID int64, entity string, t time.Time, offset int64, err error) {
     40        netID, entity, extra, err := parseMsgID(s)
     41        if err != nil {
     42                return 0, "", time.Time{}, 0, err
     43        }
     44
    4045        var year, month, day int
    41         _, err = fmt.Sscanf(s, "%s %s %04d-%02d-%02d %d", &network, &entity, &year, &month, &day, &offset)
    42         if err != nil {
    43                 return "", "", time.Time{}, 0, fmt.Errorf("invalid message ID: %v", err)
     46        _, err = fmt.Sscanf(extra, "%04d-%02d-%02d %d", &year, &month, &day, &offset)
     47        if err != nil {
     48                return 0, "", time.Time{}, 0, fmt.Errorf("invalid message ID %q: %v", s, err)
    4449        }
    4550        t = time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
    46         return network, entity, t, offset, nil
    47 }
    48 
    49 func formatMsgID(network, entity string, t time.Time, offset int64) string {
     51        return netID, entity, t, offset, nil
     52}
     53
     54func formatFSMsgID(netID int64, entity string, t time.Time, offset int64) string {
    5055        year, month, day := t.Date()
    51         return fmt.Sprintf("%s %s %04d-%02d-%02d %d", network, entity, year, month, day, offset)
     56        extra := fmt.Sprintf("%04d-%02d-%02d %d", year, month, day, offset)
     57        return formatMsgID(netID, entity, extra)
    5258}
    5359
    5460// nextMsgID queries the message ID for the next message to be written to f.
    55 func nextMsgID(network *network, entity string, t time.Time, f *os.File) (string, error) {
     61func nextFSMsgID(network *network, entity string, t time.Time, f *os.File) (string, error) {
    5662        offset, err := f.Seek(0, io.SeekEnd)
    5763        if err != nil {
    5864                return "", err
    5965        }
    60         return formatMsgID(network.GetName(), entity, t, offset), nil
     66        return formatFSMsgID(network.ID, entity, t, offset), nil
    6167}
    6268
     
    6571        fi, err := os.Stat(p)
    6672        if os.IsNotExist(err) {
    67                 return formatMsgID(network.GetName(), entity, t, -1), nil
     73                return formatFSMsgID(network.ID, entity, t, -1), nil
    6874        } else if err != nil {
    6975                return "", err
    7076        }
    71         return formatMsgID(network.GetName(), entity, t, fi.Size()-1), nil
     77        return formatFSMsgID(network.ID, entity, t, fi.Size()-1), nil
    7278}
    7379
     
    114120        }
    115121
    116         msgID, err := nextMsgID(network, entity, t, f)
     122        msgID, err := nextFSMsgID(network, entity, t, f)
    117123        if err != nil {
    118124                return "", fmt.Errorf("failed to generate message ID: %v", err)
     
    374380        var afterOffset int64
    375381        if id != "" {
    376                 var idNet, idEntity string
     382                var idNet int64
     383                var idEntity string
    377384                var err error
    378                 idNet, idEntity, afterTime, afterOffset, err = parseMsgID(id)
    379                 if err != nil {
    380                         return nil, err
    381                 }
    382                 if idNet != network.GetName() || idEntity != entity {
     385                idNet, idEntity, afterTime, afterOffset, err = parseFSMsgID(id)
     386                if err != nil {
     387                        return nil, err
     388                }
     389                if idNet != network.ID || idEntity != entity {
    383390                        return nil, fmt.Errorf("cannot find message ID: message ID doesn't match network/entity")
    384391                }
Note: See TracChangeset for help on using the changeset viewer.