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); }); }
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); }
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); }
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); }); }
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); }
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); }
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); }
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); } }
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); } }