Ejemplo n.º 1
0
        private void DoListAction(string name, ListKind list, bool isAdd, bool generateUpdate = true)
        {
            Dispatcher.Invoke(() =>
            {
                var result = isAdd
                    ? characterManager.Add(name, list)
                    : characterManager.Remove(name, list);

                var character = characterManager.Find(name);
                if (isAdd && character.Status == StatusType.Offline)
                {
                    characterManager.SignOff(name);
                }

                character.IsInteresting = characterManager.IsOfInterest(name);

                if (!generateUpdate || !result) return;

                var eventargs = new CharacterListChangedEventArgs
                {
                    IsAdded = isAdd,
                    ListArgument = list
                };

                events.NewCharacterUpdate(character, eventargs);
            });
        }
Ejemplo n.º 2
0
        private void OnIgnoreRequested(IDictionary <string, object> command)
        {
            if (!command.ContainsKey(Constants.Arguments.Character))
            {
                connection.SendMessage(command);
                return;
            }

            var args = command.Get(Constants.Arguments.Character);

            var action = command.Get(Constants.Arguments.Action);

            if (action == Constants.Arguments.ActionAdd)
            {
                characterManager.Add(args, ListKind.Ignored);
            }
            else if (action == Constants.Arguments.ActionDelete)
            {
                characterManager.Remove(args, ListKind.Ignored);
            }
            else
            {
                return;
            }

            var updateArgs = new CharacterListChangedEventArgs
            {
                IsAdded      = action == Constants.Arguments.ActionAdd,
                ListArgument = ListKind.Ignored
            };

            events.NewCharacterUpdate(characterManager.Find(args), updateArgs);

            connection.SendMessage(command);
        }
Ejemplo n.º 3
0
        private void OnMarkInterestingNot(IDictionary <string, object> command, bool isInteresting)
        {
            var args = command.Get(Constants.Arguments.Character);
            var type = isInteresting ? ListKind.Interested : ListKind.NotInterested;

            var isAdd = !characterManager.IsOnList(args, type);

            if (isAdd)
            {
                characterManager.Add(args, type);
            }
            else
            {
                characterManager.Remove(args, type);
            }


            var updateArgs = new CharacterListChangedEventArgs
            {
                IsAdded      = isAdd,
                ListArgument = type
            };

            events.NewCharacterUpdate(characterManager.Find(args), updateArgs);
        }
Ejemplo n.º 4
0
        private void DoListAction(string name, ListKind list, bool isAdd, bool generateUpdate = true)
        {
            Dispatcher.Invoke(() =>
            {
                var result = isAdd
                    ? characterManager.Add(name, list)
                    : characterManager.Remove(name, list);

                var character = characterManager.Find(name);
                if (isAdd && character.Status == StatusType.Offline)
                {
                    characterManager.SignOff(name);
                }

                character.IsInteresting = characterManager.IsOfInterest(name);

                if (!generateUpdate || !result)
                {
                    return;
                }

                var eventargs = new CharacterListChangedEventArgs
                {
                    IsAdded      = isAdd,
                    ListArgument = list
                };

                events.NewCharacterUpdate(character, eventargs);
            });
        }
Ejemplo n.º 5
0
        private void OnMarkInterestingNot(IDictionary<string, object> command, bool isInteresting)
        {
            var args = command.Get(Constants.Arguments.Character);
            var type = isInteresting ? ListKind.Interested : ListKind.NotInterested;

            var isAdd = !characterManager.IsOnList(args, type);
            if (isAdd)
                characterManager.Add(args, type);
            else
                characterManager.Remove(args, type);


            var updateArgs = new CharacterListChangedEventArgs
            {
                IsAdded = isAdd,
                ListArgument = type
            };

            events.NewCharacterUpdate(characterManager.Find(args), updateArgs);
        }
Ejemplo n.º 6
0
        private void OnSearchTagToggleRequested(IDictionary <string, object> command)
        {
            var character = command.Get(Constants.Arguments.Character);

            var isAdd = !characterManager.IsOnList(character, ListKind.SearchResult, false);

            if (isAdd)
            {
                characterManager.Add(character, ListKind.SearchResult);
            }
            else
            {
                characterManager.Remove(character, ListKind.SearchResult);
            }

            var updateArgs = new CharacterListChangedEventArgs
            {
                IsAdded      = isAdd,
                ListArgument = ListKind.SearchResult
            };

            events.NewCharacterUpdate(characterManager.Find(character), updateArgs);
        }
Ejemplo n.º 7
0
        private void OnSearchTagToggleRequested(IDictionary<string, object> command)
        {
            var character = command.Get(Constants.Arguments.Character);

            var isAdd = !characterManager.IsOnList(character, ListKind.SearchResult, false);

            if (isAdd)
            {
                characterManager.Add(character, ListKind.SearchResult);
            }
            else
            {
                characterManager.Remove(character, ListKind.SearchResult);
            }

            var updateArgs = new CharacterListChangedEventArgs
            {
                IsAdded = isAdd,
                ListArgument = ListKind.SearchResult
            };

            events.NewCharacterUpdate(characterManager.Find(character), updateArgs);
        }
