func renderUserProfile( cdb *db.ContactDB, stationdb *db.StationDB, w http.ResponseWriter, r *http.Request, user userView, u *pb.User) { // TODO: It would be better if we could restrict to contacts which // have telemetry. contacts, err := cdb.SearchByUserId(*u.Id, 100) if err != nil { log.Printf("cdb.SearchByUserId error: %s", err.Error()) // Continue since this isn't a critical error. } heard_satellite_ids := make(map[string]bool) for _, c := range contacts { if c.SatelliteId == nil { continue } for _, b := range c.Blob { if b.Format != nil && *b.Format == pb.Contact_Blob_DATUM { heard_satellite_ids[*c.SatelliteId] = true break } } } var pv profileView pv.User = u pv.IsOwner = (*u.Id == user.Id) pv.HeardSatellites = make([]*pb.Satellite, 0) for satellite_id, _ := range heard_satellite_ids { pv.HeardSatellites = append(pv.HeardSatellites, db.GlobalSatelliteDB().Map[satellite_id]) } stations, err := stationdb.UserStations(*u.Id) if err != nil { log.Printf("Error getting user stations: %s", err.Error()) // Continue rendering since it's not a critial error. } pv.Stations = make([]*pb.Station, 0) for _, s := range stations { if s.Lat != nil && s.Lng != nil { pv.Stations = append(pv.Stations, s) } } c := NewRenderContext(user, pv) err = userViewTemplate.Get().ExecuteTemplate(w, "user.html", c) if err != nil { log.Printf("Error rendering user view: %s", err.Error()) http.Error(w, "", http.StatusInternalServerError) return } }