✨ 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 | ||||
| } | ||||
							
								
								
									
										38
									
								
								mkflex/models.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								mkflex/models.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| package mkflex | ||||
| 
 | ||||
| import "codeberg.org/danjones000/utils/types" | ||||
| 
 | ||||
| type Config struct { | ||||
| 	Templates map[string]Template `yaml:"templates"` | ||||
| 	Tasks     map[string]any      `yaml:"tasks"` | ||||
| } | ||||
| 
 | ||||
| type Template struct { | ||||
| 	Series   []SeriesGroups `yaml:"series,omitempty"` | ||||
| 	Aria2    map[string]any `yaml:"aria2,omitempty"` | ||||
| 	ConMag   map[string]any `yaml:"convert_magnet,omitempty"` | ||||
| 	Download string         `yaml:"download,omitempty"` | ||||
| 	Notify   map[string]any `yaml:"notify,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type SeriesGroups map[string]Series | ||||
| 
 | ||||
| type Identifier string | ||||
| 
 | ||||
| const ( | ||||
| 	Sequence Identifier = "sequence" | ||||
| 	Episode  Identifier = "ep" | ||||
| ) | ||||
| 
 | ||||
| type Series struct { | ||||
| 	Quality       string            `yaml:"quality,omitempty"` | ||||
| 	IdentifiedBy  Identifier        `yaml:"identified_by,omitempty"` | ||||
| 	Begin         types.IntOrString `yaml:"begin,omitempty"` | ||||
| 	Exact         bool              `yaml:"exact,omitempty"` | ||||
| 	AlternameName []string          `yaml:"alternate_name,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type Aria struct { | ||||
| 	Path   string `yaml:"path"` | ||||
| 	Server string `yaml:"server"` | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue