Add message scrollback
This commit is contained in:
parent
b5d12954a6
commit
45c61e7596
16 changed files with 313 additions and 136 deletions
|
@ -69,13 +69,19 @@ func getIndexData(r *http.Request, session *Session) *indexData {
|
|||
}
|
||||
}
|
||||
|
||||
messages, err := session.user.GetLastMessages(params[0], params[1], 25)
|
||||
messages, hasMore, err := session.user.GetLastMessages(params[0], params[1], 50)
|
||||
if err == nil && len(messages) > 0 {
|
||||
data.Messages = &Messages{
|
||||
m := Messages{
|
||||
Server: params[0],
|
||||
To: params[1],
|
||||
Messages: messages,
|
||||
}
|
||||
|
||||
if hasMore {
|
||||
m.Next = messages[0].ID
|
||||
}
|
||||
|
||||
data.Messages = &m
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,8 @@ type Messages struct {
|
|||
Server string `json:"server"`
|
||||
To string `json:"to"`
|
||||
Messages []storage.Message `json:"messages"`
|
||||
Prepend bool `json:"prepend,omitempty"`
|
||||
Next string `json:"next,omitempty"`
|
||||
}
|
||||
|
||||
type Topic struct {
|
||||
|
@ -145,6 +147,12 @@ type ClientCert struct {
|
|||
Key []byte `json:"key"`
|
||||
}
|
||||
|
||||
type FetchMessages struct {
|
||||
Server string `json:"server"`
|
||||
Channel string `json:"channel"`
|
||||
Next string `json:"next"`
|
||||
}
|
||||
|
||||
type Error struct {
|
||||
Server string `json:"server"`
|
||||
Message string `json:"message"`
|
||||
|
|
|
@ -79,13 +79,19 @@ func (h *wsHandler) init(r *http.Request) {
|
|||
Users: channelStore.GetUsers(channel.Server, channel.Name),
|
||||
})
|
||||
|
||||
messages, err := h.session.user.GetLastMessages(channel.Server, channel.Name, 25)
|
||||
messages, hasMore, err := h.session.user.GetLastMessages(channel.Server, channel.Name, 50)
|
||||
if err == nil && len(messages) > 0 {
|
||||
h.session.sendJSON("messages", Messages{
|
||||
res := Messages{
|
||||
Server: channel.Server,
|
||||
To: channel.Name,
|
||||
Messages: messages,
|
||||
})
|
||||
}
|
||||
|
||||
if hasMore {
|
||||
res.Next = messages[0].ID
|
||||
}
|
||||
|
||||
h.session.sendJSON("messages", res)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -271,20 +277,42 @@ func (h *wsHandler) cert(b []byte) {
|
|||
h.session.sendJSON("cert_success", nil)
|
||||
}
|
||||
|
||||
func (h *wsHandler) initHandlers() {
|
||||
h.handlers = map[string]func([]byte){
|
||||
"connect": h.connect,
|
||||
"join": h.join,
|
||||
"part": h.part,
|
||||
"quit": h.quit,
|
||||
"message": h.message,
|
||||
"nick": h.nick,
|
||||
"invite": h.invite,
|
||||
"kick": h.kick,
|
||||
"whois": h.whois,
|
||||
"away": h.away,
|
||||
"raw": h.raw,
|
||||
"search": h.search,
|
||||
"cert": h.cert,
|
||||
func (h *wsHandler) fetchMessages(b []byte) {
|
||||
var data FetchMessages
|
||||
json.Unmarshal(b, &data)
|
||||
|
||||
messages, hasMore, err := h.session.user.GetMessages(data.Server, data.Channel, 200, data.Next)
|
||||
if err == nil && len(messages) > 0 {
|
||||
res := Messages{
|
||||
Server: data.Server,
|
||||
To: data.Channel,
|
||||
Messages: messages,
|
||||
Prepend: true,
|
||||
}
|
||||
|
||||
if hasMore {
|
||||
res.Next = messages[0].ID
|
||||
}
|
||||
|
||||
h.session.sendJSON("messages", res)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *wsHandler) initHandlers() {
|
||||
h.handlers = map[string]func([]byte){
|
||||
"connect": h.connect,
|
||||
"join": h.join,
|
||||
"part": h.part,
|
||||
"quit": h.quit,
|
||||
"message": h.message,
|
||||
"nick": h.nick,
|
||||
"invite": h.invite,
|
||||
"kick": h.kick,
|
||||
"whois": h.whois,
|
||||
"away": h.away,
|
||||
"raw": h.raw,
|
||||
"search": h.search,
|
||||
"cert": h.cert,
|
||||
"fetch_messages": h.fetchMessages,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue