Exemple #1
0
        public AthleteSummary ConsolidateWithCache(AthleteMeta athlete)
        {
            object entry;

            if (_cachedAthleteTasks.TryGetValue(athlete.Id.ToString(), out entry))
            {
                //The cache has an entry, so lets see which is newer and has more data
                AthleteSummary c_summary = entry as AthleteSummary;
                AthleteSummary n_summary = athlete as AthleteSummary;

                if (c_summary == null || (n_summary != null && n_summary.UpdatedAt > c_summary.UpdatedAt && n_summary.ResourceState >= c_summary.ResourceState))
                {
                    _cachedAthleteTasks[athlete.Id.ToString()] = n_summary;
                    return(n_summary);
                }
                return(c_summary);
            }
            else
            {
                if (athlete.ResourceState > 1) // meta only
                {
                    _cachedAthleteTasks[athlete.Id.ToString()] = athlete;
                    return((AthleteSummary)athlete);
                }
                return(null);
            }
        }
Exemple #2
0
        private static async System.Threading.Tasks.Task <AthleteSummary> GetAthleteKQOM(TraceWriter log, string id)
        {
            AthleteSummary athleteSummary = null;

            var url = $"https://www.strava.com/api/v3/athletes/{id}/koms";

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {authAccessToken}");

                var response = await client.GetAsync(url);

                response.EnsureSuccessStatusCode();

                var responseString = await response.Content.ReadAsStringAsync();

                // Extract useful info from API response
                if (!string.IsNullOrEmpty(responseString))
                {
                    var kQOMData = JsonConvert.DeserializeObject <KQOMData>(responseString);

                    log.Info($"Retrieved Athlete KOM list for: {athleteSummary.username}");
                }
            }

            return(athleteSummary);
        }
Exemple #3
0
        private async Task <User> DoTheNeedful(AthleteSummary arg, IEnumerable <StravaAuth> authedAthletes)
        {
            var activities = new List <ActivitySummary>();
            var authToken  = authedAthletes.ToList().FirstOrDefault(c => c.Athlete.Id == arg.Id);

            if (authToken != null)
            {
                var userActivities =
                    await GetActivityByUser(arg.Id, authToken.AccessToken);

                activities.AddRange(userActivities);
            }

            var athleteClient = new AthleteClient(StaticAuthentication);
            var athlete       = await athleteClient.GetAthleteAsync(arg.Id.ToString());

            var user = new User
            {
                ProfilePic    = athlete.ProfileMedium,
                StravaId      = arg.Id,
                FirstName     = arg.FirstName,
                LastName      = arg.LastName,
                ActivityCount = activities.Count(),
                TotalMiles    = activities.Sum(e => Convert.ToDecimal(e.Distance * 0.000621371)),
                Stats         = GetStatsForUser(activities).ToList()
            };

            return(user);
        }
Exemple #4
0
        protected void OnAthleteTapped(ItemClickEventArgs args)
        {
            AthleteSummary athlete = args.ClickedItem as AthleteSummary;

            if (athlete != null)
            {
                NavigationService.Navigate <ProfilePage>(athlete.Id.ToString());
            }
        }
Exemple #5
0
        /// <summary>
        /// Asynchronously receives the currently authenticated athlete.
        /// </summary>
        /// <param name="athleteId">The Strava Id of the athlete.</param>
        /// <returns>The AthleteSummary object of the athlete.</returns>
        public Task <AthleteSummary> GetAthleteAsync(string athleteId)
        {
            object result;

            if (_cachedAthleteTasks.TryGetValue(athleteId, out result))
            {
                AthleteSummary summary = result as AthleteSummary;
                if (summary != null)
                {
                    return(Task.FromResult(summary));
                }
                else
                {
                    return((Task <AthleteSummary>)result);
                }
            }
            else
            {
                var task = GetAthleteFromServiceAsync(athleteId);
                _cachedAthleteTasks[athleteId] = task;
                return(task);
            }
        }
        private async Task <User> DoTheNeedful(AthleteSummary arg, string token)
        {
            var user = new User();

            try
            {
                var activities = new List <ActivitySummary>();
                var authToken  = token;
                if (authToken != null)
                {
                    var userActivities = await GetActivityByUser(arg.Id, authToken);

                    activities.AddRange(userActivities);
                }


                user = new User
                {
                    ProfilePic    = arg.ProfileMedium,
                    StravaId      = arg.Id,
                    FirstName     = arg.FirstName,
                    LastName      = arg.LastName,
                    ActivityCount = activities.Count
                };
                user.TotalMiles = activities.Sum(e => Convert.ToDecimal(e.Distance * 0.000621371));
                var stats = GetStatsForUser(activities.ToList()).ToList();
                user.Stats   = stats;
                user.Running = activities.Where(t => t.RawType.ToLower() == "run").Sum(e => Convert.ToDecimal(e.Distance * 0.000621371));
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine(exp.Message);
                //throw;
            }
            return(user);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            AthleteMeta athleteMeta;
            // Load JObject from stream
            JObject jObject = JObject.Load(reader);

            if (FieldExists("athlete_type", jObject))
            {
                athleteMeta = new Athlete();
            }
            else if (FieldExists("firstname", jObject))
            {
                athleteMeta = new AthleteSummary();
            }
            else
            {
                athleteMeta = new AthleteMeta();
            }

            // Populate the object properties
            serializer.Populate(jObject.CreateReader(), athleteMeta);

            return(athleteMeta);
        }
