64 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package convids | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"os" | ||
|  | 	fp "path/filepath" | ||
|  | 	"regexp" | ||
|  | 	"strings" | ||
|  | 
 | ||
|  | 	"gopkg.in/yaml.v3" | ||
|  | ) | ||
|  | 
 | ||
|  | func NewData(path string) (*Data, error) { | ||
|  | 	f, err := os.Open(path) | ||
|  | 	if err != nil { | ||
|  | 		return nil, err | ||
|  | 	} | ||
|  | 	ydec := yaml.NewDecoder(f) | ||
|  | 	var data Data | ||
|  | 	err = ydec.Decode(&data) | ||
|  | 	return &data, err | ||
|  | } | ||
|  | 
 | ||
|  | func ensureExtRe(c *Config) (err error) { | ||
|  | 	if c.extRe != nil { | ||
|  | 		return nil | ||
|  | 	} | ||
|  | 	c.extRe, err = regexp.Compile("(" + strings.Join(c.Extensions, "|") + ")$") | ||
|  | 	return | ||
|  | } | ||
|  | 
 | ||
|  | func WalkFiles(d *Data, stopOnError, silent bool, cb func(s *Show, path string) error) (err error) { | ||
|  | 	err = ensureExtRe(d.Config) | ||
|  | 	if err != nil { | ||
|  | 		return | ||
|  | 	} | ||
|  | 	var files []os.DirEntry | ||
|  | 	files, err = os.ReadDir(d.Config.Source) | ||
|  | 	if err != nil { | ||
|  | 		return | ||
|  | 	} | ||
|  | 	for s := range d.AllShows(silent) { | ||
|  | 		var found bool | ||
|  | 		for _, file := range files { | ||
|  | 			if file.IsDir() { | ||
|  | 				continue | ||
|  | 			} | ||
|  | 			if !d.Config.extRe.MatchString(file.Name()) { | ||
|  | 				continue | ||
|  | 			} | ||
|  | 			found, err = s.Match(file.Name()) | ||
|  | 			if err != nil { | ||
|  | 				return | ||
|  | 			} | ||
|  | 			if found { | ||
|  | 				err = cb(s, fp.Join(d.Config.Source, file.Name())) | ||
|  | 				if err != nil && stopOnError { | ||
|  | 					return | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return nil | ||
|  | } |