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); }
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); }
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); }