files.go 752 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package movies
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. )
  8. type FileSource struct {
  9. ID string
  10. Files []string
  11. }
  12. func (fs *FileSource) Scan(root string) error {
  13. var files []string
  14. if err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
  15. if err != nil {
  16. return err
  17. }
  18. if info.IsDir() {
  19. return nil
  20. }
  21. files = append(files, path)
  22. return nil
  23. }); err != nil {
  24. return fmt.Errorf("error while walking directory %q: %w", root, err)
  25. }
  26. fs.Files = files
  27. return nil
  28. }
  29. func (fs *FileSource) Search(query string) []string {
  30. var res []string
  31. for _, path := range fs.Files {
  32. if strings.Contains(strings.ToLower(path), strings.ToLower(query)) {
  33. res = append(res, path)
  34. }
  35. }
  36. return res
  37. }