| 
									
										
										
										
											2023-08-29 07:15:01 -05:00
										 |  |  | package files | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"codeberg.org/danjones000/strip-beats/config" | 
					
						
							| 
									
										
										
										
											2023-08-29 10:58:58 -05:00
										 |  |  | 	"github.com/akrennmair/slice" | 
					
						
							|  |  |  | 	"io/fs" | 
					
						
							| 
									
										
										
										
											2023-08-29 07:15:01 -05:00
										 |  |  | 	"path/filepath" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-29 10:58:58 -05:00
										 |  |  | func isValidFile(file string) bool { | 
					
						
							|  |  |  | 	exts := config.GetConfig().SourceExtensions | 
					
						
							|  |  |  | 	return slice.ReduceWithInitialValue(exts, false, func(acc bool, ext string) bool { | 
					
						
							|  |  |  | 		return acc || filepath.Ext(file) == "."+ext | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func filterToValidFiles(ret []string) []string { | 
					
						
							|  |  |  | 	return slice.Filter(ret, isValidFile) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-29 07:15:01 -05:00
										 |  |  | func GetCandidates() []string { | 
					
						
							|  |  |  | 	source := config.GetConfig().Source | 
					
						
							| 
									
										
										
										
											2023-08-29 10:58:58 -05:00
										 |  |  | 	recurse := config.GetConfig().Recurse | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !recurse { | 
					
						
							|  |  |  | 		ret, _ := filepath.Glob(filepath.Join(source, "*")) | 
					
						
							|  |  |  | 		return filterToValidFiles(ret) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ret := []string{} | 
					
						
							|  |  |  | 	filepath.WalkDir(source, func(file string, info fs.DirEntry, err error) error { | 
					
						
							|  |  |  | 		if info.IsDir() && err != nil { | 
					
						
							|  |  |  | 			return fs.SkipDir | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if info.IsDir() { | 
					
						
							|  |  |  | 			return nil | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if isValidFile(file) { | 
					
						
							|  |  |  | 			ret = append(ret, file) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2023-08-29 07:15:01 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return ret | 
					
						
							|  |  |  | } |