lens @ cff5600c8abebd1ce988b2185c07e998c4a1d483

fix: Wrap media scan into a go routine

For some unknown reason `ReadExif` hangs when the context is canceled
through signal handling. Perhaps perl-exif tooling is closing on
`SIGNINT`.
 1diff --git a/pkg/worker/exif_scanner.go b/pkg/worker/exif_scanner.go
 2index 6d40dbd7435830a06fee5974cda18f20e73f67c0..d7865e39737f316d2fe38599868cd8bb9cf5ea6f 100644
 3--- a/pkg/worker/exif_scanner.go
 4+++ b/pkg/worker/exif_scanner.go
 5@@ -33,8 +33,33 @@
 6 	return medias, nil
 7 }
 8 
 9+func wrapReadExif(ctx context.Context, path string) (*media.MediaEXIF, error) {
10+	c := make(chan *media.MediaEXIF)
11+	e := make(chan error)
12+	go func() {
13+		defer close(c)
14+		defer close(e)
15+
16+		newExif, err := fileop.ReadExif(path)
17+		if err != nil {
18+			e <- err
19+		} else {
20+			c <- newExif
21+		}
22+	}()
23+
24+	select {
25+	case <-ctx.Done():
26+		return nil, ctx.Err()
27+	case m := <-c:
28+		return m, nil
29+	case err := <-e:
30+		return nil, err
31+	}
32+}
33+
34 func (e *EXIFScanner) Process(ctx context.Context, m *media.Media) error {
35-	newExif, err := fileop.ReadExif(m.Path)
36+	newExif, err := wrapReadExif(ctx, m.Path)
37 	if err != nil {
38 		return err
39 	}