public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter, uint titleId)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            SocialGraph userGraph;

            if (!this.userGraphs.TryGetValue(user, out userGraph))
            {
                throw new ArgumentException("You must add a local user before you can create a social group for them.", "user");
            }

            XboxSocialUserGroup group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, XboxLiveAppConfiguration.Instance.TitleId);

            if (userGraph.IsInitialized)
            {
                group.InitializeGroup(userGraph.ActiveUsers);
            }

            this.AddUserGroup(user, group);

            this.eventQueue.Enqueue(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group));

            return(group);
        }
        public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, List <ulong> userIds)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            if (userIds == null)
            {
                throw new ArgumentNullException("userIds");
            }

            SocialGraph userGraph;

            if (!this.userGraphs.TryGetValue(user, out userGraph))
            {
                throw new ArgumentException("You must add a local user before you can create a social group for them.", "user");
            }

            XboxSocialUserGroup group = new XboxSocialUserGroup(user, userIds);

            if (userGraph.IsInitialized)
            {
                group.InitializeGroup(userGraph.ActiveUsers);
            }

            this.AddUserGroup(user, group);

            userGraph.AddUsers(userIds).ContinueWith(addUsersTask =>
            {
                this.eventQueue.Enqueue(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, userIds, group, addUsersTask.Exception));
            });

            return(group);
        }
        public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter)
        {
            var group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, XboxLiveAppConfiguration.Instance.TitleId);

            var users = Enumerable.Range(0, 5)
                        .Select(id =>
            {
                var groupUser = CreateUser();

                switch (presenceFilter)
                {
                case PresenceFilter.AllOnline:
                case PresenceFilter.TitleOnline:
                    InitUserForOnlinePresence(ref groupUser);
                    break;

                case PresenceFilter.AllOffline:
                case PresenceFilter.TitleOffline:
                    InitUserForOfflinePresence(ref groupUser);
                    break;

                case PresenceFilter.AllTitle:
                case PresenceFilter.All:
                    if (id % 2 == 0)
                    {
                        InitUserForOnlinePresence(ref groupUser);
                    }
                    else
                    {
                        InitUserForOfflinePresence(ref groupUser);
                    }
                    break;
                }

                switch (relationshipFilter)
                {
                case RelationshipFilter.Friends:
                    groupUser.IsFollowedByCaller = true;
                    break;

                case RelationshipFilter.Favorite:
                    groupUser.IsFollowedByCaller = true;
                    groupUser.IsFavorite         = true;
                    break;
                }

                return(groupUser);
            }).ToDictionary(u => u.XboxUserId);

            group.InitializeGroup(users.Values);
            group.UpdateView(users, new List <SocialEvent>());
            this.events.Add(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group));

            return(group);
        }
        public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, List <ulong> userIds)
        {
            var group = new XboxSocialUserGroup(user, userIds);

            // Create 'real' users for the userIds
            var users = userIds
                        .Select(CreateUser)
                        .ToDictionary(u => u.XboxUserId);

            group.InitializeGroup(users.Values);
            group.UpdateView(users, new List <SocialEvent>());
            this.events.Add(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group));

            return(group);
        }
        public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter, uint titleId)
        {
            var group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, titleId);

            var users = Enumerable.Range(0, 5)
                        .Select(id =>
            {
                var groupUser = CreateUser();

                switch (presenceFilter)
                {
                case PresenceFilter.TitleOnline:
                    groupUser.PresenceState   = UserPresenceState.Online;
                    groupUser.PresenceDetails = new List <SocialManagerPresenceTitleRecord>
                    {
                        new SocialManagerPresenceTitleRecord
                        {
                            TitleId       = titleId,
                            IsTitleActive = false,
                        }
                    };
                    break;

                case PresenceFilter.TitleOffline:
                    groupUser.PresenceState = UserPresenceState.Offline;
                    groupUser.TitleHistory  = new TitleHistory
                    {
                        HasUserPlayed      = true,
                        LastTimeUserPlayed = DateTime.UtcNow.AddDays(-1),
                    };
                    break;

                case PresenceFilter.AllOnline:
                    groupUser.PresenceState = UserPresenceState.Online;
                    break;

                case PresenceFilter.AllOffline:
                    groupUser.PresenceState = UserPresenceState.Offline;
                    break;

                case PresenceFilter.AllTitle:
                    break;
                }

                switch (relationshipFilter)
                {
                case RelationshipFilter.Friends:
                    groupUser.IsFollowedByCaller = true;
                    break;

                case RelationshipFilter.Favorite:
                    groupUser.IsFollowedByCaller = true;
                    groupUser.IsFavorite         = true;
                    break;
                }

                return(groupUser);
            }).ToDictionary(u => u.XboxUserId);

            group.InitializeGroup(users.Values);
            group.UpdateView(users, new List <SocialEvent>());
            this.events.Add(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group));

            return(group);
        }