/// <summary>
        /// Converts the timeseries resource into the property to acces the data
        /// </summary>
        /// <param name="timeseriesResource"></param>
        /// <returns></returns>
        internal static string ToTimeSeriesProperty(this TimeSeriesResourceType timeseriesResource)
        {
            var timeSeriesResourceDisplay = timeseriesResource.GetStringValue();
            if (timeSeriesResourceDisplay.StartsWith("/"))
            {
                timeSeriesResourceDisplay = timeSeriesResourceDisplay.TrimStart(new[] { '/' });
            }

            return timeSeriesResourceDisplay.Replace("/", "-");
        }
Ejemplo n.º 2
0
        public static decimal ConvertFitbitValue(TimeSeriesResourceType type, string value)
        {
            // if value is "0" we're going to ignore it so no point converting.
            if (value == "0")
            {
                return(FitbitConversion.InvalidValue);
            }

            if (type == TimeSeriesResourceType.TimeEnteredBed)
            {
                return(ConvertFitbitTimeEnteredBed(value));
            }

            return(Convert.ToDecimal(value));
        }
Ejemplo n.º 3
0
        private void DownloadMetric(TimeSeriesResourceType type, DateTime dateStart)
        {
            TimeSeriesDataList fitbitData = null;

            try
            {
                fitbitData = _client.GetTimeSeriesAsync(type, dateStart, DateRangePeriod.OneYear).Result;
                SaveSeries(type, fitbitData);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return;
            }
        }
