コード例 #1
0
        public StopDetailPage(StopVisit sv)
        {
            InitializeComponent();
            BindingContext = App.Container.Resolve <StopDetailViewModel>(new TypedParameter(typeof(StopVisit), sv), new TypedParameter(typeof(INavigation), Navigation));

            SetupMap();
            SetMapLocation(ViewModel.Name, ViewModel.Latitude, ViewModel.Longitude, ViewModel.StopVisit.Accuracy);
        }
コード例 #2
0
 public static TabiApiClient.Models.StopVisit ToApiModel(this StopVisit stopVisit)
 {
     return(new TabiApiClient.Models.StopVisit()
     {
         LocalId = stopVisit.Id,
         LocalStopId = stopVisit.StopId,
         BeginTimestamp = stopVisit.BeginTimestamp,
         EndTimestamp = stopVisit.EndTimestamp
     });
 }
コード例 #3
0
 public void ReplaceStopsWithExisting(StopVisit stopVisit, Action <StopVisit> action)
 {
     if (stopVisit != null)
     {
         if (stopVisit.NextTrack != null && stopVisit.NextTrack.NextStop != null)
         {
             ReplaceStopsWithExisting(stopVisit.NextTrack.NextStop, action);
         }
         action.Invoke(stopVisit);
     }
 }
コード例 #4
0
        public List <Tuple <StopVisit, List <PositionEntry> > > StopsAndPositionsBetween(DateTimeOffset begin, DateTimeOffset end)
        {
            List <StopVisit>     visits             = StopsBetween(begin, end);
            List <PositionEntry> allPositionEntries = _repoManager.PositionEntryRepository.FilterPeriodAccuracy(begin, end, 100);
            List <Tuple <StopVisit, List <PositionEntry> > > visitsPositions = new List <Tuple <StopVisit, List <PositionEntry> > >();

            Tuple <StopVisit, List <PositionEntry> > currentTuple = new Tuple <StopVisit, List <PositionEntry> >(null, new List <PositionEntry>());
            bool currentTupleAdded = true;

            foreach (PositionEntry p in allPositionEntries)
            {
                StopVisit lastVisit = currentTuple.Item1;

                StopVisit currentVisit = PositionInStop(p, visits);

                if (currentVisit != null)
                {
                    Debug.WriteLine("currentvisit not null");
                    Debug.WriteLine("CurrentVisit: {0} lastvisit: {1}", currentVisit, lastVisit);

                    // New stopvisit
                    if (!currentVisit.Equals(lastVisit))
                    {
                        Debug.WriteLine("currentvisit not equal lastvisit");

                        Debug.WriteLine("Different visit items " + visits.Count);


                        // Store old visit and positions in list and create new tuple to store data in
                        if (currentTuple.Item2.Count > 0)
                        {
                            visitsPositions.Add(currentTuple);
                        }
                        currentTuple      = new Tuple <StopVisit, List <PositionEntry> >(currentVisit, new List <PositionEntry>());
                        currentTupleAdded = false;
                    }
                    currentTuple.Item2.Add(p);
                    Debug.WriteLine("Added items" + currentTuple.Item2.Count);
                }
            }

            if (!currentTupleAdded)
            {
                visitsPositions.Add(currentTuple);
            }


            Debug.WriteLine("visitspositions " + visitsPositions.Count);

            return(visitsPositions);
        }
コード例 #5
0
        public StopVisit SaveStopVisitChain(StopVisit sv)
        {
            if (sv.NextTrack != null && sv.NextTrack.StartTime != default(DateTimeOffset))
            {
                sv.NextTrack   = SaveTrackEntryChain(sv.NextTrack);
                sv.NextTrackId = sv.NextTrack.Id;
            }

            if (sv.Stop.Id == 0)
            {
                _stopRepository.Add(sv.Stop);
            }
            sv.StopId = sv.Stop.Id;

            _stopVisitRepository.Add(sv);

            return(sv);
        }
コード例 #6
0
        public static StopVisit ToStopVisitAndStop(this ResolvedStop stop)
        {
            StopVisit sv = new StopVisit()
            {
                BeginTimestamp = stop.BeginTimestamp,
                EndTimestamp   = stop.EndTimestamp,
                StopAccuracy   = stop.AverageAccuracy,
                Latitude       = stop.Latitude,
                Longitude      = stop.Longitude,
                Stop           = stop.ToStop(),
            };

            if (stop.NextTrip != null)
            {
                sv.NextTrack = stop.NextTrip.ToTrackEntry();
            }

            return(sv);
        }
コード例 #7
0
        public StopVisitViewModel(StopVisit stopVisit)
        {
            _stopVisit = stopVisit ?? throw new ArgumentNullException(nameof(stopVisit));

            ResetViewModel();
        }
