FemaInstaller/internal/ui/updater_window.go

82 lines
2.2 KiB
Go

package ui
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"gitea.unprism.ru/KRBL/FemaInstaller/pkg/config"
)
// UpdaterWindow represents the main window for the updater application
type UpdaterWindow struct {
Window fyne.Window
ConfigDisplay *widget.Label
UpdateButton *widget.Button
StatusLabel *widget.Label
}
// NewUpdaterWindow creates a new window for the updater application
func NewUpdaterWindow(app fyne.App, config *config.UpdaterConfig, updateHandler func() error) *UpdaterWindow {
window := app.NewWindow("Обновление ПО Фема")
// Create updater window
updaterWindow := &UpdaterWindow{
Window: window,
ConfigDisplay: widget.NewLabel(config.String()),
StatusLabel: widget.NewLabel(""),
}
// Create update button
updaterWindow.UpdateButton = widget.NewButton("Обновить ПО", func() {
updaterWindow.StatusLabel.SetText("Начало обновления...")
updaterWindow.UpdateButton.Disable()
go func() {
err := updateHandler()
if err != nil {
updaterWindow.StatusLabel.SetText("Ошибка обновления: " + err.Error())
} else {
updaterWindow.StatusLabel.SetText("Обновление успешно завершено!")
}
updaterWindow.UpdateButton.Enable()
}()
})
// Create title
title := widget.NewLabel("Программа обновления ПО Фема")
title.Alignment = fyne.TextAlignCenter
title.TextStyle = fyne.TextStyle{Bold: true}
// Create config section title
configTitle := widget.NewLabel("Текущая конфигурация:")
configTitle.TextStyle = fyne.TextStyle{Bold: true}
// Create layout
content := container.NewVBox(
title,
widget.NewSeparator(),
configTitle,
updaterWindow.ConfigDisplay,
widget.NewSeparator(),
updaterWindow.UpdateButton,
updaterWindow.StatusLabel,
)
// Set window content and size
window.SetContent(content)
window.Resize(fyne.NewSize(400, 300))
return updaterWindow
}
// Show displays the updater window
func (w *UpdaterWindow) Show() {
w.Window.Show()
}
// ShowAndRun displays the updater window and starts the application
func (w *UpdaterWindow) ShowAndRun() {
w.Window.ShowAndRun()
}