From d0962ef2dea7e8a0c25ca8fdbc55fcbafeeb2f79 Mon Sep 17 00:00:00 2001 From: pacien Date: Mon, 30 Dec 2019 23:18:49 +0100 Subject: compiler: refactor resource transformation pipeline --- compiler/src/Gallery.hs | 134 ------------------------------------------------ 1 file changed, 134 deletions(-) delete mode 100644 compiler/src/Gallery.hs (limited to 'compiler/src/Gallery.hs') diff --git a/compiler/src/Gallery.hs b/compiler/src/Gallery.hs deleted file mode 100644 index a1b1674..0000000 --- a/compiler/src/Gallery.hs +++ /dev/null @@ -1,134 +0,0 @@ --- ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019 Pacien TRAN-GIRARD --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . - -{-# LANGUAGE - DuplicateRecordFields - , DeriveGeneric - , DeriveAnyClass -#-} - -module Gallery - ( GalleryItem(..), buildGallery - ) where - - -import GHC.Generics (Generic) -import Data.Char (toLower) -import Data.Function ((&)) -import Data.Maybe (fromMaybe) - -import Data.Aeson (ToJSON, genericToJSON, genericToEncoding) -import qualified Data.Aeson as JSON - -import qualified Data.Set as Set - -import Files -import Input -import Resource - - -encodingOptions :: JSON.Options -encodingOptions = JSON.defaultOptions - { JSON.fieldLabelModifier = map toLower - , JSON.constructorTagModifier = map toLower - , JSON.sumEncoding = JSON.defaultTaggedObject - { JSON.tagFieldName = "type" - , JSON.contentsFieldName = "contents" - } - } - - -type ResourcePath = String -type Tag = String -type FileSizeKB = Int - - -data Resolution = Resolution - { width :: Int - , height :: Int - } deriving (Generic, Show) - -instance ToJSON Resolution where - toJSON = genericToJSON encodingOptions - toEncoding = genericToEncoding encodingOptions - - -data GalleryItemProps = - Directory { items :: [GalleryItem] } --- | Image { resolution :: Resolution, filesize :: FileSizeKB } --- | Video { filesize :: FileSizeKB } - | Unknown - deriving (Generic, Show) - -instance ToJSON GalleryItemProps where - toJSON = genericToJSON encodingOptions - toEncoding = genericToEncoding encodingOptions - - --- TODO: fuse GalleryItem and GalleryItemProps -data GalleryItem = GalleryItem - { title :: String - , date :: String -- TODO: checked ISO8601 date - , description :: String - , tags :: [Tag] - , path :: Path - , thumbnail :: Maybe Path - , properties :: GalleryItemProps - } deriving (Generic, Show) - -instance ToJSON GalleryItem where - toJSON = genericToJSON encodingOptions - toEncoding = genericToEncoding encodingOptions - - -buildGalleryTree :: ResourceTree -> GalleryItem -buildGalleryTree (ItemResource sidecar path thumbnail) = - GalleryItem - { title = optMeta title $ fileName path - , date = optMeta date "" -- TODO: check and normalise dates - , description = optMeta description "" - , tags = optMeta tags [] - , path = path - , thumbnail = thumbnail - , properties = Unknown } -- TODO - where - optMeta :: (Sidecar -> Maybe a) -> a -> a - optMeta get fallback = fromMaybe fallback $ get sidecar - -buildGalleryTree (DirResource dirItems path thumbnail) = - map buildGalleryTree dirItems - & \items -> GalleryItem - { title = fileName path - -- TODO: consider using the most recent item's date? what if empty? - , date = "" - -- TODO: consider allowing metadata sidecars for directories too - , description = "" - , tags = aggregateChildTags items - , path = path - , thumbnail = thumbnail - , properties = Directory items } - where - aggregateChildTags :: [GalleryItem] -> [Tag] - aggregateChildTags = unique . concatMap (\item -> tags (item::GalleryItem)) - - unique :: Ord a => [a] -> [a] - unique = Set.toList . Set.fromList - -buildGallery :: String -> ResourceTree -> GalleryItem -buildGallery galleryName resourceTree = - (buildGalleryTree resourceTree) { title = galleryName } -- cgit v1.2.3