aboutsummaryrefslogtreecommitdiff
path: root/pkg/worker/file_scanner.go
diff options
context:
space:
mode:
authorGabriel Arakaki Giovanini <mail@gabrielgio.me>2023-07-04 19:01:17 +0200
committerGabriel Arakaki Giovanini <mail@gabrielgio.me>2023-07-04 19:01:17 +0200
commit05a8dbf46792adfef007a0ffbcb654026db036fa (patch)
tree386658904377c695747c3ffe4a288915b0a89917 /pkg/worker/file_scanner.go
parent311ab744fe1bf278b18c25892497271988399e9a (diff)
downloadlens-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.go83
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,
- })
-}