コード例 #8
0
        // Resolve data for period including
        public void ResolveData(DateTimeOffset begin, DateTimeOffset end)
        {
            // Get latest StopVisit/Track from db
            StopVisit  lastStopVisit  = _stopVisitRepository.LastStopVisit();
            TrackEntry lastTrackEntry = _trackEntryRepository.LastTrackEntry();

            DateTimeOffset newBeginTime = lastStopVisit != null ? lastStopVisit.BeginTimestamp : begin;

            // Fetch Positions starting from beginning
            List <PositionEntry> fetchedPositions = _positionEntryRepository.FilterPeriodAccuracy(newBeginTime, end, _accuracy);

            IList <ResolvedStop> resolvedStops = _stopResolver.ResolveStops(fetchedPositions);

            var       rStop = resolvedStops.FirstOrDefault();
            StopVisit first = null;

            if (rStop != null)
            {
                // Convert ResolvedStop to StopVisit (recursively)
                first = rStop.ToStopVisitAndStop();
            }

            // Merge last StopVisit/Track from db and new stopvisits/tracks
            if (first != null && first.BeginTimestamp == lastStopVisit?.BeginTimestamp)
            {
                lastStopVisit.EndTimestamp = first.EndTimestamp;
                lastStopVisit.StopAccuracy = first.StopAccuracy;
                lastStopVisit.Latitude     = first.Latitude;
                lastStopVisit.Longitude    = first.Longitude;

                if (first.NextTrack != null && first.NextTrack.TimeTravelled != TimeSpan.Zero)
                {
                    lastStopVisit.NextTrack = first.NextTrack;
                    _trackEntryRepository.Add(lastStopVisit.NextTrack);
                    lastStopVisit.NextTrackId = lastStopVisit.NextTrack.Id;
                }

                _stopVisitRepository.Update(lastStopVisit);
                first = first.NextTrack?.NextStop;
            }

            // Replace StopVisits name if there is ONE stop nearby.
            ReplaceStopsWithExisting(first, (s =>
            {
                if (s.Stop != null)
                {
                    IList <Stop> nearestStops = _stopRepository.NearestStops(s.Latitude, s.Longitude, 30).ToList();
                    if (nearestStops.Count == 1)
                    {
                        s.Stop = nearestStops.First();
                    }
                }
            }));


            // Store new StopVisits, Tracks
            if (first != null)
            {
                SaveStopVisitChain(first);
            }
        }
コード例 #9
0
        public StopDetailNameViewModel(IRepoManager repoManager, INavigation navigation, IUserInterfaceConfiguration userInterfaceConfiguration, StopVisitViewModel stopVisitViewModel)

        {
            _repoManager                = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _navigation                 = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _stopVisitViewModel         = stopVisitViewModel ?? throw new ArgumentNullException(nameof(stopVisitViewModel));
            _userInterfaceConfiguration = userInterfaceConfiguration ?? throw new ArgumentNullException(nameof(userInterfaceConfiguration));

            SaveCommand = new Command(async() =>
            {
                saved        = true;
                Stop newStop = StopVisit.SaveViewModelToStop();
                if (useExistingStop != null)
                {
                    stopVisitViewModel.StopVisit.StopId = useExistingStop.Id;;
                }
                else if (ChangeAll && nameChanged)
                {
                    newStop.Id = stopVisitViewModel.StopVisit.StopId;
                    stopVisitViewModel.StopVisit.Stop = newStop;
                    repoManager.StopRepository.Update(newStop);
                }
                else if (nameChanged)
                {
                    // Add to repo and newStop will have an ID set
                    repoManager.StopRepository.Add(newStop);
                    stopVisitViewModel.StopVisit.StopId = newStop.Id;
                    stopVisitViewModel.StopVisit.Stop   = newStop;
                }

                repoManager.StopVisitRepository.Update(stopVisitViewModel.StopVisit);

                await PopPageAsync();
            });
            CancelCommand = new Command(async() =>
            {
                StopVisit.ResetViewModel();
                await PopPageAsync();
            });

            ChangeAllVisible = ShouldChangeAllBeVisible();
            if (ChangeAllVisible)
            {
                changeAll = true;
            }

            StopVisit.PropertyChanged += NameChanged;


            if (_userInterfaceConfiguration.StopNameReplaceAllEnabled)
            {
                // Only show the list of possible nearby stops if there are more than 1 stops nearby.
                int existingStopVisits = _repoManager.StopVisitRepository.MatchingStop(stopVisitViewModel.StopVisit.Stop).ToList().Count;
                if (existingStopVisits > 1)
                {
                    changeAllVisible = true;
                    changeAll        = true;
                }
            }

            if (_userInterfaceConfiguration.SuggestPossibleNearbyStopsEnabled)
            {
                PossibleStops        = ListNearbyStops(stopVisitViewModel, _userInterfaceConfiguration.SuggestPossibleNearbyStopsDistance);
                PossibleStopsVisible = PossibleStops.Count >= _userInterfaceConfiguration.SuggestPossibleNearbyStopsCount;
            }
        }