public RoomModuleViewModel(IRoom room, IMessageBus bus, IUserCache userCache, IChatDocument chatDocument, IClipboardService clipboardService, IGlobalCommands commands) { _room = room; _bus = bus; _userCache = userCache; _chatDocument = chatDocument; Topic = _room.Topic; Users = new ReactiveCollection <UserViewModel>(); UserMessage = String.Empty; PostMessageCommand = new ReactiveCommand(this.ObservableForProperty(vm => vm.UserEditedMessage) .Select(c => c.Value).StartWith(false)); Subscribe(() => PostMessageCommand.Subscribe(HandlePostMessage)); _messages = new List <RoomMessage>(); Subscribe(() => _bus.RegisterMessageSource( _bus.Listen <ConnectionState>() .Where(msg => msg.RoomId == room.Id) .Do(cs => IsConnected = cs.Connected) .Where(cs => cs.Connected) .Delay(TimeSpan.FromSeconds(10), RxApp.TaskpoolScheduler) .Where(_ => _streamingStarted && IsConnected) .Select(_ => new RequestRecentMessagesMessage(_room.Id)))); ; Subscribe( () => _bus.Listen <MessagesReceivedMessage>().Where(msg => msg.RoomId == room.Id).SubscribeUI(HandleMessagesReceived)); Subscribe( () => _bus.Listen <RoomInfoReceivedMessage>().Where(msg => msg.Room.Id == _room.Id).SubscribeUI(HandleRoomInfoReceived)); Subscribe(() => _bus.Listen <UsersUpdatedMessage>().SubscribeUI(HandleUsersUpdated)); _bus.SendMessage(new RequestRecentMessagesMessage(room.Id)); _bus.SendMessage(new RequestRoomInfoMessage(_room.Id)); Subscribe(() => _bus.RegisterMessageSource(Observable.Interval(TimeSpan.FromMinutes(5)).Select( _ => new RequestKeepAliveMessage(_room.Id)))); PasteCommand = new ReactiveCommand(); Subscribe(() => PasteCommand.Select(pc => clipboardService.GetClipboardItem()) .Where(ci => ci != null) .Subscribe(ci => _chatDocument.AddPasteFile(_room, ci))); var leaveRoomCommand = commands.LeaveRoomCommand.OfType <int>().Where(id => id == _room.Id); Subscribe(_bus.RegisterMessageSource(leaveRoomCommand.Select(_ => new RequestStopStreamingMessage(_room.Id)))); Subscribe(_bus.RegisterMessageSource(leaveRoomCommand.Select(_ => new RequestLeaveRoomMessage(_room.Id)))); Subscribe( _bus.RegisterMessageSource( leaveRoomCommand.Select(_ => new ActivateModuleByIdMessage(ModuleNames.MainCampfireView, ModuleIds.Lobby)))); }
public ToastViewModel(ShowToastMessage showToastMessage, IChatDocument document, IMessageBus bus, IApplicationActivator activator) { _document = document; _document.FontSize = 14; IsVisible = true; RoomName = showToastMessage.Message.Room.Name; _document.AddMessage(showToastMessage.Message.Message, showToastMessage.Message.User, null); CloseCommand = new ReactiveCommand(); ActivateCommand = new ReactiveCommand(); Closed = Observable.Timer(TimeSpan.FromSeconds(showToastMessage.Action.SecondsVisible), RxApp.TaskpoolScheduler) .Do(_ => IsClosing = true).Delay(TimeSpan.FromSeconds(2), RxApp.TaskpoolScheduler) .Select(_ => Unit.Default) .Merge(CloseCommand.Select(_ => Unit.Default)) .Merge(ActivateCommand.Select(_ => Unit.Default)); Subscribe(() => bus.RegisterMessageSource( ActivateCommand.Select( _ => new ActivateModuleByIdMessage(ModuleNames.MainCampfireView, showToastMessage.Message.Room.Id)) .Do(_ => activator.Activate()))); }
public ToastViewModel(ShowToastMessage showToastMessage, IChatDocument document, IMessageBus bus, IApplicationActivator activator) { _document = document; _document.FontSize = 14; IsVisible = true; RoomName = showToastMessage.Message.Room.Name; _document.AddMessage(showToastMessage.Message.Message, showToastMessage.Message.User, null); CloseCommand = new ReactiveCommand(); ActivateCommand = new ReactiveCommand(); Closed = Observable.Timer(TimeSpan.FromSeconds(showToastMessage.Action.SecondsVisible), RxApp.TaskpoolScheduler) .Do(_ => IsClosing = true).Delay(TimeSpan.FromSeconds(2), RxApp.TaskpoolScheduler) .Select(_ => Unit.Default) .Merge(CloseCommand.Select(_ => Unit.Default)) .Merge(ActivateCommand.Select(_ => Unit.Default)); Subscribe(() =>bus.RegisterMessageSource( ActivateCommand.Select( _ => new ActivateModuleByIdMessage(ModuleNames.MainCampfireView, showToastMessage.Message.Room.Id)) .Do(_ => activator.Activate()))); }