Esempio n. 1
0
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
}
Esempio n. 2
0
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)))
}
Esempio n. 3
0
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
}