Exemple #1
0
        public static async Task <IList <MotionActivityTimeBlock> > GetTimeBlocksForRange(this IMotionActivity activity,
                                                                                          DateTimeOffset start,
                                                                                          DateTimeOffset?end = null,
                                                                                          MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        {
            var list   = new List <MotionActivityTimeBlock>();
            var result = await activity.Query(start, end);

            var set = result
                      .Where(x => x.Confidence >= minConfidence)
                      .OrderBy(x => x.Timestamp)
                      .ToList();

            if (set.Count > 1)
            {
                MotionActivityEvent firstEvent = null;
                foreach (var item in set)
                {
                    if (firstEvent == null)
                    {
                        firstEvent = item;
                    }
                    else if (!firstEvent.Types.HasFlag(item.Types)) // has to have 1 of the types
                    {
                        var block = new MotionActivityTimeBlock(item.Types, firstEvent.Timestamp, item.Timestamp);
                        list.Add(block);

                        // first event of next time block
                        firstEvent = item;
                    }
                }
            }

            return(list);
        }
Exemple #2
0
        static MotionActivityEvent ToEvent(CMMotionActivity target)
        {
            var flags = MotionActivityType.Unknown;

            if (!target.Unknown)
            {
                flags &= MotionActivityType.Unknown;
                if (target.Automotive)
                {
                    flags |= MotionActivityType.Automotive;
                }

                if (target.Cycling)
                {
                    flags |= MotionActivityType.Cycling;
                }

                if (target.Running)
                {
                    flags |= MotionActivityType.Running;
                }

                if (target.Stationary)
                {
                    flags |= MotionActivityType.Stationary;
                }

                if (target.Walking)
                {
                    flags |= MotionActivityType.Walking;
                }
            }

            var conf     = (MotionActivityConfidence)Enum.Parse(typeof(MotionActivityConfidence), target.Confidence.ToString(), true);
            var activity = new MotionActivityEvent(flags, conf, (DateTime)target.StartDate);

            return(activity);
        }
Exemple #3
0
        public static async Task <IDictionary <MotionActivityType, TimeSpan> > GetTotalsForRange(this IMotionActivity activity,
                                                                                                 DateTimeOffset start,
                                                                                                 DateTimeOffset?end = null,
                                                                                                 MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        {
            var dict   = new Dictionary <MotionActivityType, TimeSpan>();
            var result = await activity.Query(start, end);

            var set = result
                      .Where(x => x.Confidence >= minConfidence)
                      .OrderBy(x => x.Timestamp)
                      .ToList();

            if (set.Count > 1)
            {
                MotionActivityEvent lastEvent = null;
                foreach (var item in set)
                {
                    if (lastEvent == null)
                    {
                        lastEvent = item;
                    }
                    else
                    {
                        if (!dict.ContainsKey(item.Types))
                        {
                            dict.Add(item.Types, TimeSpan.Zero);
                        }

                        var ts = item.Timestamp.Subtract(lastEvent.Timestamp);
                        dict[item.Types] += ts;
                    }
                }
            }
            return(dict);
        }