- View — интерфейс Fyne-слоя: колбэки на все доменные события + логи. - Controller подписывается на доменную и логовую шины (через events.Hub) и диспатчит события в View; колбэки выполняются в горутинах Hub, поэтому реализация Fyne обязана обновлять виджеты через fyne.Do (спец 12.4). - Close отписывает контроллер (сворачивание окна) без остановки Core. - NilView — no-op для headless (--noui) и тестов. - Юнит-тесты: доставка доменных/логовых событий, остановка после Close.
40 lines
2.1 KiB
Go
40 lines
2.1 KiB
Go
// Package ui — контроллер и представления десктопного интерфейса (Fyne).
|
||
//
|
||
// Слой обмена с ядром: однонаправленный поток (спец 12.2–12.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) {} |