feat: add ActivityLogForm with color-coded DataGridView

This commit is contained in:
2026-04-07 11:45:10 +01:00
parent 3401cfce34
commit a3a8f2e4be

View File

@@ -0,0 +1,95 @@
namespace SpamGuard.Tray;
using SpamGuard.Models;
using SpamGuard.Services;
public sealed class ActivityLogForm : Form
{
private readonly ActivityLog _activityLog;
private readonly DataGridView _grid;
public ActivityLogForm(ActivityLog activityLog)
{
_activityLog = activityLog;
Text = "SpamGuard - Activity Log";
Size = new System.Drawing.Size(800, 500);
StartPosition = FormStartPosition.CenterScreen;
Icon = IconGenerator.Green;
_grid = new DataGridView
{
Dock = DockStyle.Fill,
ReadOnly = true,
AllowUserToAddRows = false,
AllowUserToDeleteRows = false,
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
SelectionMode = DataGridViewSelectionMode.FullRowSelect,
BackgroundColor = System.Drawing.SystemColors.Window,
BorderStyle = BorderStyle.None
};
_grid.Columns.Add("Time", "Time");
_grid.Columns.Add("From", "From");
_grid.Columns.Add("Subject", "Subject");
_grid.Columns.Add("Verdict", "Verdict");
_grid.Columns.Add("Confidence", "Confidence");
_grid.Columns.Add("Reason", "Reason");
_grid.Columns["Time"]!.Width = 70;
_grid.Columns["From"]!.Width = 150;
_grid.Columns["Verdict"]!.Width = 80;
_grid.Columns["Confidence"]!.Width = 80;
Controls.Add(_grid);
RefreshData();
}
public void RefreshData()
{
if (InvokeRequired)
{
Invoke(RefreshData);
return;
}
var entries = _activityLog.GetRecent(200);
_grid.Rows.Clear();
foreach (var entry in entries)
{
var rowIndex = _grid.Rows.Add(
entry.Timestamp.ToLocalTime().ToString("HH:mm:ss"),
entry.Sender,
entry.Subject,
entry.Verdict.ToString(),
entry.Confidence?.ToString("P0") ?? "--",
entry.Reason ?? ""
);
var row = _grid.Rows[rowIndex];
row.DefaultCellStyle.ForeColor = entry.Verdict switch
{
Verdict.Spam => System.Drawing.Color.Red,
Verdict.Trusted => System.Drawing.Color.Green,
Verdict.Uncertain => System.Drawing.Color.Orange,
Verdict.Error => System.Drawing.Color.Gray,
_ => System.Drawing.SystemColors.ControlText
};
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
}
else
{
base.OnFormClosing(e);
}
}
}