using ConfectioneryBusinessLogic.MailWorker; using ConfectioneryContracts.BusinessLogicsContracts; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ConfectioneryContracts.ViewModels; namespace ConfectioneryView { public partial class FormViewMail : Form { private readonly ILogger _logger; private readonly IMessageInfoLogic _logic; private int currentPage = 1; public int pageSize = 5; public FormViewMail(ILogger logger, IMessageInfoLogic logic) { InitializeComponent(); _logger = logger; _logic = logic; buttonPrevPage.Enabled = false; } private void FormViewMail_Load(object sender, EventArgs e) { MailLoad(); } private bool MailLoad() { try { var list = _logic.ReadList(new() { Page = currentPage, PageSize = pageSize, }); if (list != null) { dataGridView.DataSource = list; dataGridView.Columns["ClientId"].Visible = false; dataGridView.Columns["MessageId"].Visible = false; dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } _logger.LogInformation("Загрузка списка писем"); labelInfoPages.Text = $"{currentPage} страница"; return true; } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки писем"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } private void ButtonPrevPage_Click(object sender, EventArgs e) { if (currentPage == 1) { _logger.LogWarning("Неккоректный номер страницы {page}", currentPage - 1); return; } currentPage--; if (MailLoad()) { buttonNextPage.Enabled = true; if (currentPage == 1) { buttonPrevPage.Enabled = false; } } } private void ButtonNextPage_Click(object sender, EventArgs e) { currentPage++; if (!MailLoad() || ((List)dataGridView.DataSource).Count == 0) { _logger.LogWarning("Out of range messages"); currentPage--; MailLoad(); buttonNextPage.Enabled = false; } else { buttonPrevPage.Enabled = true; } } } }