aboutsummaryrefslogtreecommitdiff
path: root/matrix/history.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2019-06-15 01:11:51 +0300
committerTulir Asokan <tulir@maunium.net>2019-06-15 01:11:54 +0300
commita55ea42d7f5900bd5fc8fad047040c7865824f33 (patch)
tree2b5ee3f3087751471903a21e99ca7a68fc97b928 /matrix/history.go
parenta4ac699c930e783175b6451a5becd7b70835aefb (diff)
Unbreak things
Diffstat (limited to 'matrix/history.go')
-rw-r--r--matrix/history.go25
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 {