✨ Add mkflex command
This commit is contained in:
parent
72295c53cf
commit
f4497aef7e
7 changed files with 333 additions and 1 deletions
142
mkflex/logic.go
Normal file
142
mkflex/logic.go
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
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
|
||||
}
|
||||
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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue