63 lines
1.8 KiB
C#
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();
|
|
}
|