public StopAndRoutePair(TrackingData trackingData)
 {
     this.Stop = trackingData.StopId;
     this.StopName = trackingData.StopName;
     this.Route = trackingData.RouteId;
     this.RouteName = trackingData.Route.ShortName;
 }
Example #2
0
 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;
            }
        }