public RoomsViewModel(IGitterApi api = null, IScreen hostScreen = null) { this.HostScreen = hostScreen ?? Locator.Current.GetService<IScreen>(); this.Rooms = new ReactiveList<RoomViewModel>(); this.LoadRooms = ReactiveCommand.CreateAsyncObservable(_ => LoadRoomsImpl(api ?? GitterApi.UserInitiated)); this.LoadRooms.Subscribe(x => { using (this.Rooms.SuppressChangeNotifications()) { this.Rooms.Clear(); this.Rooms.AddRange(x); } }); }
public RoomsViewModel(IGitterApi api = null, IScreen hostScreen = null) { this.HostScreen = hostScreen ?? Locator.Current.GetService <IScreen>(); this.Rooms = new ReactiveList <RoomViewModel>(); this.LoadRooms = ReactiveCommand.CreateAsyncObservable(_ => LoadRoomsImpl(api ?? GitterApi.UserInitiated)); this.LoadRooms.Subscribe(x => { using (this.Rooms.SuppressChangeNotifications()) { this.Rooms.Clear(); this.Rooms.AddRange(x); } }); }
public MessagesViewModel(Room room, IGitterApi api = null, IScreen hostScreen = null) { this.HostScreen = hostScreen ?? Locator.Current.GetService<IScreen>(); this.Messages = new ReactiveList<MessageViewModel>(); this.UrlPathSegment = room.name; IObservable<string> accessToken = GitterApi.GetAccessToken().PublishLast().RefCount(); this.LoadMessages = ReactiveCommand.CreateAsyncObservable(_ => accessToken.SelectMany(token => (api ?? GitterApi.UserInitiated).GetMessages(room.id, token))); this.Users = new ReactiveList<UserViewModel>(); this.LoadUsers = ReactiveCommand.CreateAsyncObservable(_ => accessToken .SelectMany(token => (api ?? GitterApi.UserInitiated).GetRoomUsers(room.id, token)) .Select(users => users.OrderBy(user => user.displayName, StringComparer.CurrentCulture).Select(user => new UserViewModel(user)))); this.LoadUsers.Subscribe(x => { using (this.Users.SuppressChangeNotifications()) { this.Users.Clear(); this.Users.AddRange(x); } }); this.SendMessage = ReactiveCommand.CreateAsyncTask(this.WhenAnyValue(x => x.MessageText, x => !String.IsNullOrWhiteSpace(x)), async _ => { await (api ?? GitterApi.UserInitiated).SendMessage(room.id, new SendMessage(this.MessageText), await accessToken); this.MessageText = String.Empty; }); this.LoadMessages.FirstAsync().SelectMany(x => x.ToObservable()) .Concat(this.StreamMessages(room.id)) .Select(x => new MessageViewModel(x)) .Subscribe(x => { this.Messages.Insert(0, x); }); }
public MessagesViewModel(Room room, IGitterApi api = null, IScreen hostScreen = null) { this.HostScreen = hostScreen ?? Locator.Current.GetService <IScreen>(); this.Messages = new ReactiveList <MessageViewModel>(); this.UrlPathSegment = room.name; IObservable <string> accessToken = GitterApi.GetAccessToken().PublishLast().RefCount(); this.LoadMessages = ReactiveCommand.CreateAsyncObservable(_ => accessToken.SelectMany(token => (api ?? GitterApi.UserInitiated).GetMessages(room.id, token))); this.Users = new ReactiveList <UserViewModel>(); this.LoadUsers = ReactiveCommand.CreateAsyncObservable(_ => accessToken .SelectMany(token => (api ?? GitterApi.UserInitiated).GetRoomUsers(room.id, token)) .Select(users => users.OrderBy(user => user.displayName, StringComparer.CurrentCulture).Select(user => new UserViewModel(user)))); this.LoadUsers.Subscribe(x => { using (this.Users.SuppressChangeNotifications()) { this.Users.Clear(); this.Users.AddRange(x); } }); this.SendMessage = ReactiveCommand.CreateAsyncTask(this.WhenAnyValue(x => x.MessageText, x => !String.IsNullOrWhiteSpace(x)), async _ => { await(api ?? GitterApi.UserInitiated).SendMessage(room.id, new SendMessage(this.MessageText), await accessToken); this.MessageText = String.Empty; }); this.LoadMessages.FirstAsync().SelectMany(x => x.ToObservable()) .Concat(this.StreamMessages(room.id)) .Select(x => new MessageViewModel(x)) .Subscribe(x => { this.Messages.Insert(0, x); }); }
private static IObservable<IEnumerable<RoomViewModel>> LoadRoomsImpl(IGitterApi api) { return GitterApi.GetAccessToken() .SelectMany(api.GetRooms) .Select(rooms => rooms.OrderBy(room => room.name, StringComparer.CurrentCulture).Select(room => new RoomViewModel(room))); }
private static IObservable <IEnumerable <RoomViewModel> > LoadRoomsImpl(IGitterApi api) { return(GitterApi.GetAccessToken() .SelectMany(api.GetRooms) .Select(rooms => rooms.OrderBy(room => room.name, StringComparer.CurrentCulture).Select(room => new RoomViewModel(room)))); }