private async Task Import() { ProgressDialogController dialogController = null; try { var uri = $"{FolderName}\\{FileName}"; if (!Directory.Exists(FolderName)) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "Directory does not exists"); return; } if (File.Exists(uri)) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "File already exists"); return; } if (!Scheme.IsSchemeValid()) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "Selected Scheme is not valid\nRows or Columns are empty"); return; } dialogController = await _dialogCoordinator.ShowProgressAsync(this, "Cards Loading", "Loading..."); dialogController.SetIndeterminate(); var filter = Scheme.GetCardFilter(); var cards = await _repository.LoadCards(filter); cards.ForEach(x => x.Color = DefaultColorItems.LemonChiffon.SystemName); // Fill order numbers inside each cell cards .GroupBy(x => new { x.RowId, x.ColumnId }) .ToList() .ForEach(cell => { int i = -10; cell.ToList().ForEach(y => y.Order = i += 10); }); var columns = _scheme.Columns.Where(x => filter.BoardIds.Contains(x.BoardId) && filter.ColumnIds.Contains(x.Id)); if (DontImportUnusedColumns) { columns = columns.Where(x => cards.Exists(y => y.ColumnId == x.Id)); } var rows = _scheme.Rows.Where(x => filter.BoardIds.Contains(x.BoardId) && filter.RowIds.Contains(x.Id)); if (DontImportUnusedRows) { rows = rows.Where(x => cards.Exists(y => y.RowId == x.Id)); } var boxViewModel = await _appModel.Create(uri); boxViewModel.Load(new Box { Boards = _scheme.Boards.Where(x => filter.BoardIds.Contains(x.Id)).ToList(), Columns = columns.ToList(), Rows = rows.ToList(), Cards = cards }); await dialogController.CloseAsync(); _appConfig.UpdateRecent(uri, false); _shell.ShowView <BoardView>( viewRequest: new BoardViewRequest { ViewId = uri, Box = boxViewModel }, options: new UiShowOptions { Title = "*" }); } catch (Exception e) { if (dialogController != null) { await dialogController.CloseAsync(); } await _dialogCoordinator.ShowMessageAsync(this, "Error", e.Message); } }
private async Task CreateCommandExecute() { // 1. Checks if (string.IsNullOrWhiteSpace(BoardName) || string.IsNullOrWhiteSpace(FileName) || string.IsNullOrWhiteSpace(FolderName)) { await dialCoord.ShowMessageAsync(this, "Error", "Empty string"); return; } if (!Directory.Exists(FolderName)) { await dialCoord.ShowMessageAsync(this, "Error", "Directory does not exists"); return; } string uri = FolderName + "\\" + FileName; if (!IsNewFile && !File.Exists(uri)) { await dialCoord.ShowMessageAsync(this, "Error", "File not found"); return; } if (IsNewFile && File.Exists(uri)) { await dialCoord.ShowMessageAsync(this, "Error", "File already exists"); return; } if (Columns.Count == 0) { await dialCoord.ShowMessageAsync(this, "Error", "Need add columns"); return; } if (Rows.Count == 0) { await dialCoord.ShowMessageAsync(this, "Error", "Need add rows"); return; } // 2. Create board (or get from preloaded) BoxViewModel box; if (IsNewFile) { box = await appModel.Create(uri); if (!box.Loaded) { throw new Exception("File not loaded"); } appConfig.UpdateRecent(uri, false); } else { box = await appModel.Load(uri); if (!box.Loaded) { appConfig.RemoveRecent(uri); appModel.Remove(uri); await dialCoord.ShowMessageAsync(this, "Error", "File was damaged"); return; } if (box.Boards.Items.Any(x => x.Name == BoardName)) { await dialCoord.ShowMessageAsync(this, "Error", "Board name already used"); return; } } var bvm = new BoardViewModel { Name = BoardName, Created = DateTime.Now, Modified = DateTime.Now }; box.Boards.Add(bvm); // 3. Normalize grid double colSize = Columns.Count == 1 ? 100 : 100 / (Columns.Count - 1); for (var i = 0; i < Columns.Count; i++) { Columns[i].Order = i; } double rowSize = Rows.Count == 1 ? 100 : 100 / (Rows.Count - 1); for (var i = 0; i < Rows.Count; i++) { Rows[i].Order = i; } // 4. Create columns foreach (var cvm in Columns) { var colToAdd = new ColumnViewModel { BoardId = bvm.Id, Size = (int)colSize * 10, Order = cvm.Order, Name = cvm.Name }; box.Columns.Add(colToAdd); } // 5. Create rows foreach (var rvm in Rows) { var rowToAdd = new RowViewModel { BoardId = bvm.Id, Size = (int)rowSize * 10, Order = rvm.Order, Name = rvm.Name }; box.Rows.Add(rowToAdd); } shell.ShowView <BoardView>( viewRequest: new BoardViewRequest { ViewId = uri, Box = box, Board = bvm }, options: new UiShowOptions { Title = BoardName }); this.Close(); }
private async Task Import() { ProgressDialogController dialogController = null; try { var uri = $"{FolderName}\\{FileName}"; if (!Directory.Exists(FolderName)) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "Directory does not exists"); return; } if (File.Exists(uri)) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "File already exists"); return; } if (!Scheme.IsSchemeValid()) { await _dialogCoordinator.ShowMessageAsync(this, "Error", "Selected Scheme is not valid\nRows or Columns are empty"); return; } dialogController = await _dialogCoordinator.ShowProgressAsync(this, "Cards Loading", "Loading..."); dialogController.SetIndeterminate(); var filter = Scheme.GetCardFilter(); var cards = await _repository.LoadCards(filter); var boxViewModel = await _appModel.Create(uri); boxViewModel.Load(new Box { Boards = _scheme.Boards.Where(x => filter.BoardIds.Contains(x.Id)).ToList(), Columns = _scheme.Columns.Where(x => filter.BoardIds.Contains(x.BoardId) && filter.ColumnIds.Contains(x.Id)).ToList(), Rows = _scheme.Rows.Where(x => filter.BoardIds.Contains(x.BoardId) && filter.RowIds.Contains(x.Id)).ToList(), Cards = cards }); await dialogController.CloseAsync(); _appConfig.UpdateRecent(uri, false); _shell.ShowView <BoardView>( viewRequest: new BoardViewRequest { ViewId = uri, Box = boxViewModel }, options: new UiShowOptions { Title = "*" }); } catch (Exception e) { if (dialogController != null) { await dialogController.CloseAsync(); } await _dialogCoordinator.ShowMessageAsync(this, "Error", e.Message); } }