diff --git a/core/chat/client.go b/core/chat/client.go index 7436336fb..2c5553047 100644 --- a/core/chat/client.go +++ b/core/chat/client.go @@ -111,6 +111,7 @@ func (c *Client) listenRead() { msg.ID = id msg.MessageType = "CHAT" msg.Timestamp = time.Now() + msg.Visible = true if err := websocket.JSON.Receive(c.ws, &msg); err == io.EOF { c.doneCh <- true diff --git a/core/chat/server.go b/core/chat/server.go index 62e9f4bf6..2d3c20afc 100644 --- a/core/chat/server.go +++ b/core/chat/server.go @@ -56,12 +56,6 @@ func (s *server) err(err error) { s.errCh <- err } -func (s *server) sendPastMessages(c *Client) { - for _, msg := range s.Messages { - c.Write(msg) - } -} - func (s *server) sendAll(msg models.ChatMessage) { for _, c := range s.Clients { c.Write(msg) @@ -104,7 +98,6 @@ func (s *server) Listen() { s.Clients[c.id] = c s.listener.ClientAdded(c.id) - s.sendPastMessages(c) // remove a client case c := <-s.delCh: diff --git a/webroot/js/app.js b/webroot/js/app.js index 04b97512b..531fa8ed7 100644 --- a/webroot/js/app.js +++ b/webroot/js/app.js @@ -86,6 +86,8 @@ class Owncast { onError: this.handlePlayerError, }); this.player.init(); + + this.getChatHistory(); }; setConfigData(data) { @@ -132,17 +134,21 @@ class Owncast { return; } const message = new Message(model); - const existing = this.vueApp.messages.filter(function (item) { - return item.id === message.id; - }) - if (existing.length === 0 || !existing) { - this.vueApp.messages = [...this.vueApp.messages, message]; - } + this.addMessage(message); }; this.websocket = ws; this.messagingInterface.setWebsocket(this.websocket); }; + addMessage(message) { + const existing = this.vueApp.messages.filter(function (item) { + return item.id === message.id; + }) + if (existing.length === 0 || !existing) { + this.vueApp.messages = [...this.vueApp.messages, message]; + } + } + // fetch /config data getConfig() { fetch(URL_CONFIG) @@ -276,4 +282,18 @@ class Owncast { this.handleOfflineMode(); // stop timers? }; + + async getChatHistory() { + const url = "/chat"; + const response = await fetch(url); + const data = await response.json(); + const messages = data.map(function (message) { + return new Message(message); + }) + this.setChatHistory(messages); + } + + setChatHistory(messages) { + this.vueApp.messages = messages; + } }; diff --git a/webroot/js/message.js b/webroot/js/message.js index 698deb685..bc74a50f7 100644 --- a/webroot/js/message.js +++ b/webroot/js/message.js @@ -81,6 +81,7 @@ class MessagingInterface { } else { this.tagAppContainer.classList.add('desktop'); } + } setWebsocket(socket) {