utils/mkflex/logic.go

146 lines
3 KiB
Go
Raw Permalink Normal View History

2025-07-16 11:40:25 -05:00
package mkflex
import (
"cmp"
"errors"
"fmt"
"os"
conutils "codeberg.org/danjones000/utils/convids"
"gopkg.in/yaml.v3"
)
var ErrMissingAliases = errors.New("missing aliases")
var ErrMissingShowGrp = errors.New("missing show group")
func NewConfig(path string) (*Config, error) {
//nolint:gosec // I don't care if this is user input
f, err := os.Open(path)
if err != nil {
return nil, err
}
ydec := yaml.NewDecoder(f)
var conf Config
err = ydec.Decode(&conf)
if err != nil {
return nil, err
}
return &conf, nil
}
func AddShows(conf *Config, data *conutils.Data) error {
aliases, ok := conf.Templates["x-aliases"]
reg, anime, err := getAliases(aliases, ok)
if err != nil {
return nil
}
nonEng := (*data.Shows)["non-eng"]
aniShow := (*data.Shows)["anime"]
dor, err := getDorama(nonEng, reg)
if err != nil {
return nil
}
conf.Templates["dorama"] = Template{Series: dor}
aniSer, err := getAnime(aniShow, anime)
if err != nil {
return nil
}
conf.Templates["anime"] = Template{Series: aniSer}
all, err := getAll(data, reg)
if err != nil {
return nil
}
conf.Templates["shows"] = Template{Series: all}
return nil
}
func getAliases(aliases Template, ok bool) (reg, anime *Series, err error) {
if !ok {
err = ErrMissingAliases
return
}
for _, alias := range aliases.Series {
if rF, ok := alias["x-regular"]; ok {
reg = &rF
}
if rA, ok := alias["x-anime"]; ok {
anime = &rA
}
}
if reg == nil {
err = errors.Join(err, fmt.Errorf("%w: %s", ErrMissingAliases, "x-regular"))
}
if anime == nil {
err = errors.Join(err, fmt.Errorf("%w: %s", ErrMissingAliases, "x-anime"))
}
return
}
func getShow(show conutils.Show, sh Series) SeriesGroups {
if !show.Flexget.Begin.IsZero() {
sh.Begin = show.Flexget.Begin
}
2025-09-03 11:24:23 -05:00
if show.Flexget.Quality != "" {
sh.Quality = show.Flexget.Quality
}
2025-07-16 11:40:25 -05:00
sh.AlternameName = show.Flexget.AlternateName
sh.Exact = show.Flexget.Exact
name := cmp.Or(show.Flexget.Name, show.Name, show.Pattern)
return SeriesGroups{name: sh}
}
func getDorama(nonEng *conutils.Shows, tmp *Series) ([]SeriesGroups, error) {
if len(*nonEng) == 0 {
return nil, fmt.Errorf("%w: %s", ErrMissingShowGrp, "non-eng")
}
grp := make([]SeriesGroups, 0, len(*nonEng))
for _, show := range *nonEng {
if !show.Flexget.Skip {
grp = append(grp, getShow(*show, *tmp))
}
}
return grp, nil
}
func getAnime(anime *conutils.Shows, tmp *Series) ([]SeriesGroups, error) {
grp := make([]SeriesGroups, 0, len(*anime))
for _, show := range *anime {
if !show.Flexget.Skip {
grp = append(grp, getShow(*show, *tmp))
}
}
return grp, nil
}
func getAll(data *conutils.Data, tmp *Series) ([]SeriesGroups, error) {
grp := make([]SeriesGroups, 0, 100)
for _, group := range data.Config.Groups {
shGrp, ok := (*data.Shows)[group]
if group == "old" || shGrp == nil || !ok {
continue
}
for _, show := range *shGrp {
if !show.Flexget.Skip && !show.Anime {
grp = append(grp, getShow(*show, *tmp))
}
}
}
return grp, nil
}