func homeHandler(stationdb *db.StationDB, m *rpc.Client, w http.ResponseWriter, r *http.Request, user userView) { log.Printf("userid: %s", user.Id) hc := homeContext{} n, err := stationdb.NumStations() if err != nil { n = -1 } hc.NumStations = n hc.Stations, err = stationdb.UserStations(user.Id) if err != nil { log.Printf("Error getting user stations: %s", err.Error()) // Continue rendering since it's not a critial error. } var args mux.StationCountArgs var count mux.StationCountResult err = m.Call("Coordinator.StationCount", args, &count) if err != nil { count.Count = -1 } hc.NumOnlineStations = count.Count c := NewRenderContext(user, hc) err = homeTemplate.Get().ExecuteTemplate(w, "home.html", c) if err != nil { log.Printf("Error rendering home page: %s", err.Error()) http.Error(w, "", http.StatusInternalServerError) return } }
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 } }
func satelliteViewHandler( cdb *db.ContactDB, userdb *db.UserDB, stationdb *db.StationDB, commentdb *db.CommentDB, w http.ResponseWriter, r *http.Request, user userView) { if len(r.URL.Path) < len(satelliteURLPrefix) { http.Error(w, "Invalid path", http.StatusBadRequest) return } id := r.URL.Path[len(satelliteURLPrefix):] sat := db.GlobalSatelliteDB().Map[id] if sat == nil { http.NotFound(w, r) return } // TODO: It would be better if we could restrict to contacts which // have telemetry. contacts, err := cdb.SearchBySatelliteId(id, 100) if err != nil { log.Printf("cdb.SearchBySatelliteId error: %s", err.Error()) // Continue since this isn't a critical error. } t := make([]pb.TelemetryDatum, 0) var latest_contact *contactView for _, c := range contacts { for _, b := range c.Blob { if b.Format != nil && *b.Format == pb.Contact_Blob_DATUM { t = append(t, *b.Datum) if latest_contact == nil { latest_contact = fillContactView( *c, userdb) } } } } sv := satelliteViewContext{} sv.S = sat if sat.Schema != nil { t := fe_telemetry.RenderTelemetry(*sat.Schema, t, "en") if len(t) > 0 { sv.TelemetryHead = t[0] } if len(t) > 1 { sv.TelemetryTail = t[1:] } } sv.LatestContact = latest_contact sv.Comments, _ = LoadCommentsByObjectId( satelliteObjectId(id), commentdb, userdb) sv.Stations, err = stationdb.UserStations(user.Id) if err != nil { log.Printf("Error getting user stations: %s", err.Error()) // Continue rendering since it's not a critial error. } c := NewRenderContext(user, &sv) err = satelliteViewTemplate.Get().ExecuteTemplate( w, "satellite.html", c) if err != nil { log.Printf("Error rendering satellite view: %s", err.Error()) http.Error(w, "", http.StatusInternalServerError) return } }