90 lines
1.9 KiB
Go
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
|
|
}
|