func (p *Puzzle) UpdatableProgressInfo(c appengine.Context, h *hunt.Hunt, t *team.Team) UpdatableProgressInfo { u := UpdatableProgressInfo{ AvailablePoints: p.PointValue, Solved: false, GrantedPoints: 0, SolveTimes: nil, Answerable: t != nil && !t.Key.Equal(p.Team), } if t != nil { var solves []Solve _, err := datastore.NewQuery(solveKind).Ancestor(h.Key).Filter("Puzzle =", p.Key).Filter("Team =", t.Key).Limit(1).GetAll(c, &solves) if err != nil { c.Errorf("Error: %v", err) } if len(solves) > 0 { u.Solved = true u.GrantedPoints = solves[0].Points u.Answerable = false } } var solves []Solve _, err := datastore.NewQuery(solveKind).Ancestor(h.Key).Filter("Puzzle =", p.Key).Order("Time").GetAll(c, &solves) if err != nil { c.Errorf("Error: %v", err) } for _, s := range solves { u.SolveTimes = append(u.SolveTimes, s.Time.In(h.GetTimezone(c)).Format("15:04:05")) } return u }
func Log(c appengine.Context, h *hunt.Hunt, message string) { m := &Message{message, time.Now()} k := datastore.NewIncompleteKey(c, messageKind, h.Key) k, err := datastore.Put(c, k, m) if err != nil { c.Errorf("Error: %v", err) } broadcast.SendConsoleUpdate(c, h, m.ToString(c, h.GetTimezone(c))) }
func Logs(c appengine.Context, h *hunt.Hunt) []string { var messages []*Message _, err := datastore.NewQuery(messageKind).Ancestor(h.Key).Order("-Time").Limit(1000).GetAll(c, &messages) if err != nil { c.Errorf("Error: %v", err) return nil } var result []string for _, m := range messages { result = append(result, m.ToString(c, h.GetTimezone(c))) } return result }