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); }
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 }); }
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); } }
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); }
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); }
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); }
public StopVisitViewModel(StopVisit stopVisit) { _stopVisit = stopVisit ?? throw new ArgumentNullException(nameof(stopVisit)); ResetViewModel(); }
// 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); } }
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; } }