Example #1
0
        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);
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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);
            }
        }