public StopAndRoutePair(TrackingData trackingData) { this.Stop = trackingData.StopId; this.StopName = trackingData.StopName; this.Route = trackingData.RouteId; this.RouteName = trackingData.Route.ShortName; }
public async Task PopulateFavoritesAsync() { List<TrackingData> trackingData = new List<TrackingData>(); var favs = await Model.Favorites.GetAsync(); this.ShowNoFavoritesMessage = false; this.ShowNoItemsMessage = false; this.StopHeaderText = Favorites; this.StopSubHeaderText = RealTime; var failedFavorites = new List<StopAndRoutePair>(); var obaDataAccess = ObaDataAccess.Create(); foreach (StopAndRoutePair fav in favs) { try { TrackingData[] tdataArray = (from tdData in await obaDataAccess.GetTrackingDataForStopAsync(fav.Stop) where string.Equals(fav.Route, tdData.RouteId, StringComparison.OrdinalIgnoreCase) select tdData).Take(2).ToArray(); if (tdataArray.Length > 0) { foreach (TrackingData tdata in tdataArray) { tdata.IsFiltered = (this.isFiltered && string.Equals(this.filteredRouteId, tdata.RouteId, StringComparison.OrdinalIgnoreCase)); tdata.Context = TrackingData.Favorites; tdata.IsFavorite = true; trackingData.Add(tdata); } } else { // If we don't have an active trip for this favorite, add a dummy tracking data to the // list that links to the schedule page and shows NO DATA in the mins column. TrackingData tdata = new TrackingData(fav); tdata.IsFiltered = (this.isFiltered && string.Equals(this.filteredRouteId, tdata.RouteId, StringComparison.OrdinalIgnoreCase)); tdata.Context = TrackingData.Favorites; tdata.IsFavorite = true; trackingData.Add(tdata); } } catch { // Favorite likely no longer exists: remove it from the list! // For now, let's just eat the exception failedFavorites.Add(fav); } } // If any favorites failed to load, remove them from the list: if (failedFavorites.Count > 0) { foreach (var failedFav in failedFavorites) { await Model.Favorites.RemoveAsync(failedFav); } await Model.Favorites.PersistAsync(); } this.RealTimeData = trackingData.ToArray(); this.RouteAndMapsViewModels = null; this.LastUpdated = DateTime.Now; if (favs.Count == 0) { this.ShowNoFavoritesMessage = true; } else { this.ShowNoItemsMessage = trackingData.Count == 0; } }