Files
ratatoskr-go/internal/ui/view.go
ki.sagidullin baf2ad7147 feat(ui): контроллер — подписчик шин и мост к Fyne-представлению
- View — интерфейс Fyne-слоя: колбэки на все доменные события + логи.
- Controller подписывается на доменную и логовую шины (через events.Hub)
  и диспатчит события в View; колбэки выполняются в горутинах Hub, поэтому
  реализация Fyne обязана обновлять виджеты через fyne.Do (спец 12.4).
- Close отписывает контроллер (сворачивание окна) без остановки Core.
- NilView — no-op для headless (--noui) и тестов.
- Юнит-тесты: доставка доменных/логовых событий, остановка после Close.
2026-08-20 08:15:42 +05:00

40 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package ui — контроллер и представления десктопного интерфейса (Fyne).
//
// Слой обмена с ядром: однонаправленный поток (спец 12.212.5).
// - Core мутирует состояние; UI только читает снимки и реагирует на события.
// - Действия UI = команды (CreateTask/ApproveTask/...), которые зовут Core.
// - Подписчик шины (Controller) получает события и перекладывает их в View
// (реализация Fyne) через fyne.Do — никаких прямых вызовов Fyne из core.
package ui
import (
"github.com/kamelion/ratatoskr-go/internal/events"
)
// View — интерфейс, который реализует Fyne-слой окна.
//
// Методы вызываются из горутины Controller (горутина Hub-подписчика), поэтому
// реализация обязана перекладывать работу на поток Fyne через fyne.Do /
// fyne.DoAndWait, либо использовать thread-safe структуры (binding).
type View interface {
OnTaskCreated(e events.TaskCreated)
OnTaskUpdated(e events.TaskUpdated)
OnTaskDeleted(e events.TaskDeleted)
OnTaskStatusChanged(e events.TaskStatusChanged)
OnHistoryAppended(e events.HistoryAppended)
OnTraceAppended(e events.TraceAppended)
OnAgentActivity(e events.AgentActivity)
OnLog(e events.LogLine)
}
// NilView — no-op реализация View для headless-режима и тестов.
type NilView struct{}
func (NilView) OnTaskCreated(events.TaskCreated) {}
func (NilView) OnTaskUpdated(events.TaskUpdated) {}
func (NilView) OnTaskDeleted(events.TaskDeleted) {}
func (NilView) OnTaskStatusChanged(events.TaskStatusChanged) {}
func (NilView) OnHistoryAppended(events.HistoryAppended) {}
func (NilView) OnTraceAppended(events.TraceAppended) {}
func (NilView) OnAgentActivity(events.AgentActivity) {}
func (NilView) OnLog(events.LogLine) {}