protected override async void OnAppearing() { using (IProgressDialog progress = UserDialogs.Instance.Loading("Loading park details", null, null, true, MaskType.Black)) { var parkingSpot = Barrel.Current.Get <ParkingSpotPreview>("ParkingSpot_" + ParkingSpotPreview.Id); if (parkingSpot != null) { ParkingSpotPreview = parkingSpot; ParkTypesEnum parkTypesEnum = ParkTypesEnum.None; foreach (ParkTypesEnum parkSpot in ParkingSpotPreview.Details.ParkSpots.Keys) { parkTypesEnum |= parkSpot; } ParkingSpotPreview.ParkTypes = (int)parkTypesEnum; // Assign the correct values to the labels. ParkImage.Source = ParkingSpotPreview.Details.Image; ParkName.Text = ParkingSpotPreview.Name; ParkType.Text = new ParkTypeToStringConverter().Convert(ParkingSpotPreview.ParkTypes, null, null, CultureInfo.CurrentCulture).ToString(); ParkUnderground.Text = new BoolToIsUndergroundString().Convert(ParkingSpotPreview.Underground, null, null, CultureInfo.CurrentCulture).ToString(); ParkFloor.Text = "Floor: " + ParkingSpotPreview.Floor; ParkPaid.Text = new BoolToIsPaidStringConverter().Convert(ParkingSpotPreview.Paid, null, null, CultureInfo.CurrentCulture).ToString(); // Check what park spot type the park has. if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Handicap) == ParkTypesEnum.Handicap) { ParkSpotsHandicap.IsVisible = true; ParkSpotsHandicap.Text = "Handicap spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Handicap]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Family) == ParkTypesEnum.Family) { ParkSpotsFamily.IsVisible = true; ParkSpotsFamily.Text = "Family spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Family]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Eletric) == ParkTypesEnum.Eletric) { ParkSpotsEletric.IsVisible = true; ParkSpotsEletric.Text = "Eletric vehicle spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Eletric]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Bike) == ParkTypesEnum.Bike) { ParkSpotsBike.IsVisible = true; ParkSpotsBike.Text = "Bike spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Bike]; } // Check if the park is currently open. WeekDay currentDay = (WeekDay)DateTime.Today.DayOfWeek - 1; if ((int)currentDay == -1) { currentDay = WeekDay.Sunday; } ParkTime currentDayParkTime = ParkingSpotPreview.Details.ParkTimes.ParkingTimes.First(time => time.Value.WeekDay == currentDay).Value; TimeSpan currentTime = DateTime.Now.TimeOfDay; if (currentDayParkTime.AlwaysOpen) { OpenStatusLabel.Text = "Open all day"; } // Check wether the park close hour is after todays open hour. else if (currentDayParkTime.TimeClose > currentDayParkTime.TimeOpen) { // Check wether the park is currently open. if (currentTime > currentDayParkTime.TimeOpen && currentTime < currentDayParkTime.TimeClose) { OpenStatusLabel.Text = string.Format("Open until {0:hh\\:mm}", currentDayParkTime.TimeClose); } // Check wether the park has already closed. else if (currentTime > currentDayParkTime.TimeClose) { // Check if tomorrow will be open all day. WeekDay tomorrow = currentDay + 1; if ((int)tomorrow == 7) { tomorrow = WeekDay.Monday; } ParkTime tomorrowDayParkTime = ParkingSpotPreview.Details.ParkTimes.ParkingTimes.First(time => time.Value.WeekDay == tomorrow).Value; if (tomorrowDayParkTime.AlwaysOpen) { OpenStatusLabel.Text = "Closed. Will be open tomorrow all day"; } else { // Get tomorrow's opening time. OpenStatusLabel.Text = string.Format("Closed. Will open tomorrow at {0:hh\\:mm}", tomorrowDayParkTime.TimeOpen); } } // The park hasn't opened yet today. else { OpenStatusLabel.Text = string.Format("Closed. Will open today at {0:hh\\:mm}", currentDayParkTime.TimeOpen); } } // The close hour is before the open hour. else { // Check wether the park is currently after it's open hour. if (currentTime > currentDayParkTime.TimeOpen) { OpenStatusLabel.Text = "Open for the rest of the day."; } // Check wether the park is currently before it's close hour. else if (currentTime < currentDayParkTime.TimeClose) { OpenStatusLabel.Text = string.Format("Open until {0:hh\\:mm}", currentDayParkTime.TimeClose); } // The park has already closed but will open later today. else { OpenStatusLabel.Text = string.Format("Closed. Will open today at {0:hh\\:mm}", currentDayParkTime.TimeOpen); } } } else { ParkSpot[] parkSpots = await GetParkingSpot(ParkingSpotPreview.Id); ParkTypesEnum parkTypesEnum = ParkTypesEnum.None; if (ParkingSpotPreview.Details.ParkSpots.Count > 0) { foreach (ParkSpot parkSpot in parkSpots) { parkTypesEnum |= (ParkTypesEnum)parkSpot.CategoryId; } } else { foreach (ParkSpot parkSpot in parkSpots) { parkTypesEnum |= (ParkTypesEnum)parkSpot.CategoryId; ParkingSpotPreview.Details.ParkSpots.Add((ParkTypesEnum)parkSpot.CategoryId, parkSpot.NumSpots); } } ParkingSpotPreview.ParkTypes = (int)parkTypesEnum; ParkingSpotPreview.Details.Image = await GetParkingSpotImage(ParkingSpotPreview.Id); ParkTime[] parkTimes = await GetParkingTimes(ParkingSpotPreview.Id); foreach (ParkTime parkTime in parkTimes) { ParkingSpotPreview.Details.ParkTimes.ParkingTimes[parkTime.WeekDay].AlwaysOpen = parkTime.AlwaysOpen; ParkingSpotPreview.Details.ParkTimes.ParkingTimes[parkTime.WeekDay].TimeOpen = parkTime.TimeOpen; ParkingSpotPreview.Details.ParkTimes.ParkingTimes[parkTime.WeekDay].TimeClose = parkTime.TimeClose; } // Assign the correct values to the labels. ParkImage.Source = ParkingSpotPreview.Details.Image; ParkName.Text = ParkingSpotPreview.Name; ParkType.Text = new ParkTypeToStringConverter().Convert(ParkingSpotPreview.ParkTypes, null, null, CultureInfo.CurrentCulture).ToString(); ParkUnderground.Text = new BoolToIsUndergroundString().Convert(ParkingSpotPreview.Underground, null, null, CultureInfo.CurrentCulture).ToString(); ParkFloor.Text = "Floor: " + ParkingSpotPreview.Floor; ParkPaid.Text = new BoolToIsPaidStringConverter().Convert(ParkingSpotPreview.Paid, null, null, CultureInfo.CurrentCulture).ToString(); // Check what park spot type the park has. if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Handicap) == ParkTypesEnum.Handicap) { ParkSpotsHandicap.IsVisible = true; ParkSpotsHandicap.Text = "Handicap spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Handicap]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Family) == ParkTypesEnum.Family) { ParkSpotsFamily.IsVisible = true; ParkSpotsFamily.Text = "Family spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Family]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Eletric) == ParkTypesEnum.Eletric) { ParkSpotsEletric.IsVisible = true; ParkSpotsEletric.Text = "Eletric vehicle spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Eletric]; } if (((ParkTypesEnum)ParkingSpotPreview.ParkTypes & ParkTypesEnum.Bike) == ParkTypesEnum.Bike) { ParkSpotsBike.IsVisible = true; ParkSpotsBike.Text = "Bike spots: " + ParkingSpotPreview.Details.ParkSpots[ParkTypesEnum.Bike]; } // Check if the park is currently open. WeekDay currentDay = (WeekDay)DateTime.Today.DayOfWeek - 1; if ((int)currentDay == -1) { currentDay = WeekDay.Sunday; } ParkTime currentDayParkTime = ParkingSpotPreview.Details.ParkTimes.ParkingTimes.First(time => time.Value.WeekDay == currentDay).Value; TimeSpan currentTime = DateTime.Now.TimeOfDay; if (currentDayParkTime.AlwaysOpen) { OpenStatusLabel.Text = "Open all day"; } // Check wether the park close hour is after todays open hour. else if (currentDayParkTime.TimeClose > currentDayParkTime.TimeOpen) { // Check wether the park is currently open. if (currentTime > currentDayParkTime.TimeOpen && currentTime < currentDayParkTime.TimeClose) { OpenStatusLabel.Text = string.Format("Open until {0:hh\\:mm}", currentDayParkTime.TimeClose); } // Check wether the park has already closed. else if (currentTime > currentDayParkTime.TimeClose) { // Check if tomorrow will be open all day. WeekDay tomorrow = currentDay + 1; if ((int)tomorrow == 7) { tomorrow = WeekDay.Monday; } ParkTime tomorrowDayParkTime = ParkingSpotPreview.Details.ParkTimes.ParkingTimes.First(time => time.Value.WeekDay == tomorrow).Value; if (tomorrowDayParkTime.AlwaysOpen) { OpenStatusLabel.Text = "Closed. Will be open tomorrow all day"; } else { // Get tomorrow's opening time. OpenStatusLabel.Text = string.Format("Closed. Will open tomorrow at {0:hh\\:mm}", tomorrowDayParkTime.TimeOpen); } } // The park hasn't opened yet today. else { OpenStatusLabel.Text = string.Format("Closed. Will open today at {0:hh\\:mm}", currentDayParkTime.TimeOpen); } } // The close hour is before the open hour. else { // Check wether the park is currently after it's open hour. if (currentTime > currentDayParkTime.TimeOpen) { OpenStatusLabel.Text = "Open for the rest of the day."; } // Check wether the park is currently before it's close hour. else if (currentTime < currentDayParkTime.TimeClose) { OpenStatusLabel.Text = string.Format("Open until {0:hh\\:mm}", currentDayParkTime.TimeClose); } // The park has already closed but will open later today. else { OpenStatusLabel.Text = string.Format("Closed. Will open today at {0:hh\\:mm}", currentDayParkTime.TimeOpen); } } Barrel.Current.Add("ParkingSpot_" + ParkingSpotPreview.Id, ParkingSpotPreview, TimeSpan.FromDays(7)); } } }
protected override async void OnAppearing() { if (ParksList.Count == 0) { using (IProgressDialog progress = UserDialogs.Instance.Loading("Fetching parks...", null, null, true, MaskType.Black)) { await GetParksByLocation(locationToLoad); foreach (ParkingSpotPreview parkingSpotPreview in ParksList) { parkingSpotPreview.Distance = Location.CalculateDistance(locationToLoad, new Location(parkingSpotPreview.Coordinates[0], parkingSpotPreview.Coordinates[1]), DistanceUnits.Kilometers); } // Order parks by distance. ParksList = new ObservableCollection <ParkingSpotPreview>(ParksList.OrderBy(park => park.Distance).ToList()); parksListView.ItemsSource = ParksList; } foreach (ParkingSpotPreview parkingSpotPreview in ParksList) { var parkingSpot = Barrel.Current.Get <ParkingSpotPreview>("ParkingSpotPreview_" + parkingSpotPreview.Id); if (parkingSpot != null) { parkingSpotPreview.Details = new ParkingSpotDetails(); ParkTypesEnum parkTypesEnum = ParkTypesEnum.None; foreach (KeyValuePair <ParkTypesEnum, int> parkSpot in parkingSpot.Details.ParkSpots) { parkTypesEnum |= parkSpot.Key; parkingSpotPreview.Details.ParkSpots.Add(parkSpot.Key, parkSpot.Value); } parkingSpotPreview.ParkTypes = (int)parkTypesEnum; parkingSpotPreview.Details.Image = parkingSpot.Details.Image; } else { parkingSpotPreview.Details = new ParkingSpotDetails(); ParkSpot[] parkSpots = await GetParkingSpot(parkingSpotPreview.Id); ParkTypesEnum parkTypesEnum = ParkTypesEnum.None; foreach (ParkSpot parkSpot in parkSpots) { parkTypesEnum |= (ParkTypesEnum)parkSpot.CategoryId; parkingSpotPreview.Details.ParkSpots.Add((ParkTypesEnum)parkSpot.CategoryId, parkSpot.NumSpots); } parkingSpotPreview.ParkTypes = (int)parkTypesEnum; parkingSpotPreview.Details.Image = await GetParkingSpotImage(parkingSpotPreview.Id); parksListView.ItemsSource = null; parksListView.ItemsSource = ParksList; Barrel.Current.Add("ParkingSpotPreview_" + parkingSpotPreview.Id, parkingSpotPreview, TimeSpan.FromDays(7)); } } } }