feat(ui): контроллер — подписчик шин и мост к Fyne-представлению
- View — интерфейс Fyne-слоя: колбэки на все доменные события + логи. - Controller подписывается на доменную и логовую шины (через events.Hub) и диспатчит события в View; колбэки выполняются в горутинах Hub, поэтому реализация Fyne обязана обновлять виджеты через fyne.Do (спец 12.4). - Close отписывает контроллер (сворачивание окна) без остановки Core. - NilView — no-op для headless (--noui) и тестов. - Юнит-тесты: доставка доменных/логовых событий, остановка после Close.
This commit is contained in:
40
internal/ui/view.go
Normal file
40
internal/ui/view.go
Normal file
@@ -0,0 +1,40 @@
|
||||
// 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) {}
|
||||
Reference in New Issue
Block a user