Send the 25 last messages for each channel to the client on load
This commit is contained in:
parent
c840d51e16
commit
eedc687f18
26 changed files with 300 additions and 268 deletions
|
@ -26,7 +26,7 @@ type indexData struct {
|
|||
Users *Userlist `json:"users,omitempty"`
|
||||
|
||||
// Last messages in the selected channel
|
||||
Messages []storage.Message `json:"messages,omitempty"`
|
||||
Messages *Messages `json:"messages,omitempty"`
|
||||
}
|
||||
|
||||
func getIndexData(r *http.Request, session *Session) *indexData {
|
||||
|
@ -68,6 +68,15 @@ func getIndexData(r *http.Request, session *Session) *indexData {
|
|||
Users: users,
|
||||
}
|
||||
}
|
||||
|
||||
messages, err := session.user.GetLastMessages(params[0], params[1], 25)
|
||||
if err == nil && len(messages) > 0 {
|
||||
data.Messages = &Messages{
|
||||
Server: params[0],
|
||||
To: params[1],
|
||||
Messages: messages,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &data
|
||||
|
|
|
@ -67,6 +67,12 @@ type Message struct {
|
|||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
type Messages struct {
|
||||
Server string `json:"server"`
|
||||
To string `json:"to"`
|
||||
Messages []storage.Message `json:"messages"`
|
||||
}
|
||||
|
||||
type Topic struct {
|
||||
Server string `json:"server"`
|
||||
Channel string `json:"channel"`
|
||||
|
|
|
@ -119,7 +119,7 @@ func upgradeWS(w http.ResponseWriter, r *http.Request, session *Session) {
|
|||
return
|
||||
}
|
||||
|
||||
newWSHandler(conn, session).run()
|
||||
newWSHandler(conn, session, r).run()
|
||||
}
|
||||
|
||||
func createHTTPSRedirect(portHTTPS string) http.HandlerFunc {
|
||||
|
|
|
@ -5,6 +5,8 @@ import (
|
|||
"encoding/json"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/spf13/viper"
|
||||
|
@ -20,13 +22,13 @@ type wsHandler struct {
|
|||
handlers map[string]func([]byte)
|
||||
}
|
||||
|
||||
func newWSHandler(conn *websocket.Conn, session *Session) *wsHandler {
|
||||
func newWSHandler(conn *websocket.Conn, session *Session, r *http.Request) *wsHandler {
|
||||
h := &wsHandler{
|
||||
ws: newWSConn(conn),
|
||||
session: session,
|
||||
addr: conn.RemoteAddr().String(),
|
||||
}
|
||||
h.init()
|
||||
h.init(r)
|
||||
h.initHandlers()
|
||||
return h
|
||||
}
|
||||
|
@ -55,7 +57,7 @@ func (h *wsHandler) dispatchRequest(req WSRequest) {
|
|||
}
|
||||
}
|
||||
|
||||
func (h *wsHandler) init() {
|
||||
func (h *wsHandler) init(r *http.Request) {
|
||||
h.session.setWS(h.addr, h.ws)
|
||||
|
||||
log.Println(h.addr, "[Session] User ID:", h.session.user.ID, "|",
|
||||
|
@ -63,13 +65,27 @@ func (h *wsHandler) init() {
|
|||
h.session.numWS(), "WebSocket connections")
|
||||
|
||||
channels := h.session.user.GetChannels()
|
||||
params := strings.Split(strings.Trim(r.URL.Query().Get("path"), "/"), "/")
|
||||
|
||||
for _, channel := range channels {
|
||||
if len(params) > 1 && channel.Server == params[0] && channel.Name == params[1] {
|
||||
continue
|
||||
}
|
||||
|
||||
h.session.sendJSON("users", Userlist{
|
||||
Server: channel.Server,
|
||||
Channel: channel.Name,
|
||||
Users: channelStore.GetUsers(channel.Server, channel.Name),
|
||||
})
|
||||
|
||||
messages, err := h.session.user.GetLastMessages(channel.Server, channel.Name, 25)
|
||||
if err == nil && len(messages) > 0 {
|
||||
h.session.sendJSON("messages", Messages{
|
||||
Server: channel.Server,
|
||||
To: channel.Name,
|
||||
Messages: messages,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue