Changeset 488 in code for trunk/msgstore_fs.go


Ignore:
Timestamp:
Mar 31, 2021, 3:57:24 PM (4 years ago)
Author:
contact
Message:

Use BARE for internal message IDs

This allows to have shorter and more future-proof IDs. This also
guarantees the IDs will only use reasonable ASCII characters (no
spaces), removing the need to encode them for PING/PONG tokens.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/msgstore_fs.go

    r440 r488  
    1010        "time"
    1111
     12        "git.sr.ht/~sircmpwn/go-bare"
    1213        "gopkg.in/irc.v3"
    1314)
     
    1617
    1718var escapeFilename = strings.NewReplacer("/", "-", "\\", "-")
     19
     20type date struct {
     21        Year, Month, Day int
     22}
     23
     24func newDate(t time.Time) date {
     25        year, month, day := t.Date()
     26        return date{year, int(month), day}
     27}
     28
     29func (d date) Time() time.Time {
     30        return time.Date(d.Year, time.Month(d.Month), d.Day, 0, 0, 0, 0, time.Local)
     31}
     32
     33type fsMsgID struct {
     34        Date   date
     35        Offset bare.Int
     36}
     37
     38func (fsMsgID) msgIDType() msgIDType {
     39        return msgIDFS
     40}
     41
     42func parseFSMsgID(s string) (netID int64, entity string, t time.Time, offset int64, err error) {
     43        var id fsMsgID
     44        netID, entity, err = parseMsgID(s, &id)
     45        if err != nil {
     46                return 0, "", time.Time{}, 0, err
     47        }
     48        return netID, entity, id.Date.Time(), int64(id.Offset), nil
     49}
     50
     51func formatFSMsgID(netID int64, entity string, t time.Time, offset int64) string {
     52        id := fsMsgID{
     53                Date:   newDate(t),
     54                Offset: bare.Int(offset),
     55        }
     56        return formatMsgID(netID, entity, &id)
     57}
    1858
    1959// fsMessageStore is a per-user on-disk store for IRC messages.
     
    3575        filename := fmt.Sprintf("%04d-%02d-%02d.log", year, month, day)
    3676        return filepath.Join(ms.root, escapeFilename.Replace(network.GetName()), escapeFilename.Replace(entity), filename)
    37 }
    38 
    39 func 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 
    45         var year, month, day int
    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)
    49         }
    50         t = time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
    51         return netID, entity, t, offset, nil
    52 }
    53 
    54 func formatFSMsgID(netID int64, entity string, t time.Time, offset int64) string {
    55         year, month, day := t.Date()
    56         extra := fmt.Sprintf("%04d-%02d-%02d %d", year, month, day, offset)
    57         return formatMsgID(netID, entity, extra)
    5877}
    5978
Note: See TracChangeset for help on using the changeset viewer.