Exemple #1
0
        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));
                    }
                }
            }
        }