コード例 #1
0
        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);
                }
            });
        }
コード例 #2
0
        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);
                }
            });
        }
コード例 #3
0
        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);
                });
        }
コード例 #4
0
        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);
            });
        }
コード例 #5
0
 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)));
 }
コード例 #6
0
 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))));
 }