Ejemplo n.º 1
0
		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 ();
		}
Ejemplo n.º 2
0
 public Task JoinRoom(Room room)
 {
     RoomViewModel basicRoomVm = GetRoom(room);
     return JoinRoom(basicRoomVm);
 }
Ejemplo n.º 3
0
 private void OnRoomCountChanged(Room room, int userCount)
 {
     InvokeIfInRoom(room, roomVm => PostOnUi(() => roomVm.UserCount = userCount));
 }
Ejemplo n.º 4
0
 private void OnTopicChanged(Room room)
 {
     InvokeIfInRoom(room, roomVm => PostOnUi(() => roomVm.SetTopic(room.Topic)));
 }
Ejemplo n.º 5
0
 private void InvokeIfInRoom(Room room, Action<RoomViewModel> toInvoke)
 {
     RoomViewModel roomVm = GetRoom(room.Name);
     InvokeIfInRoom(roomVm, toInvoke);
 }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
 public JabbrTopicChangedMessage(object sender, JabbrConnection jabbr, Room room)
     : base(sender, jabbr)
 {
     this.Room = room;
 }
Ejemplo n.º 8
0
 public JabbrRoomCountChangedMessage(object sender, JabbrConnection jabbr, Room room, int count)
     : base(sender, jabbr)
 {
     this.Room = room;
     this.Count = count;
 }
Ejemplo n.º 9
0
 public JabbrJoinedRoomMessage(object sender, JabbrConnection jabbr, Room room)
     : base(sender, jabbr)
 {
     this.Room = room;
 }
Ejemplo n.º 10
0
		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);
		}
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
 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));
 }
Ejemplo n.º 14
0
        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;
        }
Ejemplo n.º 15
0
        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);
        }