//gets time of next arrival and updates UI private async Task <Arrival> ArrivalTimeAsync(int stopListIndex, int arrivalIndex) { //string stop = "4117202"; string stop; if (stopList.Count >= stopListIndex) { stop = stopList[stopListIndex].Value.StopId; } else if (stopList.Count > 0) { stop = stopList[0].Value.StopId; } else { stop = "4117202"; } agency.Replace(",", "%2C"); stop.Replace(",", "%2C"); //https://transloc-api-1-2.p.mashape.com/arrival-estimates.json?agencies=176&stops=4117206 string url = "https://transloc-api-1-2.p.mashape.com/arrival-estimates.json" + "?agencies={0}" + "&stops={1}";//json URL string queryUrl = string.Format(url, agency, stop); string translocResult = await client.GetStringAsync(queryUrl); //Result.Text = translocResult; ArrivalData apiData = JsonConvert.DeserializeObject <ArrivalData>(translocResult); if (apiData != null) { if (apiData.data.Count == 0) { return(null); } StopArrivals currentStop = null; foreach (StopArrivals stopInfo in apiData.data) { if (stopInfo.stop_id == stop) { currentStop = stopInfo; break; } } Arrival nextArrival = currentStop.arrivals[arrivalIndex % currentStop.arrivals.Count]; return(nextArrival); } return(null); }
public IActionResult BusDisplay(string lat, string lon, string nearestBusStop) { BusDisplayViewModel model = new BusDisplayViewModel(); model.UserLatitude = lat; model.UserLongitude = lon; model.ClosestBusStop = nearestBusStop; model.BusData = new List <ArrivalData>(); var utcTime = DateTime.UtcNow; TimeZoneInfo pacificZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); DateTime pacificTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, pacificZone); var currentTime = pacificTime.ToString("HH:mm:ss"); //get list of all available buses List <int> busList = new List <int>(); busList.Add(10); busList.Add(15); busList.Add(16); busList.Add(19); busList.Add(20); //from SQL DB for each bus stop, get next arrival time using (var db = new SlugContext()) { foreach (var item in busList) { ArrivalData data = new ArrivalData(); //Dynamically Choose Fields string fields = "CurrentStatus,BusNumber,Street,ID," + model.ClosestBusStop; //select var e = db.Schedules .Where(m => m.BusNumber == item && TimeSpan.Parse(m.Base) >= TimeSpan.Parse(currentTime)) .Select(DynamicSelectGenerator <Schedule>(fields)) .FirstOrDefault(); if (e == null) { e = db.Schedules .Where(m => m.BusNumber == item && TimeSpan.Parse(m.Base) >= TimeSpan.Parse("07:30:00")) .Select(DynamicSelectGenerator <Schedule>(fields)) .FirstOrDefault(); } Type type = typeof(Schedule); PropertyInfo[] pList = type.GetProperties(); foreach (PropertyInfo p in pList) { if (p.GetValue(e) != null) { if (p.Name == "Street") { data.Street = e.Street; } else if (p.Name == "BusNumber") { data.BusNumber = item.ToString(); } else if (p.Name == "ID") { data.ID = e.ID; } else if (p.Name == "CurrentStatus") { data.CurrentStatus = e.CurrentStatus; } else { if (p.Name != "LowCapacity" && p.Name != "MediumCapacity" && p.Name != "HighCapacity" && p.Name != "CurrentStatus") { data.ArrivalTime1 = p.GetValue(e).ToString(); string timed = p.GetValue(e).ToString(); timed = timed.Remove(timed.Length - 3); //removed seconds string timed1 = timed.Substring(0, 2); int h1 = Int32.Parse(timed1); if (h1 > 12) { h1 = h1 - 12; data.ArrivalTime = h1.ToString() + timed.Substring(2) + (" PM"); } else { data.ArrivalTime = timed + (" AM"); } } } } } if (data.ArrivalTime != "0" && !string.IsNullOrEmpty(data.ArrivalTime)) { model.BusData.Add(data); } } } return(View("BusDisplay", model)); }