diff --git a/database/main.go b/database/main.go index c4cfe25..3440b56 100644 --- a/database/main.go +++ b/database/main.go @@ -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 +} diff --git a/socialdragon/main.go b/socialdragon/main.go index 8a37570..bff8838 100644 --- a/socialdragon/main.go +++ b/socialdragon/main.go @@ -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() diff --git a/socialdragon/socket.go b/socialdragon/socket.go index 7642b18..b00a038 100644 --- a/socialdragon/socket.go +++ b/socialdragon/socket.go @@ -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 } } }