Exemple #1
0
        public async Task<string> SendCompletion(Completion completion)
        {
            try
            {
                string slug = completion.Slug;
                string id = "";
                var url = "https://api.freeletics.com/v2/coach/workouts/{0}/trainings.json";
                var client = GetRequest(string.Format(url, slug), "POST");
                client.ContentType = "application/json;charset=UTF-8";

                using (var writer = new StreamWriter(await client.GetRequestStreamAsync()))
                {
                    var json = JsonConvert.SerializeObject(completion);
                    writer.WriteLine(json);
                }

                using (var response = await client.GetResponseAsync())
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        var content = reader.ReadToEnd();
                        dynamic data = JObject.Parse(content);
                        id = data.training.id;
                    }
                }

                // App Insight
                var props = new Dictionary<string, string> { { "slug", slug }, { "star", completion.Star.ToString() } };
                telemetry.TrackEvent("Workout", props);

                return id;

            }
            catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.ConnectFailure || ex.Status == WebExceptionStatus.SendFailure ||
                    ((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
                {
                    // TODO : save data to retry later
                    var storage = Windows.Storage.ApplicationData.Current.LocalSettings.Values;
                    List<Completion> sendcache = new List<Completion>();
                    if (storage.ContainsKey("sendcache"))
                    {
                        sendcache = JsonConvert.DeserializeObject<List<Completion>>((string)storage["sendcache"]);
                    }
                    sendcache.Add(completion);

                    storage["sendcache"] = JsonConvert.SerializeObject(sendcache);

                    throw new SendLaterException();
                }
                else
                {
                    throw ex;
                }
            }
        }
Exemple #2
0
        public async void SendData()
        {
            ErrorMessage = "";
            try
            {
                var elapsed = ParseTimeSpan(Duration);
                var fulldate = new DateTime(Date.Year, Date.Month, Date.Day, Time.Hours, Time.Minutes, Time.Seconds);
                var completion = new Completion()
                {
                    Slug = Slug,
                    Star = false,
                    Seconds = (int)elapsed.TotalSeconds,
                    Description = Description,
                    PerformedAt = fulldate.ToUniversalTime()
                };

                try
                {
                    await dataservice.SendCompletion(completion);
                    navigationService.NavigateToViewModel<MyWeekViewModel>();
                }
                catch(SendLaterException ex)
                {
                    ShowError(ex);
                    navigationService.NavigateToViewModel<MyWeekViewModel>();
                }
                catch (Exception ex)
                {
                    ShowError(ex);
                    dataservice.LogException(ex, completion);
                }
            }
            catch (FormatException)
            {
                ErrorMessage = "Wrong input format. Please use hh:mm:ss";
            }
        }
Exemple #3
0
        public async Task<Completion> GetBestData(string slug)
        {
            Completion completion = null;

            var url = @"https://api.freeletics.com/v2/coach/users/{0}/trainings/best.json?workout_slugs%5B%5D={1}";
            url = string.Format(url, UserId, slug);

            var request = GetRequest(url);

            using (var response = await request.GetResponseAsync())
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    var content = reader.ReadToEnd();
                    dynamic data = JObject.Parse(content);
                    
                    var training = data.trainings.First;
                    if (training != null)
                    {
                        completion = new Completion();
                        completion.Seconds = training.seconds;

                        if (training.exercises_seconds != null)
                        {
                            var list = new List<List<int>>();
                            foreach (var exercice in training.exercises_seconds)
                            {
                                var workouts = new List<int>();
                                foreach (var w in exercice)
                                {
                                    int sec = w;
                                    workouts.Add(sec);
                                }
                                list.Add(workouts);
                            }

                            completion.ExercisesSeconds = list.Select(l => l.ToArray()).ToArray();
                        }
                    }
                }
            }

            return completion;
        }