|
|
package matrix
import ( "encoding/json"
"github.com/matrix-org/go-neb/api" "github.com/matrix-org/go-neb/database" log "github.com/sirupsen/logrus" "maunium.net/go/mautrix" "maunium.net/go/mautrix/id" )
// NEBStore implements the mautrix.Storer interface.
//
// It persists the next batch token in the database, and includes a ClientConfig for the client.
type NEBStore struct { mautrix.InMemoryStore Database database.Storer ClientConfig api.ClientConfig }
// SaveNextBatch saves to the database.
func (s *NEBStore) SaveNextBatch(userID id.UserID, nextBatch string) { if err := s.Database.UpdateNextBatch(userID, nextBatch); err != nil { log.WithFields(log.Fields{ log.ErrorKey: err, "user_id": userID, "next_batch": nextBatch, }).Error("Failed to persist next_batch token") } }
// LoadNextBatch loads from the database.
func (s *NEBStore) LoadNextBatch(userID id.UserID) string { token, err := s.Database.LoadNextBatch(userID) if err != nil { log.WithFields(log.Fields{ log.ErrorKey: err, "user_id": userID, }).Error("Failed to load next_batch token") return "" } return token }
// StarterLinkMessage represents a message with a starter_link custom data.
type StarterLinkMessage struct { Body string Link string }
// MarshalJSON converts this message into actual event content JSON.
func (m StarterLinkMessage) MarshalJSON() ([]byte, error) { var data map[string]string
if m.Link != "" { data = map[string]string{ "org.matrix.neb.starter_link": m.Link, } }
msg := struct { MsgType string `json:"msgtype"` Body string `json:"body"` Data map[string]string `json:"data,omitempty"` }{ "m.notice", m.Body, data, } return json.Marshal(msg) }
|