Exemple #8
0
        public async static void Test()
        {
            Console.WriteLine("Framework: {0}", Framework.Version);

            // Please use your own, valid token!
            const String token = "";

            // Use either the static authentication method or use the WebAuthentication method.
            StaticAuthentication auth = new StaticAuthentication(token);

            //WebAuthentication auth = new WebAuthentication();
            //auth.AuthCodeReceived += delegate(object sender, AuthCodeReceivedEventArgs args) { Debug.WriteLine("Auth Code: " + args.AuthCode); };
            //auth.AccessTokenReceived += delegate(object sender, TokenReceivedEventArgs args) { Debug.WriteLine("Access Token: " + args.Token); };
            //auth.GetTokenAsync("<Client id>", "<Client Secret>", Scope.Full);

            // You can either use the StravaClient or 'single' clients like the ActivityClient.
            // The StravaClient offers predefined clients.
            StravaClient client = new StravaClient(auth);

            AthleteSummary a = await client.Athletes.GetAthleteAsync();

            Console.WriteLine("{0} {1}", a.FirstName, a.LastName);

            #region Activities

            //var activities = client.Activities.GetActivities(new DateTime(2014, 1, 1), DateTime.Now);
            //var activitiesAsync = await client.Activities.GetActivitiesAsync(new DateTime(2014, 1, 1), DateTime.Now);

            //foreach (var item in activities)
            //{
            //    Console.WriteLine(DateConverter.ConvertIsoTimeToDateTime(item.StartDateLocal));
            //}

            //Console.WriteLine("Sync: " + activities.Count);
            //Console.WriteLine("Async: " + activitiesAsync.Count);

            #endregion

            #region Athlete

            //Athlete current = await client.Athletes.GetAthleteAsync();
            //Console.WriteLine(current);

            //List<AthleteSummary> friends = await client.Athletes.GetFriendsAsync();
            //Console.WriteLine(friends.Count);

            //List<AthleteSummary> bothFollowing = await client.Athletes.GetBothFollowingAsync("528819");
            //Console.WriteLine(bothFollowing.Count);

            //List<SegmentEffort> records = await client.Segments.GetRecordsAsync("528819");

            //foreach (SegmentEffort effort in records)
            //{
            //    Console.WriteLine(effort.Name);
            //}

            //List<SegmentSummary> starred = await client.Segments.GetStarredSegmentsAsync();
            //Console.WriteLine(starred.Count);

            #region Update Athlete Weight

            //Athlete a = client.GetAthlete();
            //Console.WriteLine(a.FirstName + " " + a.LastName);

            //Athlete updated = client.UpdateAthlete(AthleteParameter.Weight, "60.0");
            //Console.WriteLine(updated.Email);

            #endregion

            #endregion

            #region Map Decoder

            //Activity mapActivity = await client.Activities.GetActivityAsync("109557593", false);
            //List<Coordinate> coords = PolylineDecoder.Decode(mapActivity.Map.Polyline);

            //foreach (var coordinate in coords)
            //{
            //    Console.WriteLine(coordinate);
            //}

            #endregion

            #region Leaderboard

            // Get the leaderboard of a segment.
            //Leaderboard leaderboard = client.Segments.GetFullSegmentLeaderboard("1300798");

            //foreach (LeaderboardEntry entry in leaderboard.Entries)
            //{
            //    Console.WriteLine(entry.ToString());
            //}

            #endregion

            #region Comments

            //List<Comment> comments = await client.Activities.GetCommentsAsync("112861810");

            //foreach (var comment in comments)
            //{
            //    Console.WriteLine(comment.Text);
            //    Console.WriteLine();
            //}

            #endregion

            #region Kudos

            //List<Athlete> kudoAthletes = await client.Activities.GetKudosAsync("112818941");

            //foreach (var kudos in kudoAthletes)
            //{
            //    Console.WriteLine(kudos.FirstName);
            //}

            #endregion

            #region Club

            //Athlete clubAthlete = await client.Athletes.GetAthleteAsync();

            //foreach (Club club in clubAthlete.Clubs)
            //{
            //    Console.WriteLine(club.Id);
            //}

            //Club c = await client.Clubs.GetClubAsync("949");
            //Console.WriteLine("Club: {0}", c.Name);

            //Image image = await ImageLoader.LoadImage(new Uri(c.Profile));
            //Form form = new Form();
            //form.Controls.Add(new PictureBox() { Dock = DockStyle.Fill, Image = image, SizeMode = PictureBoxSizeMode.CenterImage });
            //form.ShowDialog();

            //// Gets all the clubs of the currently authenticated user.
            //Console.WriteLine("Clubs:");
            //List<ClubSummary> clubs = await client.Clubs.GetClubsAsync();

            //foreach (var club in clubs)
            //{
            //    Console.WriteLine(club.Name);
            //}

            //// Only returns a result, if the athlete is a member in the club.
            //List<AthleteSummary> athletes = await client.Clubs.GetClubMembersAsync("949");
            //foreach (AthleteSummary athlete in athletes)
            //{
            //    Console.WriteLine(athlete.FirstName + " " + athlete.LastName);
            //}

            #endregion

            #region ActivityZones

            //List<ActivityZone> zones = client.Activities.GetActivityZones("114701243");

            //foreach (var item in zones.First().Buckets)
            //{
            //    Console.WriteLine(item.Maximum + " " + item.Minimum + " " + item.Time);
            //}

            #endregion

            #region Club Activities

            //List<ActivitySummary> items = client.Clubs.GetLatestClubActivities("949", 1, 5);

            //foreach (var activity in items)
            //{
            //    Console.WriteLine(activity.Name);
            //}

            //Console.WriteLine();

            //items = client.Clubs.GetLatestClubActivities("949", 2, 5);

            //foreach (var activity in items)
            //{
            //    Console.WriteLine(activity.Name);
            //}

            #endregion

            #region Latest activities of your friends

            //List<ActivitySummary> activities = await client.Activities.GetFriendsActivitiesAsync(10);

            //foreach (var item in activities)
            //{
            //    Console.WriteLine(item.Name);
            //}

            #endregion

            #region ActivityReceived Event-Test

            //client.Activities.ActivityReceived += delegate(object sender, ActivityReceivedEventArgs args) { Console.WriteLine(args.Activity.Name); };
            //await client.Activities.GetAllActivitiesAsync();

            #endregion

            #region Gear

            //Athlete athleteGear = client.Athletes.GetAthlete();

            //foreach (var bike in athleteGear.Bikes)
            //{
            //    Bike gear = await client.Gear.GetGearAsync(bike.Id);
            //    Console.WriteLine(gear.Name);
            //}

            //foreach (Shoes shoes in athleteGear.Shoes)
            //{
            //    Bike gear = await client.Gear.GetGearAsync(shoes.Id);
            //    Console.WriteLine(gear.Name);
            //}

            #endregion

            #region Streams

            //List<ActivityStream> streams = client.Streams.GetActivityStream("117700501", StreamType.LatLng | StreamType.Heartrate);
            //foreach (var stream in streams)
            //{
            //    Console.WriteLine(stream.StreamType);
            //    Console.WriteLine(stream.OriginalSize);
            //    Console.WriteLine(stream.Data.Count);
            //}


            //List<SegmentStream> segmentStreams = client.Streams.GetSegmentStream("6295188", SegmentStreamType.LatLng | SegmentStreamType.Distance, StreamResolution.All);
            //foreach (var stream in segmentStreams)
            //{
            //    Console.WriteLine(stream.StreamType);
            //    Console.WriteLine(stream.OriginalSize);
            //}

            //List<ActivitySummary> ac = client.Activities.GetActivitiesAfter(new DateTime(2014, 1, 1));
            //Console.WriteLine(ac.Count);

            #endregion

            #region Update Activity

            //Activity a = await client.Activities.UpdateActivityTypeAsync("<activity id>", ActivityType.Ride);
            //Console.WriteLine(a.Type);

            //Activity a = await client.Activities.UpdateActivityAsync("<activity id>", ActivityParameter.Name, "Kurze Testfahrt nach Schaltzug- und Kettenwechsel");
            //Console.WriteLine(a.Name);

            #endregion

            #region Weekly Progress

            //WeeklyProgress p = client.Activities.GetWeeklyProgress();

            //Console.WriteLine(p.TotalTime);
            //Console.WriteLine(p.RideDistance / 1000F);
            //Console.WriteLine(p.ActivityCount);

            #endregion

            #region Summary

            //var activities = client.Activities.GetSummary(new DateTime(2014, 1, 1), DateTime.Now);
            //var activities = client.Activities.GetSummaryLastYear();
            //var activities = client.Activities.GetSummaryThisYear();

            //Console.WriteLine("Activities: " + activities.ActivityCount);
            //Console.WriteLine("Rides: " + activities.Rides.Count);
            //Console.WriteLine("Ride Distance: " + activities.RideDistance / 1000D);

            #endregion

            #region Time Filter

            //Leaderboard l = await client.Segments.GetSegmentLeaderboardAsync("6861720", TimeFilter.ThisYear);
            //foreach (var s in l.Entries)
            //{
            //    Console.WriteLine(s.AthleteName);
            //}

            #endregion

            #region Segment-Explorer

            //ExplorerResult result = await client.Segments.ExploreSegmentsAsync(
            //    new Coordinate(37.821362, -122.505373),
            //    new Coordinate(37.842038, -122.465977),
            //    0,
            //    5);

            //foreach (ExplorerSegment s in result.Results)
            //{
            //    Console.WriteLine(s.Name);
            //}

            #endregion

            #region Segment Efforts

            //List<SegmentEffort> efforts = await client.Efforts.GetSegmentEffortsByTimeAsync("6386278", new DateTime(2014, 1, 1), new DateTime(2014, 4, 10));
            //List<SegmentEffort> efforts = await client.Efforts.GetSegmentEffortsByAthleteAsync("6386278", "1985994");
            //List<SegmentEffort> efforts = await client.Efforts.GetSegmentEffortsAsync("6386278", "1985994", new DateTime(2014, 4, 8), new DateTime(2014, 4, 10));
            //List<SegmentEffort> efforts = await client.Efforts.GetSegmentEffortsAsync("6386278");

            //foreach (SegmentEffort effort in efforts)
            //{
            //    Console.WriteLine(effort.Athlete.Id);
            //    Console.WriteLine(" " + effort.MovingTime / 60 + "m" + effort.MovingTime % 60 + "s");
            //}


            #endregion

            #region MapLoader

            //Activity a = await client.Activities.GetActivityAsync("129042840", false);
            //Debug.WriteLine(a.Map.SummaryPolyline);

            //System.Drawing.Image image = await GoogleImageLoader.LoadActivityPreviewAsync(a.Map.SummaryPolyline, new Dimension(150, 150), MapType.Terrain);
            //Form form = new Form();
            //form.Size = new Size(300, 300);

            //PictureBox p = new PictureBox();
            //p.Dock = DockStyle.Fill;
            //p.Image = image;
            //form.Controls.Add(p);

            //form.ShowDialog();

            #endregion

            #region Photos

            ////List<Photo> photos = await client.Activities.GetPhotosAsync("133317643");
            ////Debug.WriteLine("Photos: " + photos.Count);

            //List<Photo> photos = await client.Activities.GetLatestPhotosAsync(new DateTime(2014, 1, 1));
            //Debug.WriteLine("Photos: " + photos.Count);

            #endregion

            #region Laps

            //List<ActivityLap> laps = await client.Activities.GetActivityLapsAsync("135450490");

            //foreach (var lap in laps)
            //{
            //    Console.WriteLine((lap.Distance / 1000F).ToString("F"));
            //}

            #endregion
        }