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
|
Rejected
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type updatecallback func(Item)
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
ID uint `gorm:"primary_key"`
|
ID uint `gorm:"primary_key"`
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
|
@ -53,8 +55,10 @@ type User struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var Db *gorm.DB
|
var Db *gorm.DB
|
||||||
|
var cb updatecallback
|
||||||
|
|
||||||
func InitDb() {
|
func InitDb(callback updatecallback) {
|
||||||
|
cb = callback
|
||||||
var err error
|
var err error
|
||||||
Db, err = gorm.Open("postgres", config.C.DatabaseConnection)
|
Db, err = gorm.Open("postgres", config.C.DatabaseConnection)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,3 +69,8 @@ func InitDb() {
|
||||||
Db.Model(&Item{}).AddForeignKey("user_id", "user(id)", "RESTRICT", "RESTRICT")
|
Db.Model(&Item{}).AddForeignKey("user_id", "user(id)", "RESTRICT", "RESTRICT")
|
||||||
Db.AutoMigrate(&Item{}, &User{})
|
Db.AutoMigrate(&Item{}, &User{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (IT *Item) AfterSave(scope *gorm.Scope) (err error) {
|
||||||
|
go cb(*IT)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -17,12 +17,11 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config.LoadConfig(os.Getenv("HOME") + "/.socialdragon.toml")
|
config.LoadConfig(os.Getenv("HOME") + "/.socialdragon.toml")
|
||||||
database.InitDb()
|
database.InitDb(SendUpdate)
|
||||||
|
|
||||||
c := cron.New()
|
c := cron.New()
|
||||||
c.AddFunc("@every 30s", snapchat.LoadNewSnaps)
|
c.AddFunc("@every 30s", snapchat.LoadNewSnaps)
|
||||||
c.AddFunc("@every 30s", instagram.LoadNewInstas)
|
c.AddFunc("@every 30s", instagram.LoadNewInstas)
|
||||||
c.AddFunc("@every 5s", sendNewPicture)
|
|
||||||
c.Start()
|
c.Start()
|
||||||
|
|
||||||
go twitter.LoadNewTweets()
|
go twitter.LoadNewTweets()
|
||||||
|
|
|
@ -36,19 +36,12 @@ func wsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
sockets = append(sockets[:pos], sockets[pos+1:]...)
|
sockets = append(sockets[:pos], sockets[pos+1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendNewPicture() {
|
func SendUpdate(IT database.Item) {
|
||||||
var ITs []database.Item
|
|
||||||
database.Db.Offset(lastID).Limit(1).Find(&ITs)
|
|
||||||
for i, socket := range sockets {
|
for i, socket := range sockets {
|
||||||
for _, IT := range ITs {
|
err := socket.WriteJSON(IT)
|
||||||
err := socket.WriteJSON(IT)
|
if err != nil {
|
||||||
if IT.ID > lastID {
|
sockets = append(sockets[:i], sockets[i+1:]...)
|
||||||
lastID = IT.ID
|
continue
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
sockets = append(sockets[:i], sockets[i+1:]...)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue