Ejemplo n.º 1
0
        private async Task OnImport()
        {
            var file = selectFile(SelectFileType.Open, JsonExtension, "Choose a file to import");

            if (file == null)
            {
                return;
            }

            var json = File.ReadAllText(file);
            var data = JsonConvert.DeserializeObject <ApiItem[]>(json, importExportJsonSettings);

            foreach (var item in data.Select(x => ApiItemModel.Import(this, null, x)))
            {
                await Repository.AddItem(item.ItemModel);
            }
        }
Ejemplo n.º 2
0
        public MainWindowModel(Func <SelectFileType, string, string, string> selectFile)
        {
            this.selectFile = selectFile;

            var canAddChild = this.ObserveProperty(x => x.SelectedItem).Select(x => x is ApiCollectionModel);

            AddApi                = RxFunction.CreateAsync(async() => await OnAddApi(null));
            AddApiCollection      = RxFunction.CreateAsync(async() => await OnAddApiCollection(null));
            AddChildApi           = RxFunction.CreateAsync(async() => await OnAddApi((ApiCollectionModel)SelectedItem), canAddChild);
            AddChildApiCollection = RxFunction.CreateAsync(async() => await OnAddApiCollection((ApiCollectionModel)SelectedItem), canAddChild);
            Export                = RxCommand.Create(OnExport);
            Import                = RxCommand.CreateAsync(OnImport);
            Title       = "Restless";
            Items       = new RxList <ApiItemModel>();
            Methods     = httpMethods.ToList();
            OutputTypes = outputTypes.ToList();

            SplitterPosition    = Settings.Default.MainWindowSplitterPosition;
            ApiSplitterPosition = Settings.Default.ApiPanelSplitterPosition;
            this.ObservePropertyChange(x => x.SplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x =>
            {
                Settings.Default.MainWindowSplitterPosition = x;
                Settings.Default.Save();
            });
            this.ObservePropertyChange(x => x.ApiSplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x =>
            {
                Settings.Default.ApiPanelSplitterPosition = x;
                Settings.Default.Save();
            });

            ApiItemModel selectedItem = null;

            this.ObservePropertyChange(x => x.SelectedItem).Subscribe(x =>
            {
                if (selectedItem != null)
                {
                    selectedItem.IsSelected = false;
                }
                selectedItem = x;
                if (selectedItem != null)
                {
                    selectedItem.IsSelected = true;
                }
            });

            Repository = new DbRepository(new RestlessDb());

            Task.Run(async() =>
            {
                await Repository.Initialize();
                await Repository.Load();
                foreach (var apiItem in Repository.Items)
                {
                    if (apiItem is Api)
                    {
                        Items.Add(new ApiModel(this, null, (Api)apiItem));
                    }
                    else
                    {
                        Items.Add(new ApiCollectionModel(this, null, (ApiCollection)apiItem));
                    }
                }
            });

            DeleteSelectedItem = RxCommand.CreateAsync(OnDeleteSelectedItem);
        }