owncast/core/chat/persistence.go

105 lines
2.1 KiB
Go
Raw Normal View History

2020-07-13 00:53:33 +03:00
package chat
import (
"database/sql"
"time"
_ "github.com/mattn/go-sqlite3"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
2020-07-13 00:53:33 +03:00
log "github.com/sirupsen/logrus"
)
var _db *sql.DB
func setupPersistence() {
_db = data.GetDatabase()
createTable()
2020-07-13 00:53:33 +03:00
}
func createTable() {
2020-07-13 00:53:33 +03:00
createTableSQL := `CREATE TABLE IF NOT EXISTS messages (
"id" string NOT NULL PRIMARY KEY,
"author" TEXT,
"body" TEXT,
"messageType" TEXT,
"visible" INTEGER,
"timestamp" DATE
);`
stmt, err := _db.Prepare(createTableSQL)
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
_, err = stmt.Exec()
if err != nil {
log.Warnln(err)
}
2020-07-13 00:53:33 +03:00
}
func addMessage(message models.ChatMessage) {
tx, err := _db.Begin()
if err != nil {
log.Fatal(err)
}
2020-10-14 14:47:39 +03:00
stmt, err := tx.Prepare("INSERT INTO messages(id, author, body, messageType, visible, timestamp) values(?, ?, ?, ?, ?, ?)")
2020-07-13 00:53:33 +03:00
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
2020-10-14 14:47:39 +03:00
_, err = stmt.Exec(message.ID, message.Author, message.Body, message.MessageType, 1, message.Timestamp)
2020-07-13 00:53:33 +03:00
if err != nil {
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
2020-07-13 00:53:33 +03:00
}
func getChatHistory() []models.ChatMessage {
history := make([]models.ChatMessage, 0)
// Get all messages sent within the past day
rows, err := _db.Query("SELECT * FROM messages WHERE visible = 1 AND messageType != 'SYSTEM' AND datetime(timestamp) >=datetime('now', '-1 Day')")
2020-07-13 00:53:33 +03:00
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id string
var author string
var body string
var messageType string
var visible int
var timestamp time.Time
2020-10-14 14:47:39 +03:00
err = rows.Scan(&id, &author, &body, &messageType, &visible, &timestamp)
2020-07-13 00:53:33 +03:00
if err != nil {
log.Debugln(err)
2020-10-16 23:57:23 +03:00
log.Error("There is a problem with the chat database. Please delete chat.db and restart Owncast.")
break
2020-07-13 00:53:33 +03:00
}
message := models.ChatMessage{}
message.ID = id
message.Author = author
message.Body = body
message.MessageType = messageType
message.Visible = visible == 1
message.Timestamp = timestamp
history = append(history, message)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
2020-07-13 00:53:33 +03:00
return history
}