Adds websocket-callback for all Item
This commit adds a callback which gets called on every saved Item in the database, which prints JSON of that Item-object to all connected websocket clients.
This commit is contained in:
parent
fc14acd76a
commit
0dacd3645e
|
@ -26,6 +26,8 @@ const (
|
|||
Rejected
|
||||
)
|
||||
|
||||
type updatecallback func(Item)
|
||||
|
||||
type Item struct {
|
||||
ID uint `gorm:"primary_key"`
|
||||
CreatedAt time.Time
|
||||
|
@ -53,8 +55,10 @@ type User struct {
|
|||
}
|
||||
|
||||
var Db *gorm.DB
|
||||
var cb updatecallback
|
||||
|
||||
func InitDb() {
|
||||
func InitDb(callback updatecallback) {
|
||||
cb = callback
|
||||
var err error
|
||||
Db, err = gorm.Open("postgres", config.C.DatabaseConnection)
|
||||
if err != nil {
|
||||
|
@ -65,3 +69,8 @@ func InitDb() {
|
|||
Db.Model(&Item{}).AddForeignKey("user_id", "user(id)", "RESTRICT", "RESTRICT")
|
||||
Db.AutoMigrate(&Item{}, &User{})
|
||||
}
|
||||
|
||||
func (IT *Item) AfterSave(scope *gorm.Scope) (err error) {
|
||||
go cb(*IT)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -17,12 +17,11 @@ import (
|
|||
|
||||
func main() {
|
||||
config.LoadConfig(os.Getenv("HOME") + "/.socialdragon.toml")
|
||||
database.InitDb()
|
||||
database.InitDb(SendUpdate)
|
||||
|
||||
c := cron.New()
|
||||
c.AddFunc("@every 30s", snapchat.LoadNewSnaps)
|
||||
c.AddFunc("@every 30s", instagram.LoadNewInstas)
|
||||
c.AddFunc("@every 5s", sendNewPicture)
|
||||
c.Start()
|
||||
|
||||
go twitter.LoadNewTweets()
|
||||
|
|
|
@ -36,19 +36,12 @@ func wsHandler(w http.ResponseWriter, r *http.Request) {
|
|||
sockets = append(sockets[:pos], sockets[pos+1:]...)
|
||||
}
|
||||
|
||||
func sendNewPicture() {
|
||||
var ITs []database.Item
|
||||
database.Db.Offset(lastID).Limit(1).Find(&ITs)
|
||||
func SendUpdate(IT database.Item) {
|
||||
for i, socket := range sockets {
|
||||
for _, IT := range ITs {
|
||||
err := socket.WriteJSON(IT)
|
||||
if IT.ID > lastID {
|
||||
lastID = IT.ID
|
||||
}
|
||||
if err != nil {
|
||||
sockets = append(sockets[:i], sockets[i+1:]...)
|
||||
continue
|
||||
}
|
||||
err := socket.WriteJSON(IT)
|
||||
if err != nil {
|
||||
sockets = append(sockets[:i], sockets[i+1:]...)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue