diff options
author | Tulir Asokan <tulir@maunium.net> | 2019-06-15 01:11:51 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2019-06-15 01:11:54 +0300 |
commit | a55ea42d7f5900bd5fc8fad047040c7865824f33 (patch) | |
tree | 2b5ee3f3087751471903a21e99ca7a68fc97b928 /matrix/history.go | |
parent | a4ac699c930e783175b6451a5becd7b70835aefb (diff) |
Unbreak things
Diffstat (limited to 'matrix/history.go')
-rw-r--r-- | matrix/history.go | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/matrix/history.go b/matrix/history.go index 767cace..7275c15 100644 --- a/matrix/history.go +++ b/matrix/history.go @@ -18,6 +18,7 @@ package matrix import ( "bytes" + "compress/gzip" "encoding/binary" "encoding/gob" @@ -28,6 +29,10 @@ import ( "maunium.net/go/mautrix" ) +func init() { + gob.Register(&mautrix.Event{}) +} + type HistoryManager struct { sync.Mutex @@ -226,13 +231,27 @@ func btoi(b []byte) uint64 { func marshalEvent(event *mautrix.Event) ([]byte, error) { var buf bytes.Buffer - err := gob.NewEncoder(&buf).Encode(event) - return buf.Bytes(), err + enc := gzip.NewWriter(&buf) + if err := gob.NewEncoder(enc).Encode(event); err != nil { + _ = enc.Close() + return nil, err + } else if err := enc.Close(); err != nil { + return nil, err + } + return buf.Bytes(), nil } func unmarshalEvent(data []byte) (*mautrix.Event, error) { event := &mautrix.Event{} - return event, gob.NewDecoder(bytes.NewReader(data)).Decode(event) + if cmpReader, err := gzip.NewReader(bytes.NewReader(data)); err != nil { + return nil, err + } else if err := gob.NewDecoder(cmpReader).Decode(event); err != nil { + _ = cmpReader.Close() + return nil, err + } else if err := cmpReader.Close(); err != nil { + return nil, err + } + return event, nil } func put(streams, eventIDs *bolt.Bucket, event *mautrix.Event, key uint64) error { |