public async Task<IList<WorkoutDetailViewModel>> GetAvailableWorkouts(string type = null) { if (type == null) { return FreeWorkoutsCache; } FreeWorkoutsCache.Clear(); string url; if (type == "WORKOUTS") { url = @"https://api.freeletics.com/v2/coach/workouts.json?base_volume=true&category_slugs=regular&fitness_variants=standard"; } else if (type == "EXERCICES") { url = @"https://api.freeletics.com/v2/coach/workouts.json?base_volume=true&category_slugs%5B%5D=exercise_with_distance&category_slugs%5B%5D=exercise_with_repetitions"; } else { url = @"https://api.freeletics.com/v2/coach/workouts.json?category_slugs=distance_run"; } 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 exos = new List<ExercisesViewModel>(); foreach (var ex in data.exercises) { string video = ""; try { video = ex.video_urls.mp4; } catch { } var exercice = new ExercisesViewModel() { Slug = ex.slug, Title = ex.title, Image = ex.picture_urls.small_mobile, Video = video }; exos.Add(exercice); } foreach (var w in data.workouts) { string title; if (type == "WORKOUTS") { title = GetWorkoutDisplayName(w); } else { title = w.title; title = title.ToUpper(); } var detail = new WorkoutDetailViewModel() { Name = w.base_name, Title = title, Slug = w.slug, Variant = w.fitness_variant, TrainingType = type, Points = w.points }; if (w.category_slug == "home") detail.Variant = "2x2 " + detail.Variant; var idx = 0; foreach (var round in w.rounds) { detail.Exercises.Add(new ExerciesSeparatorViewModel() { Title = "Round " + ++idx }); foreach (var ex in round) { var exid = (string)ex.exercise_slug; if (!string.IsNullOrWhiteSpace(exid)) { var e = exos.FirstOrDefault(x => x.Slug == exid).Clone(); e.Quantity = ex.quantity; e.Repetition = ex.quantity_description; e.Title = e.Repetition + " " + e.Title; detail.Exercises.Add(e); } } } FreeWorkoutsCache.Add(detail); } } } if (type == "RUN") FreeWorkoutsCache = FreeWorkoutsCache.OrderBy(w => w.Points).ToList(); return FreeWorkoutsCache; }
public async Task<IList<WorkoutDetailViewModel>> LoadAlternatives(string name) { var list = new List<WorkoutDetailViewModel>(); string url = @"https://api.freeletics.com/v2/coach/workouts.json?base_name=" + name; 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 exos = new List<ExercisesViewModel>(); foreach (var ex in data.exercises) { string video = ""; try { video = ex.video_urls.mp4; } catch { } var exercice = new ExercisesViewModel() { Slug = ex.slug, Title = ex.title, Image = ex.picture_urls.small_mobile, Video = video }; exos.Add(exercice); } foreach (var w in data.workouts) { var detail = new WorkoutDetailViewModel() { Name = w.base_name, Title = GetWorkoutDisplayName(w), Slug = w.slug, Variant = w.fitness_variant, }; if (w.category_slug == "home") detail.Variant = "2x2 " + detail.Variant; var idx = 0; foreach (var round in w.rounds) { detail.Exercises.Add(new ExerciesSeparatorViewModel() { Title = "Round " + ++idx }); foreach (var ex in round) { var exid = (string)ex.exercise_slug; if (!string.IsNullOrWhiteSpace(exid)) { var e = exos.FirstOrDefault(x => x.Slug == exid).Clone(); e.Quantity = ex.quantity; e.Repetition = ex.quantity_description; e.Title = e.Repetition + " " + e.Title; detail.Exercises.Add(e); } } } list.Add(detail); } } } return list; }
public async Task<WorkoutDetailViewModel> GetWorkoutDetail(string slug) { var wvm = new WorkoutDetailViewModel(); var url = "https://api.freeletics.com/v2/coach/workouts/{0}.json"; var client = GetRequest(string.Format(url, slug)); using (var response = await client.GetResponseAsync()) { using (var reader = new StreamReader(response.GetResponseStream())) { var content = reader.ReadToEnd(); dynamic data = JObject.Parse(content); dynamic w = data.workout; wvm.Name = w.base_name; wvm.Title = GetWorkoutDisplayName(w); wvm.Variant = w.fitness_variant; if (w.category_slug == "home") wvm.Variant = "2x2 " + wvm.Variant; var exos = new List<ExercisesViewModel>(); foreach (dynamic ex in data.exercises) { string video = ""; try { video = ex.video_urls.mp4; } catch { } exos.Add(new ExercisesViewModel() { Slug = ex.slug, Title = ex.title, Image = ex.picture_urls.small_mobile, Video = video }); } var idx = 0; foreach (var round in data.workout.rounds) { wvm.Exercises.Add(new ExerciesSeparatorViewModel() { Title = "Round " + ++idx }); foreach (var ex in round) { var id = (string)ex.exercise_slug; if (!string.IsNullOrWhiteSpace(id)) { var e = exos.FirstOrDefault(x => x.Slug == id).Clone(); e.Quantity = ex.quantity; e.Repetition = ex.quantity_description; e.Title = e.Repetition + " " + e.Title; wvm.Exercises.Add(e); } } } } } WorkoutCache[slug] = wvm; return wvm; }