|
- package writefreely
-
- import (
- "github.com/writeas/web-core/log"
- "time"
- )
-
- type PostJob struct {
- ID int64
- PostID string
- Action string
- Delay int64
- }
-
- func addJob(app *App, p *PublicPost, action string, delay int64) error {
- j := &PostJob{
- PostID: p.ID,
- Action: action,
- Delay: delay,
- }
- return app.db.InsertJob(j)
- }
-
- func startPublishJobsQueue(app *App) {
- t := time.NewTicker(62 * time.Second)
- for {
- log.Info("[jobs] Done.")
- <-t.C
- log.Info("[jobs] Fetching email publish jobs...")
- jobs, err := app.db.GetJobsToRun("email")
- if err != nil {
- log.Error("[jobs] %s - Skipping.", err)
- continue
- }
- log.Info("[jobs] Running %d email publish jobs...", len(jobs))
- err = runJobs(app, jobs, true)
- if err != nil {
- log.Error("[jobs] Failed: %s", err)
- }
- }
- }
-
- func runJobs(app *App, jobs []*PostJob, reqColl bool) error {
- for _, j := range jobs {
- p, err := app.db.GetPost(j.PostID, 0)
- if err != nil {
- log.Info("[job #%d] Unable to get post: %s", j.ID, err)
- continue
- }
- if !p.CollectionID.Valid && reqColl {
- log.Info("[job #%d] Post %s not part of a collection", j.ID, p.ID)
- app.db.DeleteJob(j.ID)
- continue
- }
- coll, err := app.db.GetCollectionByID(p.CollectionID.Int64)
- if err != nil {
- log.Info("[job #%d] Unable to get collection: %s", j.ID, err)
- continue
- }
- coll.hostName = app.cfg.App.Host
- coll.ForPublic()
- p.Collection = &CollectionObj{Collection: *coll}
- err = emailPost(app, p, p.Collection.ID)
- if err != nil {
- log.Error("[job #%d] Failed to email post %s", j.ID, p.ID)
- continue
- }
- log.Info("[job #%d] Success for post %s.", j.ID, p.ID)
- app.db.DeleteJob(j.ID)
- }
- return nil
- }
|