public RoomViewModel(JabbrConnection jabbr, Room room) : base() { Connection = jabbr; Room = room; TypedMessage = string.Empty; Messages = new ObservableCollection<MessageViewModel> (); subTokMessageReceived = Messenger.SubscribeOnMainThread<JabbrMessageReceivedMessage> (msg => { if (!msg.RoomName.Equals(Room.Name, StringComparison.OrdinalIgnoreCase)) return; lock (Messages) Messages.Add(new MessageViewModel(msg.Message)); }); subTokUserJoin = Messenger.Subscribe<JabbrUserJoinedMessage> (msg => { if (!msg.RoomName.Equals(Room.Name, StringComparison.OrdinalIgnoreCase)) return; var uvm = new UserViewModel(msg.User); lock(Users) { if (!Users.Contains(uvm)) _users.Add(uvm); } RaisePropertyChanged(() => Users); }); subTokUserLeft = Messenger.Subscribe<JabbrUserLeftMessage> (msg => { if (!msg.RoomName.Equals(Room.Name, StringComparison.OrdinalIgnoreCase)) return; var uvm = new UserViewModel(msg.User); lock(Users) { if (Users.Contains(uvm)) _users.Remove(uvm); } RaisePropertyChanged(() => Users); }); subTokCurrentRoomChgd = Messenger.Subscribe<CurrentRoomChangedMessage>(msg => { IsCurrent = msg.NewRoom.Room.Name.Equals(this.Room.Name, StringComparison.OrdinalIgnoreCase); RaisePropertyChanged(() => IsCurrent); }); LoadRoom (); }
public Task JoinRoom(Room room) { RoomViewModel basicRoomVm = GetRoom(room); return JoinRoom(basicRoomVm); }
private void OnRoomCountChanged(Room room, int userCount) { InvokeIfInRoom(room, roomVm => PostOnUi(() => roomVm.UserCount = userCount)); }
private void OnTopicChanged(Room room) { InvokeIfInRoom(room, roomVm => PostOnUi(() => roomVm.SetTopic(room.Topic))); }
private void InvokeIfInRoom(Room room, Action<RoomViewModel> toInvoke) { RoomViewModel roomVm = GetRoom(room.Name); InvokeIfInRoom(roomVm, toInvoke); }
public RoomViewModel GetRoom(Room room, bool isJoining = false) { RoomViewModel toReturn = GetRoom(room.Name); if (toReturn != null) return toReturn; toReturn = _serviceLocator.GetViewModel<RoomViewModel>(); toReturn.IsNotifying = false; toReturn.Populate(room); toReturn.IsNotifying = true; _roomStore.TryAdd(room.Name, toReturn); return toReturn; }
public JabbrTopicChangedMessage(object sender, JabbrConnection jabbr, Room room) : base(sender, jabbr) { this.Room = room; }
public JabbrRoomCountChangedMessage(object sender, JabbrConnection jabbr, Room room, int count) : base(sender, jabbr) { this.Room = room; this.Count = count; }
public JabbrJoinedRoomMessage(object sender, JabbrConnection jabbr, Room room) : base(sender, jabbr) { this.Room = room; }
public async Task JoinRoom(Room room) { try { await Client.JoinRoom(room.Name); } catch (Exception ex) { Mvx.Error (ex.ToString()); } if (!RoomsIn.Exists(r => r.Name.Equals(room.Name, StringComparison.OrdinalIgnoreCase))) RoomsIn.Add (room); }
void OnJoinedRoom(Room room) { Trace.Call(room); var groupChat = new GroupChatModel(room.Name, room.Name, this); groupChat.InitMessageBuffer(MessageBufferPersistencyType.Volatile); var task = Client.GetRoomInfo(room.Name); task.Wait(); // check task.Exception var roomInfo = task.Result; groupChat.Topic = CreateMessageBuilder<JabbrMessageBuilder>(). AppendMessage(roomInfo.Topic). ToMessage(); foreach (var user in roomInfo.Users) { groupChat.UnsafePersons.Add(user.Name, CreatePerson(user)); } // add ourself if needed if (!groupChat.UnsafePersons.ContainsKey(Username)) { groupChat.UnsafePersons.Add(Username, Me); } Session.AddChat(groupChat); Session.SyncChat(groupChat); }
public RoomListItemViewModel(JabbrConnection jabbr, Room room) { Jabbr = jabbr; Room = room; }
void HandleJoinedRoom(JabbR.Client.Models.Room room) { Log("JoinedRoom> " + room.Name); _messenger.Publish(new JabbrJoinedRoomMessage(this, this, room)); }
internal void OnJoined(Room roomDetails) { Populate(roomDetails, false); // ReSharper disable UseObjectOrCollectionInitializer _typingTimer = new DispatcherTimer(); // ReSharper restore UseObjectOrCollectionInitializer _typingTimer.Interval = TimeSpan.FromSeconds(3); _typingTimer.Tick += TypingExpired; JoinState = JoinState.Joined; }
internal void Populate(Room roomDetails, bool suppressNotification = true) { if (suppressNotification) SetIsNotifying(false); RoomName = roomDetails.Name; IsPrivate = roomDetails.Private; UserCount = roomDetails.Count; Topic = roomDetails.Topic; if (roomDetails.Owners != null) _owners = new List<string>(roomDetails.Owners); if (roomDetails.Users != null) { int userCount = 0; foreach (User user in roomDetails.Users) { AddUser(user); userCount = userCount + 1; } UserCount = userCount; } if (roomDetails.RecentMessages != null && roomDetails.RecentMessages.Any()) { IEnumerable<ChatMessageViewModel> messageViewModels = _messageService.ProcessMessages(roomDetails.RecentMessages); foreach (ChatMessageViewModel chatMessageViewModel in messageViewModels) { ProcessMessage(chatMessageViewModel, true); } } if (suppressNotification) SetIsNotifying(true); }