Files
DockerBot/view_containers.go
2026-04-13 21:42:04 +02:00

90 lines
1.9 KiB
Go

package main
import (
"context"
"fergalla.com/dockerbot/internal/docker"
"fergalla.com/dockerbot/internal/ui"
"github.com/go-telegram/bot/models"
)
func (appCtx *App) renderContainerPage(ctx context.Context, pageIndex int, forceRefresh bool) (string, *models.InlineKeyboardMarkup, error) {
var data []docker.ContainerBasicInfo
var err error
// 📦 obtener datos
if forceRefresh {
data, err = appCtx.containerCache.ForceRefresh()
} else {
data, err = appCtx.containerCache.Get()
}
if err != nil {
return "", nil, err
}
totalItems := len(data)
if totalItems == 0 {
return appCtx.T("e.container.list.not_found"), nil, nil
}
pageSize := appCtx.config.PageSize
totalPages := (totalItems + pageSize - 1) / pageSize
// 🛑 clamp
if pageIndex < 0 {
pageIndex = 0
}
if pageIndex >= totalPages {
pageIndex = totalPages - 1
}
// 🧩 construir view
page := ui.Page{
Items: data,
Page: pageIndex,
PageSize: pageSize,
TotalItems: totalItems,
}
// 🎨 render
text, keyboard := appCtx.renderer.RenderContainerList(page)
return text, keyboard, nil
}
func (appCtx *App) renderContainerDetail(ctx context.Context, container string, page int) (string, *models.InlineKeyboardMarkup, error) {
info, err := appCtx.dockerInfo.GetContainerInfo(container)
if err != nil {
return "", nil, err
}
view := ui.ContainerDetailView{
Container: info,
Page: page,
}
text, keyboard := appCtx.renderer.RenderContainerDetail(view)
return text, keyboard, nil
}
func (appCtx *App) renderContainerLogs(ctx context.Context, container string, page int, tail int) (string, *models.InlineKeyboardMarkup, error) {
logs, err := appCtx.dockerInfo.GetContainerLogs(container, tail)
if err != nil {
return "", nil, err
}
view := ui.ContainerLogsView{
Container: container,
Logs: logs,
Page: page,
Tail: tail,
}
text, keyboard := appCtx.renderer.RenderContainerLogs(view)
return text, keyboard, nil
}