示例#1
0
 public RideRecorder(MainContext context)
 {
     this.context         = context;
     Ride                 = new CreateRideDto();
     readings             = new List <AccelerometerReadingDto>();
     jumpDetectionUtility = new JumpDetectionUtility(this);
 }
示例#2
0
 public RideRecorder(MainContext context)
 {
     this.context         = context;
     this.detectJumps     = context.Settings.IsDetectingJumps;
     Ride                 = new CreateRideDto();
     readings             = new List <AccelerometerReadingDto>();
     jumpDetectionUtility = new JumpDetectionUtility(context.GeoUtility);
 }
示例#3
0
        public async Task SaveRideUpload(CreateRideDto ride)
        {
            if (ride.Id == null)
            {
                ride.Id = Guid.NewGuid();

                PendingRideUploads.Add(ride);
            }

            await Storage.SaveObject(ride.Id.Value, ride);
        }
示例#4
0
        private int SaveRide(int userId, CreateRideDto model)
        {
            var routeSvgPath = new SvgBuilder(model.Locations.Cast <ILatLng>()).Build();

            Ride ride = new Ride();

            ride.StartUtc        = model.StartUtc;
            ride.EndUtc          = model.EndUtc;
            ride.UserId          = userId;
            ride.AverageSpeedMph = model.Locations.Average(i => i.Mph);
            ride.MaxSpeedMph     = model.Locations.Max(i => i.Mph);
            ride.DistanceMiles   = DistanceHelpers.GetDistanceMile(model.Locations.Cast <ILatLng>().ToList());
            ride.RouteSvgPath    = routeSvgPath;

            ride.RideLocations = model.Locations
                                 .Select(i => new RideLocation {
                AccuracyInMetres = i.AccuracyInMetres,
                Altitude         = i.Altitude,
                Latitude         = i.Latitude,
                Longitude        = i.Longitude,
                Mph       = i.Mph,
                Timestamp = i.Timestamp,
            })
                                 .ToList();

            ride.Jumps = model.Jumps
                         .Select(i => new Jump {
                Airtime   = i.Airtime,
                Number    = i.Number,
                Timestamp = i.Timestamp,
                Latitude  = i.Latitude,
                Longitude = i.Longitude,
            })
                         .ToList();

            ride.AccelerometerReadings = model.AccelerometerReadings
                                         .Select(i => new AccelerometerReading {
                Time = i.Timestamp,
                X    = i.X,
                Y    = i.Y,
                Z    = i.Z,
            })
                                         .ToList();

            context.Rides.Add(ride);

            context.SaveChanges();

            return(ride.RideId);
        }
示例#5
0
        public ActionResult <RideOverviewDto> Add(CreateRideDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            int userId = this.GetCurrentUserId();

            int rideId = SaveRide(userId, model);

            Analyser.AnalyseRide(context, userId, rideId);

            return(GetRideOverview(rideId));
        }
示例#6
0
        public async Task RemoveUploadRide(CreateRideDto ride)
        {
            PendingRideUploads.Remove(ride);

            await Storage.RemoveObject <CreateRideDto>(ride.Id.Value);
        }
示例#7
0
 public async Task <RideOverviewDto> UploadRide(CreateRideDto ride)
 {
     return(await PostAsync <RideOverviewDto>("rides/add", ride));
 }