/// <summary>
        /// GetTimeSeriesDataList has to do some custom manipulation with the returned representation
        /// </summary>
        /// <param name="serializer"></param>
        /// <param name="timeSeriesDataJson"></param>
        /// <returns></returns>
        internal static HeartActivitiesIntraday GetHeartRateIntraday(this JsonDotNetSerializer serializer, DateTime date, string heartRateIntradayJson)
        {
            if (string.IsNullOrWhiteSpace(heartRateIntradayJson))
            {
                throw new ArgumentNullException("heartRateIntradayJson", "heartRateIntradayJson can not be empty, null or whitespace.");
            }

            JToken activitiesHeartIntraday = JToken.Parse(heartRateIntradayJson)["activities-heart-intraday"];
            JToken dataset = activitiesHeartIntraday["dataset"];

            HeartActivitiesIntraday result = new HeartActivitiesIntraday
            {
                ActivitiesHeart = serializer.Deserialize <IntradayActivitiesHeart>(JToken.Parse(heartRateIntradayJson)["activities-heart"].First()),
                Dataset         = (from item in dataset
                                   select new DatasetInterval
                {
                    Time = DateTime.Parse(date.ToString("yyyy-MM-dd") + " " + item["time"].ToString()),            //here, maybe pass in the date so we have a full object of date and time
                    Value = int.Parse(item["value"].ToString())
                }).ToList(),
                DatasetInterval = Convert.ToInt32(activitiesHeartIntraday["datasetInterval"]),
                DatasetType     = activitiesHeartIntraday["datasetType"].ToString()
            };

            return(result);
        }
Esempio n. 2
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            HeartActivitiesIntraday heartActivitiesIntraday = value as HeartActivitiesIntraday;

            //{
            writer.WriteStartObject();

            writer.WritePropertyName("ActivitiesHeart");
            writer.WriteValue(heartActivitiesIntraday.ActivitiesHeart);

            // "DatasetInterval" : "1"
            writer.WritePropertyName("DatasetInterval");
            writer.WriteValue(heartActivitiesIntraday.DatasetInterval);

            // "DatasetType" : "SecondsHeartrate"
            writer.WritePropertyName("DatasetType");
            writer.WriteValue(heartActivitiesIntraday.DatasetType);

            writer.WritePropertyName("Dataset");
            writer.WriteStartArray();
            foreach (DatasetInterval datasetInverval in heartActivitiesIntraday.Dataset)
            {
                // "Time" : "2008-09-22T14:01:54.9571247Z"
                writer.WritePropertyName("Time");
                writer.WriteValue(datasetInverval.Time.ToString("o"));

                // "Value": 1
                writer.WritePropertyName("Value");
                writer.WriteValue(datasetInverval.Value);
            }
            writer.WriteEndArray();

            //}
            writer.WriteEndObject();
        }
Esempio n. 3
0
        public void Can_Deserialize_HeartRateIntradayTimeSeries()
        {
            //assemble
            string               content   = SampleDataHelper.GetContent("GetHeartRateIntradayTimeSeries1.1.json");
            DateTime             date      = DateTime.Parse("2017-08-21"); //hardcoded because extension expects a date. In any other use case, a date would be available
            JsonDotNetSerializer seralizer = new JsonDotNetSerializer();

            //act
            HeartActivitiesIntraday stats = seralizer.GetHeartRateIntraday(date, content);

            //assert
            ValidateHeartRateIntradayTimeSeriesData(stats);
        }
Esempio n. 4
0
        private void ValidateHeartRateIntradayTimeSeriesData(HeartActivitiesIntraday activity)
        {
            //Activities Heart Intraday
            var actIntraday = activity;

            actIntraday.Dataset.Count().Should().Be(96);                                 //Dataset count

            actIntraday.Dataset[0].Time.TimeOfDay.Should().Be(new TimeSpan(0, 0, 0, 0)); //First entry
            actIntraday.Dataset[0].Value.Should().Be(57);

            actIntraday.Dataset[95].Time.TimeOfDay.Should().Be(new TimeSpan(0, 23, 45, 0)); //Last entry
            actIntraday.Dataset[95].Value.Should().Be(47);

            actIntraday.DatasetInterval.Should().Be(15);   //Dataset interval

            actIntraday.DatasetType.Should().Be("minute"); //Dataset Type

            //Activities Heart
            var act = activity.ActivitiesHeart;

            act.DateTime.Should().Be(new DateTime(2017, 8, 21));       //DateTime

            act.HeartRateZones.Count().Should().Be(4);                 //Zones Count

            act.HeartRateZones[0].CaloriesOut.Should().Be(2071.96748); //First zone
            act.HeartRateZones[0].Max.Should().Be(92);
            act.HeartRateZones[0].Min.Should().Be(30);
            act.HeartRateZones[0].Minutes.Should().Be(1387);
            act.HeartRateZones[0].Name.Should().Be("Out of Range");

            act.HeartRateZones[3].CaloriesOut.Should().Be(186.84666); //Last zone
            act.HeartRateZones[3].Max.Should().Be(220);
            act.HeartRateZones[3].Min.Should().Be(156);
            act.HeartRateZones[3].Minutes.Should().Be(14);
            act.HeartRateZones[3].Name.Should().Be("Peak");

            act.CustomHeartRateZones.Count().Should().Be(0); //Empty CustomHeart Rate Zones

            act.Value.Should().Be(55.44);                    //Value
        }
Esempio n. 5
0
        public async Task GetHeartRateIntradayTimeSeriesAsync_Success()
        {
            string content = SampleDataHelper.GetContent("GetHeartRateIntradayTimeSeries1.1.json");

            Func <HttpResponseMessage> responseMessage = new Func <HttpResponseMessage>(() => new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(content)
            });

            Action <HttpRequestMessage, CancellationToken> verification = new Action <HttpRequestMessage, CancellationToken>((message, token) =>
            {
                string uri = $"https:/" + $"/api.fitbit.com/1.1/user/-/activities/heart/date/{DateTime.Today:yyyy-MM-dd}/{DateTime.Today:yyyy-MM-dd}/15min/time/00:00:00/23:59:59.json";
                Assert.AreEqual(HttpMethod.Get, message.Method);
                Assert.AreEqual(uri, message.RequestUri.AbsoluteUri);
            });

            FitbitClient fitbitClient = Helper.CreateFitbitClient(responseMessage, verification);

            HeartActivitiesIntraday response = await fitbitClient.GetHeartRateIntraday(DateTime.Today, HeartRateResolution.fifteenMinute);

            ValidateHeartRateIntradayTimeSeriesData(response);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject jsonObject = JObject.Load(reader);
            var     properties = jsonObject.Properties().ToList();

            HeartActivitiesIntraday result = new HeartActivitiesIntraday();

            result.DatasetInterval = Convert.ToInt32(jsonObject["DatasetInterval"]);
            result.DatasetType     = jsonObject["DatasetType"].ToString();
            result.Dataset         = new List <DatasetInterval>();

            foreach (JToken item in jsonObject["Dataset"].Children())
            {
                result.Dataset.Add(new DatasetInterval()
                {
                    Time  = DateTime.Parse(item["Time"].ToString()),
                    Value = Convert.ToInt32(item["Value"])
                });
            }
            ;

            return(result);
        }