protected void feedFilters_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                try
                {
                    messages.Text = string.Empty;

                    SocialUserFilter filter = SocialUserFilter.All;
                    if (feedFilters.SelectedValue == "1")
                    {
                        filter = SocialUserFilter.Week;
                    }
                    if (feedFilters.SelectedValue == "2")
                    {
                        filter = SocialUserFilter.Liked;
                    }

                    //Apply the selected filter
                    followersImages.DataSource = LoadSocialUsers(SocialUserType.Follower, filter);
                    followersImages.DataBind();
                    followedImages.DataSource = LoadSocialUsers(SocialUserType.Followed, filter);
                    followedImages.DataBind();
                }
                catch (Exception x)
                {
                    messages.Text = "Exception in feedFilters_SelectedIndexChanged: " + x.Message;
                }
            }
        }
        private List <SocialUser> FilterFollowed(List <SocialUser> users, SocialUserFilter filter)
        {
            List <SocialUser> includedUsers = new List <SocialUser>();

            foreach (SocialUser user in users)
            {
                bool include            = false;
                List <SocialPost> posts = GetPosts(user.AccountName);

                switch (filter)
                {
                case SocialUserFilter.All:
                    include = true;
                    break;

                case SocialUserFilter.Week:
                    foreach (SocialPost post in posts)
                    {
                        if (post.CreatedDate.AddDays(7) >= DateTime.Today)
                        {
                            include = true;
                            break;
                        }
                    }
                    break;

                case SocialUserFilter.Liked:
                    foreach (SocialPost post in posts)
                    {
                        if (post.LikedByMe)
                        {
                            include = true;
                            break;
                        }
                    }
                    break;
                }

                if (include)
                {
                    SocialUser includedUser = new SocialUser();
                    includedUser.AccountName = user.AccountName;
                    includedUser.ImageUrl    = user.ImageUrl;
                    includedUser.Name        = user.Name;
                    includedUsers.Add(user);
                }
            }

            return(includedUsers);
        }
        private List <SocialUser> LoadSocialUsers(SocialUserType type, SocialUserFilter filter)
        {
            List <SocialUser> users = new List <SocialUser>();

            //Create the endpoint for the REST call
            string endpoint;

            if (type == SocialUserType.Followed)
            {
                endpoint = hdnHostWeb.Value + "/_api/social.following/my/Followed(types=1)";
            }
            else
            {
                endpoint = hdnHostWeb.Value + "/_api/social.following/my/Followers";
            }

            //Make the request
            XDocument responseDoc = GetDataREST(endpoint);

            //Parse the response
            XNamespace d      = "http://schemas.microsoft.com/ado/2007/08/dataservices";
            XNamespace m      = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
            XNamespace georss = "http://www.georss.org/georss";
            XNamespace gml    = "http://www.opengis.net/gml";

            var followedUsers = from e in responseDoc.Root.Descendants(d + "element")
                                select new
            {
                AccountName = e.Element(d + "AccountName").Value.Split('|')[2],
                Name        = e.Element(d + "Name").Value,
                ImageUrl    = e.Element(d + "ImageUri").Value
            };

            //Build a collection of users
            foreach (var followedUser in followedUsers)
            {
                SocialUser user = new SocialUser();
                user.AccountName = followedUser.AccountName;
                user.Name        = followedUser.Name;
                user.ImageUrl    = followedUser.ImageUrl;
                users.Add(user);
            }

            //Filter the users
            return(FilterFollowed(users, filter));
        }
        private List <SocialUser> LoadSocialUsers(SocialUserType type, SocialUserFilter filter)
        {
            List <SocialUser> users = new List <SocialUser>();

            using (ClientContext ctx = TokenHelper.GetClientContextWithContextToken(hdnHostWeb.Value, hdnContextToken.Value, Request.Url.Authority))
            {
                //Get social users
                ClientResult <SocialActor[]> socialActors     = null;
                SocialFollowingManager       followingManager = new SocialFollowingManager(ctx);
                ctx.Load(followingManager);

                if (type == SocialUserType.Follower)
                {
                    socialActors = followingManager.GetFollowers();
                }
                if (type == SocialUserType.Followed)
                {
                    socialActors = followingManager.GetFollowed(SocialActorTypes.Users);
                }

                ctx.ExecuteQuery();

                //Build a collection of users
                foreach (var socialActor in socialActors.Value)
                {
                    SocialUser user = new SocialUser();
                    user.AccountName = socialActor.AccountName;
                    user.Name        = socialActor.Name;
                    user.ImageUrl    = socialActor.ImageUri;
                    users.Add(user);
                }
            }

            //Filter the users
            return(FilterFollowed(users, filter));
        }
        private List<SocialUser> LoadSocialUsers(SocialUserType type, SocialUserFilter filter)
        {
            List<SocialUser> users = new List<SocialUser>();

            //Create the endpoint for the REST call
            string endpoint;
            if (type == SocialUserType.Followed)
                endpoint = hdnHostWeb.Value + "/_api/social.following/my/Followed(types=1)";
            else
                endpoint = hdnHostWeb.Value + "/_api/social.following/my/Followers";

            //Make the request
            XDocument responseDoc = GetDataREST(endpoint);

            //Parse the response
            XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
            XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
            XNamespace georss = "http://www.georss.org/georss";
            XNamespace gml = "http://www.opengis.net/gml";

            var followedUsers = from e in responseDoc.Root.Descendants(d + "element")
                                select new
                                {
                                    AccountName = e.Element(d + "AccountName").Value.Split('|')[2],
                                    Name = e.Element(d + "Name").Value,
                                    ImageUrl = e.Element(d + "ImageUri").Value
                                };

            //Build a collection of users
            foreach (var followedUser in followedUsers)
            {
                SocialUser user = new SocialUser();
                user.AccountName = followedUser.AccountName;
                user.Name = followedUser.Name;
                user.ImageUrl = followedUser.ImageUrl;
                users.Add(user);
            }

            //Filter the users
            return FilterFollowed(users, filter);
        }
        private List<SocialUser> FilterFollowed(List<SocialUser> users, SocialUserFilter filter)
        {
            List<SocialUser> includedUsers = new List<SocialUser>();

            foreach (SocialUser user in users)
            {
                bool include = false;
                List<SocialPost> posts = GetPosts(user.AccountName);

                switch (filter)
                {
                    case SocialUserFilter.All:
                        include = true;
                        break;

                    case SocialUserFilter.Week:
                        foreach (SocialPost post in posts)
                        {
                            if (post.CreatedDate.AddDays(7) >= DateTime.Today)
                            {
                                include = true;
                                break;
                            }
                        }
                        break;

                    case SocialUserFilter.Liked:
                        foreach (SocialPost post in posts)
                        {
                            if (post.LikedByMe)
                            {
                                include = true;
                                break;
                            }
                        }
                        break;

                }

                if (include)
                {
                    SocialUser includedUser = new SocialUser();
                    includedUser.AccountName = user.AccountName;
                    includedUser.ImageUrl = user.ImageUrl;
                    includedUser.Name = user.Name;
                    includedUsers.Add(user);
                }
            }

            return includedUsers;
        }
        private List<SocialUser> LoadSocialUsers(SocialUserType type, SocialUserFilter filter)
        {
            List<SocialUser> users = new List<SocialUser>();

            using (ClientContext ctx = TokenHelper.GetClientContextWithContextToken(hdnHostWeb.Value, hdnContextToken.Value, Request.Url.Authority))
            {
                //Get social users
                ClientResult<SocialActor[]> socialActors = null;
                SocialFollowingManager followingManager = new SocialFollowingManager(ctx);
                ctx.Load(followingManager);

                if (type == SocialUserType.Follower)
                    socialActors = followingManager.GetFollowers();
                if (type == SocialUserType.Followed)
                    socialActors = followingManager.GetFollowed(SocialActorTypes.Users);

                ctx.ExecuteQuery();

                //Build a collection of users
                foreach (var socialActor in socialActors.Value)
                {
                    SocialUser user = new SocialUser();
                    user.AccountName = socialActor.AccountName;
                    user.Name = socialActor.Name;
                    user.ImageUrl = socialActor.ImageUri;
                    users.Add(user);
                }
            }

            //Filter the users
            return FilterFollowed(users, filter);
        }