journal-bot/tools/JournalBot.Tray/MainWindow.xaml.cs

63 lines
1.8 KiB
C#

using System.ComponentModel;
using System.Windows;
using JournalBot.Shared;
namespace JournalBot.Tray;
public partial class MainWindow : Window
{
private readonly BotRunner _runner;
private readonly RuntimeReader _reader;
public MainWindow(BotRunner runner, RuntimeReader reader)
{
_runner = runner;
_reader = reader;
InitializeComponent();
Refresh();
}
// Hide instead of close (keep app alive in tray).
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
Hide();
}
public void Refresh()
{
var status = _reader.ReadStatus();
StatusBanner.Text = $"{status.Pending} pending · {status.Failed} failed";
HistoryGrid.ItemsSource = _reader.ReadHistory();
LogBox.Text = string.Join("\n", _reader.TailLog("service.log", 200));
}
public async void TriggerCommand(string command)
{
SetButtons(false);
try
{
var result = await _runner.RunAsync(command);
LogBox.Text = result.Output + "\n" + LogBox.Text;
Refresh();
}
catch (Exception ex)
{
LogBox.Text = $"[ERROR] {ex.Message}\n" + LogBox.Text;
}
finally { SetButtons(true); }
}
private void SetButtons(bool enabled)
{
BtnIngest.IsEnabled = enabled;
BtnProcess.IsEnabled = enabled;
BtnBoth.IsEnabled = enabled;
}
private void BtnIngest_Click(object sender, RoutedEventArgs e) => TriggerCommand("ingest");
private void BtnProcess_Click(object sender, RoutedEventArgs e) => TriggerCommand("process");
private void BtnBoth_Click(object sender, RoutedEventArgs e) => TriggerCommand("both");
private void BtnRefresh_Click(object sender, RoutedEventArgs e) => Refresh();
}