diff options
author | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-07-04 19:01:17 +0200 |
---|---|---|
committer | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-07-04 19:01:17 +0200 |
commit | 05a8dbf46792adfef007a0ffbcb654026db036fa (patch) | |
tree | 386658904377c695747c3ffe4a288915b0a89917 /pkg/worker/file_scanner.go | |
parent | 311ab744fe1bf278b18c25892497271988399e9a (diff) | |
download | lens-05a8dbf46792adfef007a0ffbcb654026db036fa.tar.gz lens-05a8dbf46792adfef007a0ffbcb654026db036fa.tar.bz2 lens-05a8dbf46792adfef007a0ffbcb654026db036fa.zip |
feat: Add use based file scanner
Diffstat (limited to 'pkg/worker/file_scanner.go')
-rw-r--r-- | pkg/worker/file_scanner.go | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/pkg/worker/file_scanner.go b/pkg/worker/file_scanner.go deleted file mode 100644 index b4f907a..0000000 --- a/pkg/worker/file_scanner.go +++ /dev/null @@ -1,83 +0,0 @@ -package worker - -import ( - "context" - "io/fs" - "mime" - "path/filepath" - - "git.sr.ht/~gabrielgio/img/pkg/database/repository" - "git.sr.ht/~gabrielgio/img/pkg/fileop" -) - -type ( - FileScanner struct { - root string - repository repository.MediaRepository - } -) - -var _ ChanProcessor[string] = &FileScanner{} - -func NewFileScanner(root string, repository repository.MediaRepository) *FileScanner { - return &FileScanner{ - root: root, - repository: repository, - } -} - -func (f *FileScanner) Query(ctx context.Context) (<-chan string, error) { - c := make(chan string) - go func() { - defer close(c) - _ = filepath.Walk(f.root, func(path string, info fs.FileInfo, err error) error { - select { - case <-ctx.Done(): - return filepath.SkipAll - default: - } - - if info == nil { - return nil - } - - if info.IsDir() && filepath.Base(info.Name())[0] == '.' { - return filepath.SkipDir - } - - if info.IsDir() { - return nil - } - - c <- path - return nil - }) - }() - return c, nil -} - -func (f *FileScanner) Process(ctx context.Context, path string) error { - mimetype := mime.TypeByExtension(filepath.Ext(path)) - supported := fileop.IsMimeTypeSupported(mimetype) - if !supported { - return nil - } - - hash := fileop.GetHashFromPath(path) - - exists, err := f.repository.Exists(ctx, hash) - if err != nil { - return err - } - - if exists { - return nil - } - - return f.repository.Create(ctx, &repository.CreateMedia{ - Name: filepath.Base(path), - Path: path, - PathHash: hash, - MIMEType: mimetype, - }) -} |