Send the 25 last messages for each channel to the client on load

This commit is contained in:
Ken-Håvard Lieng 2017-04-20 01:51:55 +02:00
parent c840d51e16
commit eedc687f18
26 changed files with 300 additions and 268 deletions

View file

@ -22,9 +22,7 @@ struct Channel {
struct Message {
ID uint64
Server string
From string
To string
Content string
Time int64
}

View file

@ -702,21 +702,6 @@ func (d *Channel) Unmarshal(buf []byte) (uint64, error) {
func (d *Message) Size() (s uint64) {
{
l := uint64(len(d.Server))
{
t := l
for t >= 0x80 {
t >>= 7
s++
}
s++
}
s += l
}
{
l := uint64(len(d.From))
@ -732,21 +717,6 @@ func (d *Message) Size() (s uint64) {
}
s += l
}
{
l := uint64(len(d.To))
{
t := l
for t >= 0x80 {
t >>= 7
s++
}
s++
}
s += l
}
{
l := uint64(len(d.Content))
@ -781,25 +751,6 @@ func (d *Message) Marshal(buf []byte) ([]byte, error) {
*(*uint64)(unsafe.Pointer(&buf[0])) = d.ID
}
{
l := uint64(len(d.Server))
{
t := uint64(l)
for t >= 0x80 {
buf[i+8] = byte(t) | 0x80
t >>= 7
i++
}
buf[i+8] = byte(t)
i++
}
copy(buf[i+8:], d.Server)
i += l
}
{
l := uint64(len(d.From))
@ -819,25 +770,6 @@ func (d *Message) Marshal(buf []byte) ([]byte, error) {
copy(buf[i+8:], d.From)
i += l
}
{
l := uint64(len(d.To))
{
t := uint64(l)
for t >= 0x80 {
buf[i+8] = byte(t) | 0x80
t >>= 7
i++
}
buf[i+8] = byte(t)
i++
}
copy(buf[i+8:], d.To)
i += l
}
{
l := uint64(len(d.Content))
@ -876,26 +808,6 @@ func (d *Message) Unmarshal(buf []byte) (uint64, error) {
{
l := uint64(0)
{
bs := uint8(7)
t := uint64(buf[i+8] & 0x7F)
for buf[i+8]&0x80 == 0x80 {
i++
t |= uint64(buf[i+8]&0x7F) << bs
bs += 7
}
i++
l = t
}
d.Server = string(buf[i+8 : i+8+l])
i += l
}
{
l := uint64(0)
{
bs := uint8(7)
@ -916,26 +828,6 @@ func (d *Message) Unmarshal(buf []byte) (uint64, error) {
{
l := uint64(0)
{
bs := uint8(7)
t := uint64(buf[i+8] & 0x7F)
for buf[i+8]&0x80 == 0x80 {
i++
t |= uint64(buf[i+8]&0x7F) << bs
bs += 7
}
i++
l = t
}
d.To = string(buf[i+8 : i+8+l])
i += l
}
{
l := uint64(0)
{
bs := uint8(7)

View file

@ -7,16 +7,21 @@ import (
"time"
"github.com/blevesearch/bleve"
"github.com/blevesearch/bleve/analysis/analyzer/keyword"
"github.com/boltdb/bolt"
)
type Message struct {
ID uint64 `json:"id"`
Server string `json:"server"`
From string `json:"from"`
To string `json:"to,omitempty"`
Content string `json:"content"`
Time int64 `json:"time"`
ID uint64 `json:"id" bleve:"-"`
Server string `json:"-" bleve:"server"`
From string `json:"from" bleve:"-"`
To string `json:"-" bleve:"to"`
Content string `json:"content" bleve:"content"`
Time int64 `json:"time" bleve:"-"`
}
func (m Message) Type() string {
return "message"
}
func (u *User) LogMessage(server, from, to, content string) error {
@ -167,7 +172,27 @@ func (u *User) openMessageLog() error {
indexPath := Path.Index(u.Username)
u.messageIndex, err = bleve.Open(indexPath)
if err == bleve.ErrorIndexPathDoesNotExist {
keywordMapping := bleve.NewTextFieldMapping()
keywordMapping.Analyzer = keyword.Name
keywordMapping.Store = false
keywordMapping.IncludeTermVectors = false
keywordMapping.IncludeInAll = false
contentMapping := bleve.NewTextFieldMapping()
contentMapping.Analyzer = "en"
contentMapping.Store = false
contentMapping.IncludeTermVectors = false
contentMapping.IncludeInAll = false
messageMapping := bleve.NewDocumentMapping()
messageMapping.StructTagKey = "bleve"
messageMapping.AddFieldMappingsAt("server", keywordMapping)
messageMapping.AddFieldMappingsAt("to", keywordMapping)
messageMapping.AddFieldMappingsAt("content", contentMapping)
mapping := bleve.NewIndexMapping()
mapping.AddDocumentMapping("message", messageMapping)
u.messageIndex, err = bleve.New(indexPath, mapping)
if err != nil {
return err