Ejemplo n.º 4
0
 private void DownloadMetric(TimeSeriesResourceType type, bool fullDownload)
 {
     if (!fullDownload)
     {
         DownloadMetric(type, DateTime.UtcNow);
     }
     else
     {
         // if initial download or a forced refresh then attemt to download last 5 years worth of data.
         for (int year = 0; year >= -5; year--)
         {
             DownloadMetric(type, DateTime.UtcNow.AddYears(year));
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Get TimeSeries data for another user accessible with this user's credentials
        /// </summary>
        /// <param name="timeSeriesResourceType"></param>
        /// <param name="baseDate"></param>
        /// <param name="endDateOrPeriod"></param>
        /// <param name="encodedUserId"></param>
        /// <returns></returns>
        private async Task <TimeSeriesDataListInt> GetTimeSeriesIntAsync(TimeSeriesResourceType timeSeriesResourceType, DateTime baseDate, string endDateOrPeriod, string encodedUserId)
        {
            var apiCall = FitbitClientHelperExtensions.ToFullUrl("/1/user/{0}{1}/date/{2}/{3}.json", encodedUserId, timeSeriesResourceType.GetStringValue(), baseDate.ToFitbitFormat(), endDateOrPeriod);

            HttpResponseMessage response = await HttpClient.GetAsync(apiCall);

            await HandleResponse(response);

            string responseBody = await response.Content.ReadAsStringAsync();

            var serializer = new JsonDotNetSerializer {
                RootProperty = timeSeriesResourceType.ToTimeSeriesProperty()
            };

            return(serializer.GetTimeSeriesDataListInt(responseBody));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Get TimeSeries data for another user accessible with this user's credentials
        /// </summary>
        /// <param name="timeSeriesResourceType"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime baseDate, string endDateOrPeriod, string userId)
        {
            string userSignifier = "-"; //used for current user

            if (!string.IsNullOrWhiteSpace(userId))
            {
                userSignifier = userId;
            }

            string      requestUrl = string.Format("/1/user/{0}{1}/date/{2}/{3}.xml", userSignifier, StringEnum.GetStringValue(timeSeriesResourceType), baseDate.ToString("yyyy-MM-dd"), endDateOrPeriod);
            RestRequest request    = new RestRequest(requestUrl);

            request.OnBeforeDeserialization = resp =>
            {
                XDocument doc = XDocument.Parse(resp.Content);
                //IEnumerable<XElement> links = doc.Descendants("result");
                var rootElement = doc.Descendants("result").FirstOrDefault().Descendants().FirstOrDefault();


                if (rootElement != null && !string.IsNullOrWhiteSpace(rootElement.Name.LocalName))
                {
                    request.RootElement = rootElement.Name.LocalName;
                }

                //foreach (XElement link in links)
                //{
                //RemoveDuplicateElement(link, "category");
                //RemoveDuplicateElement(link, "click-commission");
                //RemoveDuplicateElement(link, "creative-height");
                //RemoveDuplicateElement(link, "creative-width");
                //}
            };

            //request.RootElement = timeSeriesResourceType.GetRootElement();

            var response = restClient.Execute <TimeSeriesDataListInt>(request);


            HandleResponse(response);

            /*
             */
            return(response.Data);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Return a FitnessViewer.MetricType for a given fitbit resource type.
        /// </summary>
        /// <param name="type">Fitbit resource type</param>
        /// <returns></returns>
        public static MetricType FromFitBitType(TimeSeriesResourceType type)
        {
            switch (type)
            {
            case TimeSeriesResourceType.Weight: { return(MetricType.Weight); }

            case TimeSeriesResourceType.Fat: { return(MetricType.BodyFat); }

            case TimeSeriesResourceType.CaloriesIn: { return(MetricType.CaloriesIn); }

            case TimeSeriesResourceType.MinutesAsleep: { return(MetricType.SleepMinutes); }

            case TimeSeriesResourceType.TimeInBed: { return(MetricType.TimeInBed); }

            case TimeSeriesResourceType.TimeEnteredBed: { return(MetricType.TimeEnteredBed); }

            default: { return(MetricType.Invalid); }
            }
        }
Ejemplo n.º 8
0
        private void SaveSeries(TimeSeriesResourceType type, TimeSeriesDataList fitbitData)
        {
            var           metricType             = MetricTypeConversion.FromFitBitType(type);
            List <Metric> currentlyStoredMetrics = _unitOfWork.CRUDRepository.GetByUserId <Metric>(_userId)
                                                   .Where(m => m.MetricType == metricType)
                                                   .ToList();

            foreach (Fitbit.Models.TimeSeriesDataList.Data item in fitbitData.DataList)
            {
                // no value so ignore
                if (string.IsNullOrEmpty(item.Value))
                {
                    continue;
                }

                decimal convertedValue = FitbitConversion.ConvertFitbitValue(type, item.Value);

                // 0 = no value for the type/date so ignore
                if (convertedValue == FitbitConversion.InvalidValue)
                {
                    continue;
                }

                // check if we already have a metric for the given date.
                var existingMetric = currentlyStoredMetrics.Where(m => m.Recorded == item.DateTime).FirstOrDefault();

                if (existingMetric == null)
                {
                    // add metric
                    _unitOfWork.Metrics.AddMetric(Metric.CreateMetric(_userId, metricType, item.DateTime, convertedValue, false));
                }
                else
                {
                    // don't overwrite any manually entered metrics.
                    if (!existingMetric.IsManual)
                    {
                        existingMetric.Value = convertedValue;
                        _unitOfWork.Metrics.UpdateMetric(existingMetric);
                    }
                }
            }
            _unitOfWork.Complete();
        }
        /// <summary>
        /// Converts FitFibt Time Series Data to AF Time Series Data
        /// </summary>
        /// <param name="tsDataList">FitBit Time Series data</param>
        /// <param name="type">Type of fit Bit data - this will determine the attribute name to write into. It can also influence the conversion logic.</param>
        /// <param name="element">The element that contains the attribute to write into</param>
        /// <param name="attributeName">Name of the AF Attribute in which time series data will be written into.</param>
        /// <returns></returns>
        public static AFValues ConvertToAFValues(TimeSeriesDataList tsDataList, TimeSeriesResourceType type, AFElement element, string attributeName)
        {
            // creates the list of values
            AFValues values = new AFValues();
            foreach (var result in tsDataList.DataList)
            {
                AFValue val = null;
                if (type != TimeSeriesResourceType.TimeEnteredBed)
                {
                    val = new AFValue(Convert.ToSingle(result.Value), new AFTime(result.DateTime));
                }
                else
                {
                    val = new AFValue(result.Value, new AFTime(result.DateTime));
                }
                values.Add(val);

            }

            values.Attribute = element.Attributes[attributeName];

            return values;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Get TimeSeries data for another user accessible with this user's credentials
        /// </summary>
        /// <param name="timeSeriesResourceType"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string userId)
        {
            string userSignifier = "-"; //used for current user
            if (!string.IsNullOrWhiteSpace(userId))
                userSignifier = userId;

            string requestUrl = string.Format("/1/user/{0}{1}/date/{2}/{3}.xml", userSignifier, StringEnum.GetStringValue(timeSeriesResourceType), startDate.ToString("yyyy-MM-dd"), endDate.ToString("yyyy-MM-dd"));
            RestRequest request = new RestRequest(requestUrl);

            request.OnBeforeDeserialization = resp =>
            {
                XDocument doc = XDocument.Parse(resp.Content);
                //IEnumerable<XElement> links = doc.Descendants("result");
                var rootElement = doc.Descendants("result").FirstOrDefault().Descendants().FirstOrDefault();

                request.RootElement = rootElement.Name.LocalName;

                //foreach (XElement link in links)
                //{
                //RemoveDuplicateElement(link, "category");
                //RemoveDuplicateElement(link, "click-commission");
                //RemoveDuplicateElement(link, "creative-height");
                //RemoveDuplicateElement(link, "creative-width");
                //}

            };

            //request.RootElement = timeSeriesResourceType.GetRootElement();

            var response = restClient.Execute<TimeSeriesDataListInt>(request);

            HandleResponseCode(response.StatusCode);
            /*
            */
            return response.Data;
        }
Ejemplo n.º 11
0
 public FitbitStream(TimeSeriesResourceType fitbitSource, string attributeName, UOM uom)
 {
     FitbitSource = fitbitSource;
     AttributeName = attributeName;
     UnitsOfMeasure = uom;
 }
Ejemplo n.º 12
0
 public TimeSeriesDataList GetTimeSeries(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string userId)
 {
     return(GetTimeSeries(timeSeriesResourceType, endDate, period.GetStringValue(), userId));
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Get TimeSeries data for this authenticated user as integer
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="startDate"></param>
 /// <param name="endDate"></param>
 /// <returns></returns>
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate)
 {
     return GetTimeSeriesInt(timeSeriesResourceType, startDate, endDate, null);
 }
Ejemplo n.º 14
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string userId)
 {
     return GetTimeSeriesInt(timeSeriesResourceType, endDate, period.GetStringValue(), userId);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Requests the specified <see cref="TimeSeriesResourceType"/> for the date range and user specified
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="startDate"></param>
 /// <param name="endDate"></param>
 /// <param name="encodedUserId"></param>
 /// <returns></returns>
 public async Task <FitbitResponse <TimeSeriesDataList> > GetTimeSeriesAsync(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string encodedUserId = default(string))
 {
     return(await GetTimeSeriesAsync(timeSeriesResourceType, startDate, endDate.ToFitbitFormat(), encodedUserId));
 }
Ejemplo n.º 16
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string userId)
 {
     return GetTimeSeriesInt(timeSeriesResourceType, startDate, endDate.ToString("yyyy-MM-dd"), userId);
 }
Ejemplo n.º 17
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period)
 {
     return GetTimeSeriesInt(timeSeriesResourceType, endDate, period, null);
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Requests the specified <see cref="TimeSeriesResourceType"/> for the date range and user specified
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="startDate"></param>
 /// <param name="endDate"></param>
 /// <param name="encodedUserId"></param>
 /// <returns></returns>
 public Task <FitbitResponse <TimeSeriesDataListInt> > GetTimeSeriesIntAsync(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string encodedUserId = null)
 {
     return(GetTimeSeriesIntAsync(timeSeriesResourceType, startDate, endDate.ToFitbitFormat(), encodedUserId));
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Requests the specified <see cref="TimeSeriesResourceType"/> for the date range and user specified
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="endDate"></param>
 /// <param name="period"></param>
 /// <param name="encodedUserId"></param>
 /// <returns></returns>
 public async Task <FitbitResponse <TimeSeriesDataList> > GetTimeSeriesAsync(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string encodedUserId = default(string))
 {
     return(await GetTimeSeriesAsync(timeSeriesResourceType, endDate, period.GetStringValue(), encodedUserId));
 }
Ejemplo n.º 20
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period)
 {
     return(GetTimeSeriesInt(timeSeriesResourceType, endDate, period, null));
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Get TimeSeries data for this authenticated user as integer
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="startDate"></param>
 /// <param name="endDate"></param>
 /// <returns></returns>
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate)
 {
     return(GetTimeSeriesInt(timeSeriesResourceType, startDate, endDate, null));
 }
 private void CollectAndSaveData(FitbitClient fitBitClient,DateTime startTime,DateTime endTime, AFElement deviceElement, TimeSeriesResourceType type,string attributeName)
 {
     var fitBitData = fitBitClient.GetTimeSeries(type, startTime, endTime);
     AFValues values = Helpers.FitBitHelpers.ConvertToAFValues(fitBitData, type, deviceElement, attributeName);
     SharedData.DataQueue.Enqueue(values);
     valuesCount += values.Count;
 }
        public FitbitStream CreateFitbitStream(TimeSeriesResourceType tsResourceType, string attributeName, UOM uom)
        {
            FitbitStream stream = new FitbitStream(tsResourceType, attributeName, uom);

            return stream;
        }
Ejemplo n.º 24
0
 /// <summary>
 /// Requests the specified <see cref="TimeSeriesResourceType"/> for the date range and user specified
 /// </summary>
 /// <param name="timeSeriesResourceType"></param>
 /// <param name="endDate"></param>
 /// <param name="period"></param>
 /// <param name="encodedUserId"></param>
 /// <returns></returns>
 public Task <FitbitResponse <TimeSeriesDataListInt> > GetTimeSeriesIntAsync(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string encodedUserId = null)
 {
     return(GetTimeSeriesIntAsync(timeSeriesResourceType, endDate, period.GetStringValue(), encodedUserId));
 }
Ejemplo n.º 25
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string userId)
 {
     return(GetTimeSeriesInt(timeSeriesResourceType, startDate, endDate.ToString("yyyy-MM-dd"), userId));
 }
        public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime startDate, DateTime endDate, string userId)
        {
            string userSignifier = "-";
            if (!string.IsNullOrWhiteSpace(userId))
                userSignifier = userId;

            string requestUrl = string.Format("/1/user/{0}/{1}/date/{2}/{3}.xml", userSignifier, StringEnum.GetStringValue(timeSeriesResourceType), startDate.ToString("yyyy-MM-dd"), endDate.ToString("yyyy-MM-dd"));
            RestRequest request = new RestRequest(requestUrl);

            request.OnBeforeDeserialization = resp =>
            {
                XDocument doc = XDocument.Parse(resp.Content);
                var rootElement = doc.Descendants("result").FirstOrDefault().Descendants().FirstOrDefault();

                request.RootElement = rootElement.Name.LocalName;
            };

            var response = restClient.Execute<TimeSeriesDataListInt>(request);

            HandleResponseCode(response.StatusCode);

            return response.Data;
        }
Ejemplo n.º 27
0
 public TimeSeriesDataListInt GetTimeSeriesInt(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string userId)
 {
     return(GetTimeSeriesInt(timeSeriesResourceType, endDate, StringEnum.GetStringValue(period), userId));
 }
Ejemplo n.º 28
0
 public TimeSeriesDataList GetTimeSeries(TimeSeriesResourceType timeSeriesResourceType, DateTime endDate, DateRangePeriod period, string userId)
 {
     return GetTimeSeries(timeSeriesResourceType, endDate, StringEnum.GetStringValue(period), userId);
 }