add twitter [etc] card previews
This commit is contained in:
parent
8865b951fa
commit
5ad4e3dc30
9 changed files with 115 additions and 57 deletions
|
@ -5,6 +5,7 @@ module Info
|
|||
GalleryInfo (..), GalleryFilters (..), ArtistFilter (..), NsfwFilter (..),
|
||||
IndexInfo (..),
|
||||
readArtistFilter, matchArtist, readNsfwFilter, matchNsfw, matchFilters,
|
||||
NoThumb (..), getThumb, thumbFile, pageFile,
|
||||
-- ** Reexports
|
||||
Day (..), Text)
|
||||
where
|
||||
|
@ -13,6 +14,7 @@ import Records
|
|||
|
||||
import Control.Applicative
|
||||
import Control.Monad
|
||||
import Control.Exception
|
||||
import Data.Foldable (find)
|
||||
import Data.Hashable (Hashable)
|
||||
import Data.HashSet (HashSet)
|
||||
|
@ -26,7 +28,7 @@ import qualified Data.Text as Text
|
|||
import Data.Time.Calendar (Day (..), toGregorian)
|
||||
import Data.YAML (FromYAML (..), (.:), (.:?), (.!=))
|
||||
import qualified Data.YAML as YAML
|
||||
import System.FilePath (takeBaseName)
|
||||
import System.FilePath ((</>), takeBaseName, takeExtension, splitExtension)
|
||||
import Text.Read (readMaybe)
|
||||
|
||||
|
||||
|
@ -117,6 +119,28 @@ instance Ord Info where
|
|||
compare = comparing \Info {date, title} -> (date, title)
|
||||
|
||||
|
||||
newtype NoThumb = NoThumb FilePath
|
||||
deriving stock Eq deriving anyclass Exception
|
||||
instance Show NoThumb where show (NoThumb dir) = "no thumbnail for " ++ dir
|
||||
|
||||
getThumb :: FilePath -> Info -> FilePath
|
||||
getThumb dir =
|
||||
maybe (throw $ NoThumb dir) (\t -> dir </> thumbFile t) . #thumb
|
||||
|
||||
thumbFile :: FilePath -> FilePath
|
||||
thumbFile = addSuffix "_small"
|
||||
|
||||
pageFile :: FilePath -> FilePath
|
||||
pageFile f
|
||||
| takeExtension f == ".gif" = f
|
||||
| otherwise = addSuffix "_med" f
|
||||
|
||||
addSuffix :: String -> FilePath -> FilePath
|
||||
addSuffix suf path =
|
||||
let (pre, ext) = splitExtension path in
|
||||
pre ++ suf ++ ext
|
||||
|
||||
|
||||
instance FromYAML Info where
|
||||
parseYAML = YAML.withMap "info" \m ->
|
||||
Info <$> m .: "date"
|
||||
|
@ -259,6 +283,7 @@ instance FromYAML ArtistFilter where
|
|||
data IndexInfo =
|
||||
IndexInfo {
|
||||
title :: !Text,
|
||||
desc :: !Text,
|
||||
galleries :: ![GalleryInfo],
|
||||
links :: ![Link],
|
||||
footer :: !(Maybe Text)
|
||||
|
@ -268,6 +293,7 @@ data IndexInfo =
|
|||
instance FromYAML IndexInfo where
|
||||
parseYAML = YAML.withMap "index info" \m ->
|
||||
IndexInfo <$> m .: "title"
|
||||
<*> m .: "desc"
|
||||
<*> m .:? "galleries" .!= []
|
||||
<*> m .:? "links" .!= []
|
||||
<*> m .:? "footer"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue