diff --git a/internal/entity/camera.go b/internal/entity/camera.go index 1091da1ac..b9bcf2ee1 100644 --- a/internal/entity/camera.go +++ b/internal/entity/camera.go @@ -140,6 +140,15 @@ func (m *Camera) String() string { return clean.Log(m.CameraName) } +// Scanner checks whether the model appears to be a scanner. +func (m *Camera) Scanner() bool { + if m.CameraSlug == "" { + return false + } + + return strings.Contains(m.CameraSlug, "scan") +} + // Unknown returns true if the camera is not a known make or model. func (m *Camera) Unknown() bool { return m.CameraSlug == "" || m.CameraSlug == UnknownCamera.CameraSlug diff --git a/internal/entity/camera_test.go b/internal/entity/camera_test.go index b61a260d9..cbb002a37 100644 --- a/internal/entity/camera_test.go +++ b/internal/entity/camera_test.go @@ -137,3 +137,22 @@ func TestCamera_String(t *testing.T) { assert.Equal(t, "Unknown", cameraString) }) } + +func TestCamera_Scanner(t *testing.T) { + t.Run("model XXX make Nikon", func(t *testing.T) { + camera := NewCamera("XXX", "Nikon") + assert.False(t, camera.Scanner()) + }) + t.Run("MS Scanner", func(t *testing.T) { + camera := NewCamera("MS Scanner", "") + assert.True(t, camera.Scanner()) + }) + t.Run("model Unknown make XXX", func(t *testing.T) { + camera := NewCamera("", "test") + assert.False(t, camera.Scanner()) + }) + t.Run("model Unknown make Unknown", func(t *testing.T) { + camera := NewCamera("", "") + assert.False(t, camera.Scanner()) + }) +} diff --git a/internal/entity/photo.go b/internal/entity/photo.go index 6654f92b0..4ae931fb2 100644 --- a/internal/entity/photo.go +++ b/internal/entity/photo.go @@ -654,6 +654,10 @@ func (m *Photo) SetCamera(camera *Camera, source string) { m.CameraID = camera.ID m.Camera = camera m.CameraSrc = source + + if !m.PhotoScan && m.Camera.Scanner() { + m.PhotoScan = true + } } // SetLens updates the lens.