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); } }
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); }