示例#1
0
        public GistCreateViewModel(IApplicationService applicationService, IAlertDialogFactory alertDialogFactory)
        {
            _applicationService = applicationService;
            CurrentAccount      = applicationService.Account;

            Title    = "Create Gist";
            IsPublic = true;

            var files = new ReactiveList <Tuple <string, string> >();

            Files = files.CreateDerivedCollection(x =>
            {
                var item = new GistFileItemViewModel(x.Item1, x.Item2);
                item.EditCommand.Subscribe(_ => NavigateTo(new GistFileEditViewModel(y =>
                {
                    var i = files.IndexOf(x);
                    files.Remove(x);
                    files.Insert(i, y);
                    return(Task.FromResult(0));
                })
                {
                    Filename    = x.Item1,
                    Description = x.Item2
                }));
                item.DeleteCommand.Subscribe(_ => files.Remove(x));
                return(item);
            });

            SaveCommand = ReactiveCommand.CreateAsyncTask(Files.CountChanged.Select(x => x > 0),
                                                          async t =>
            {
                var createGist = new GistCreateModel
                {
                    Description = Description,
                    Public      = IsPublic,
                    Files       = Files.ToDictionary(x => x.Name, x => new GistCreateModel.File {
                        Content = x.Content
                    })
                };

                var request = _applicationService.Client.AuthenticatedUser.Gists.CreateGist(createGist);
                using (alertDialogFactory.Activate("Creating Gist..."))
                    return((await _applicationService.Client.ExecuteAsync(request)).Data);
            });
            SaveCommand.Subscribe(_ => Dismiss());

            AddGistFileCommand = ReactiveCommand.Create()
                                 .WithSubscription(_ => NavigateTo(new GistFileAddViewModel(x =>
            {
                if (Files.Any(y => y.Name == x.Item1))
                {
                    throw new Exception("Gist already contains a file with that name!");
                }
                files.Add(x);
                return(Task.FromResult(0));
            })));
        }
示例#2
0
        protected GistModifyViewModel()
        {
            Files = InternalFiles.CreateDerivedCollection(x =>
            {
                var item = new GistFileItemViewModel(x.Item1, x.Item2);
                item.EditCommand.Subscribe(_ => NavigateTo(new GistFileEditViewModel(y =>
                {
                    var i = InternalFiles.IndexOf(x);
                    InternalFiles.Remove(x);
                    InternalFiles.Insert(i, Tuple.Create(y.Item1.Trim(), y.Item2));
                    return(Task.FromResult(0));
                })
                {
                    Filename    = x.Item1,
                    Description = x.Item2
                }));
                item.DeleteCommand.Subscribe(_ => InternalFiles.Remove(x));
                return(item);
            });

            var canSave = new BehaviorSubject <bool>(false);

            Files.IsEmptyChanged.Select(x => !x).Subscribe(canSave.OnNext);

            SaveCommand = ReactiveCommand.CreateAsyncTask(canSave, _ => SaveGist());
            SaveCommand.Subscribe(_ => Dismiss());

            AddGistFileCommand = ReactiveCommand.Create();
            AddGistFileCommand.Subscribe(_ => NavigateTo(new GistFileAddViewModel(x =>
            {
                if (Files.Any(y => y.Name == x.Item1))
                {
                    throw new Exception("Gist already contains a file with that name!");
                }
                InternalFiles.Add(Tuple.Create(x.Item1.Trim(), x.Item2));
                return(Task.FromResult(0));
            })));

            DismissCommand = ReactiveCommand.CreateAsyncTask(t => Discard());
            DismissCommand.Where(x => x).Subscribe(_ => Dismiss());
        }
示例#3
0
        protected GistModifyViewModel()
        {
            Files = InternalFiles.CreateDerivedCollection(x => 
            {
                var item = new GistFileItemViewModel(x.Item1, x.Item2);
                item.EditCommand.Subscribe(_ => NavigateTo(new GistFileEditViewModel(y =>
                {
                    var i = InternalFiles.IndexOf(x);
                    InternalFiles.Remove(x);
                    InternalFiles.Insert(i, Tuple.Create(y.Item1.Trim(), y.Item2));
                    return Task.FromResult(0);
                })
                {
                    Filename = x.Item1,
                    Description = x.Item2
                }));
                item.DeleteCommand.Subscribe(_ => InternalFiles.Remove(x));
                return item;
            });

            var canSave = new BehaviorSubject<bool>(false);
            Files.IsEmptyChanged.Select(x => !x).Subscribe(canSave.OnNext);

            SaveCommand = ReactiveCommand.CreateAsyncTask(canSave, _ => SaveGist());
            SaveCommand.Subscribe(_ => Dismiss());

            AddGistFileCommand = ReactiveCommand.Create();
            AddGistFileCommand.Subscribe(_ => NavigateTo(new GistFileAddViewModel(x =>
            {
                if (Files.Any(y => y.Name == x.Item1))
                    throw new Exception("Gist already contains a file with that name!");
                InternalFiles.Add(Tuple.Create(x.Item1.Trim(), x.Item2));
                return Task.FromResult(0);
            })));

            DismissCommand = ReactiveCommand.CreateAsyncTask(t => Discard());
            DismissCommand.Where(x => x).Subscribe(_ => Dismiss());
        }