Skip to content

Commit 26139de

Browse files
committed
Only open the cover image if needed
1 parent 11e9a6a commit 26139de

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

data/htagcli.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ enable = true
8686
enable = true
8787
filenames = ["cover.jpg", "cover.png", "cover.gif"]
8888
# optional size constraints in pixels, not taken into account if left
89-
# unspecified
89+
# unspecified.
90+
# Warning: this makes the check significantly slower
9091
min_size = { width = 300, height = 300 }
9192
max_size = { width = 1000, height = 1000 }
9293

lib/Check/Album.hs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,18 @@ check (HaveCover cover@Cover {..}) album
7373
maybeToExceptT (MissingCover dir) $
7474
MaybeT $
7575
Monad.findM Path.doesFileExist (toList absFiles)
76-
picture <-
77-
Except.withExceptT (UnableToReadCover coverFile . toText) $
78-
ExceptT $
79-
readImage coverFile
76+
-- Reading the image is very slow, so only do it if we have size
77+
-- constraints
78+
when (Cover.haveRange cover) $ do
79+
picture <-
80+
Except.withExceptT (UnableToReadCover coverFile . toText) $
81+
ExceptT $
82+
readImage coverFile
8083

81-
let size = Cover.pictureSize picture
82-
unless (Cover.withinRange cover size) $
83-
Except.throwE $
84-
BadCoverSize coverFile size
84+
let size = Cover.pictureSize picture
85+
unless (Cover.withinRange cover size) $
86+
Except.throwE $
87+
BadCoverSize coverFile size
8588
| otherwise = pure $ Left NotInSameDir
8689
where
8790
readImage = liftIO . Picture.readImage . Path.toFilePath

lib/Model/Cover.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module Model.Cover
33
Size (..),
44
sizeToText,
55
pictureSize,
6+
haveRange,
67
withinRange,
78
)
89
where
@@ -38,6 +39,9 @@ pictureSize picture =
3839
siHeight = Picture.dynamicMap Picture.imageHeight picture
3940
}
4041

42+
haveRange :: Cover -> Bool
43+
haveRange Cover {..} = isJust coMinSize || isJust coMaxSize
44+
4145
withinRange :: Cover -> Size -> Bool
4246
withinRange Cover {..} size =
4347
maybe True (size `greaterThan`) coMinSize

0 commit comments

Comments
 (0)