Ejemplo n.º 8
0
        private void RealTimeBridgeCommand(IDictionary <string, object> command)
        {
            var type = command.Get(Constants.Arguments.Type);

            if (type == null)
            {
                return;
            }

            var doListAction = new Action <string, ListKind, bool, bool>((name, list, isAdd, giveUpdate) =>
                                                                         Dispatcher.Invoke(() =>
            {
                var result = isAdd
                        ? CharacterManager.Add(name, list)
                        : CharacterManager.Remove(name, list);

                var character = CharacterManager.Find(name);
                if (isAdd && character.Status == StatusType.Offline)
                {
                    CharacterManager.SignOff(name);
                }
                character.IsInteresting = CharacterManager.IsOfInterest(name);

                if (!giveUpdate || !result)
                {
                    return;
                }

                var eventargs = new CharacterListChangedEventArgs
                {
                    IsAdded      = isAdd,
                    ListArgument = list
                };

                Events.NewCharacterUpdate(character, eventargs);
            }));

            if (type.Equals("note"))
            {
                var senderName = command.Get(Constants.Arguments.Sender);
                var subject    = command.Get("subject");

                var update = new CharacterUpdateModel(
                    CharacterManager.Find(senderName),
                    new NoteEventArgs
                {
                    Subject = subject,
                    Target  = senderName + "/notes"
                });

                notes.UpdateNotesAsync(senderName);
                Events.NewUpdate(update);
            }
            else if (type.Equals("comment"))
            {
                var name = command.Get(Constants.Arguments.Name);

                // sometimes ID is sent as a string. Sometimes it is sent as a number.
                // so even though it's THE SAME COMMAND we have to treat *each* number differently
                var commentId = long.Parse(command.Get("id"));
                var parentId  = (long)command["parent_id"];
                var targetId  = long.Parse(command.Get("target_id"));

                var title = HttpUtility.HtmlDecode(command.Get("target"));

                var commentType =
                    command.Get("target_type").ToEnum <CommentEventArgs.CommentTypes>();

                var update = new CharacterUpdateModel(
                    CharacterManager.Find(name),
                    new CommentEventArgs
                {
                    CommentId   = commentId,
                    CommentType = commentType,
                    ParentId    = parentId,
                    TargetId    = targetId,
                    Title       = title
                });

                Events.NewUpdate(update);
            }
            else if (type.Equals("trackadd"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Bookmark, true, true);
            }
            else if (type.Equals("trackrem"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Bookmark, false, true);
            }
            else if (type.Equals("friendadd"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Friend, true, true);
                friendRequestService.UpdatePendingRequests();
                friendRequestService.UpdateOutgoingRequests();
            }
            else if (type.Equals("friendrequest"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.FriendRequestReceived, true, true);
                friendRequestService.UpdatePendingRequests();
            }
            else if (type.Equals("friendremove"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Friend, false, false);
            }
        }
Ejemplo n.º 9
0
        private void RealTimeBridgeCommand(IDictionary<string, object> command)
        {
            var type = command.Get(Constants.Arguments.Type);

            if (type == null) return;

            var doListAction = new Action<string, ListKind, bool, bool>((name, list, isAdd, giveUpdate) =>
                Dispatcher.Invoke(() =>
                {
                    var result = isAdd
                        ? CharacterManager.Add(name, list)
                        : CharacterManager.Remove(name, list);

                    var character = CharacterManager.Find(name);
                    if (isAdd && character.Status == StatusType.Offline)
                    {
                        CharacterManager.SignOff(name);
                    }
                    character.IsInteresting = CharacterManager.IsOfInterest(name);

                    if (!giveUpdate || !result) return;

                    var eventargs = new CharacterListChangedEventArgs
                    {
                        IsAdded = isAdd,
                        ListArgument = list
                    };

                    Events.NewCharacterUpdate(character, eventargs);
                }));

            if (type.Equals("note"))
            {
                var senderName = command.Get(Constants.Arguments.Sender);
                var subject = command.Get("subject");

                var update = new CharacterUpdateModel(
                    CharacterManager.Find(senderName),
                    new NoteEventArgs
                    {
                        Subject = subject,
                        Target = senderName + "/notes"
                    });

                notes.UpdateNotesAsync(senderName);
                Events.NewUpdate(update);
            }
            else if (type.Equals("comment"))
            {
                var name = command.Get(Constants.Arguments.Name);

                // sometimes ID is sent as a string. Sometimes it is sent as a number.
                // so even though it's THE SAME COMMAND we have to treat *each* number differently
                var commentId = long.Parse(command.Get("id"));
                var parentId = (long) command["parent_id"];
                var targetId = long.Parse(command.Get("target_id"));

                var title = HttpUtility.HtmlDecode(command.Get("target"));

                var commentType =
                    command.Get("target_type").ToEnum<CommentEventArgs.CommentTypes>();

                var update = new CharacterUpdateModel(
                    CharacterManager.Find(name),
                    new CommentEventArgs
                    {
                        CommentId = commentId,
                        CommentType = commentType,
                        ParentId = parentId,
                        TargetId = targetId,
                        Title = title
                    });

                Events.NewUpdate(update);
            }
            else if (type.Equals("trackadd"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Bookmark, true, true);
            }
            else if (type.Equals("trackrem"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Bookmark, false, true);
            }
            else if (type.Equals("friendadd"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Friend, true, true);
                friendRequestService.UpdatePendingRequests();
                friendRequestService.UpdateOutgoingRequests();
            }
            else if (type.Equals("friendrequest"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.FriendRequestReceived, true, true);
                friendRequestService.UpdatePendingRequests();
            }
            else if (type.Equals("friendremove"))
            {
                var name = command.Get(Constants.Arguments.Name);
                doListAction(name, ListKind.Friend, false, false);
            }
        }