Files
agent-wiki-ui/Gui/MainWindow.axaml.cs
T
davideandClaude Sonnet 5.5 8b20f5224e Impostazioni: controllo e aggiornamento dei CLI con pulsante evidenziato
Sezione Aggiornamenti nel riquadro Impostazioni: per ogni CLI installato
versione, esito del controllo (disponibile, aggiornato, non riuscito) e
pulsante Aggiorna che esegue il comando ufficiale. Il pulsante e un puntino
sul pulsante Impostazioni si evidenziano solo se c'è una versione nuova. Il
controllo legge l'ultima versione dalle sorgenti ufficiali (downloads.claude.ai
e release GitHub di Codex), parte all'avvio e all'apertura del riquadro con
cache di 5 minuti e non fallisce mai in modo invasivo. L'aggiornamento ha
tempo massimo di 10 minuti, blocca invio e cambio CLI, e in caso di errore
suggerisce il comando manuale per npm, Homebrew, WinGet o installazione nativa.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 11:49:22 +02:00

52 lines
2.0 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Input.Platform;
using Avalonia.Interactivity;
using Avalonia.Threading;
using AgentWikiUi.Core;
namespace AgentWikiUi.Gui;
partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var vm = new MainViewModel();
DataContext = vm;
// proporzioni 16:10 orizzontali: 75% della larghezza utile (max 1440), altezza max 90%
var screen = Screens.Primary;
if (screen is not null)
{
var area = screen.WorkingArea;
double w = Math.Min(1440, area.Width / screen.Scaling * 3 / 4);
var h = Math.Min(w * 10 / 16, area.Height / screen.Scaling * 9 / 10);
Width = h * 16 / 10; Height = h;
}
else { Width = 1280; Height = 800; }
WindowStartupLocation = WindowStartupLocation.CenterScreen;
vm.CopyText = async text => { if (Clipboard is { } cb) await cb.SetTextAsync(text); };
vm.ConfirmDelete = () => ConfirmDialog.Ask(this, "Eliminare questa chat?");
vm.FocusInput += () => Dispatcher.UIThread.Post(() => InputBox.Focus());
vm.Messages.CollectionChanged += (_, _) => Dispatcher.UIThread.Post(() => Scroll.ScrollToEnd(), DispatcherPriority.Background);
// Invio invia, Maiusc+Invio va a capo (tunnel: prima che il TextBox inserisca l'a capo)
InputBox.AddHandler(KeyDownEvent, (_, e) =>
{
if (e.Key == Key.Enter && !e.KeyModifiers.HasFlag(KeyModifiers.Shift))
{
e.Handled = true;
if (vm.SendCommand.CanExecute(null)) vm.SendCommand.Execute(null);
}
}, RoutingStrategies.Tunnel);
Opened += (_, _) => InputBox.Focus();
}
// All'apertura del riquadro si ricontrolla se ci sono aggiornamenti (al massimo ogni 5 minuti).
void OnSettingsOpening(object? sender, EventArgs e) => _ = (DataContext as MainViewModel)?.CheckUpdatesAsync();
}