package httpapi import ( "git.vakhrushev.me/av/jellybit/internal/layout" "git.vakhrushev.me/av/jellybit/internal/recognize" ) // fileRow — строка виджета «файл источника → раскладка», общего для экранов // ревью и просмотра загрузки. Целевой путь берётся из превью (единая логика // internal/layout), а не вычисляется в шаблоне. type fileRow struct { Src string Dst string // целевой путь; пусто — файл не раскладывается RoleLabel string Linked bool Ignored bool } // buildFileRows сшивает файлы плана с целевыми путями из превью раскладки. func buildFileRows(plan recognize.Plan, preview []layout.Link) []fileRow { dstBySrc := make(map[string]string, len(preview)) for _, l := range preview { dstBySrc[l.Src] = l.Dst } rows := make([]fileRow, 0, len(plan.Files)) for _, f := range plan.Files { dst := dstBySrc[f.Src] rows = append(rows, fileRow{ Src: f.Src, Dst: dst, RoleLabel: roleLabel(string(f.Role)), Linked: dst != "", Ignored: f.Role == "ignore", }) } return rows } // roleLabel — человекочитаемая роль файла раскладки. func roleLabel(role string) string { switch role { case "episode": return "эпизод" case "main", "movie": return "фильм" case "subtitle": return "субтитры" case "extra": return "допматериал" case "sample": return "семпл" case "ignore": return "игнор" default: return role } }