diff options
Diffstat (limited to 'compiler/src/Resource.hs')
-rw-r--r-- | compiler/src/Resource.hs | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/compiler/src/Resource.hs b/compiler/src/Resource.hs index 2019418..261191b 100644 --- a/compiler/src/Resource.hs +++ b/compiler/src/Resource.hs | |||
@@ -27,7 +27,7 @@ import Control.Concurrent.ParallelIO.Global (parallel) | |||
27 | import Data.List ((\\), sortBy) | 27 | import Data.List ((\\), sortBy) |
28 | import Data.Ord (comparing) | 28 | import Data.Ord (comparing) |
29 | import Data.Char (toLower) | 29 | import Data.Char (toLower) |
30 | import Data.Maybe (mapMaybe, fromMaybe, maybeToList) | 30 | import Data.Maybe (mapMaybe, fromMaybe) |
31 | import Data.Function ((&)) | 31 | import Data.Function ((&)) |
32 | import qualified Data.Set as Set | 32 | import qualified Data.Set as Set |
33 | 33 | ||
@@ -94,15 +94,12 @@ type ThumbnailProcessor = Path -> IO (Maybe Path) | |||
94 | 94 | ||
95 | buildGalleryTree :: | 95 | buildGalleryTree :: |
96 | ItemProcessor -> ThumbnailProcessor | 96 | ItemProcessor -> ThumbnailProcessor |
97 | -> Bool -> String -> InputTree -> IO GalleryItem | 97 | -> Int -> String -> InputTree -> IO GalleryItem |
98 | buildGalleryTree processItem processThumbnail addDirTag galleryName inputTree = | 98 | buildGalleryTree processItem processThumbnail tagsFromDirectories galleryName inputTree = |
99 | mkGalleryItem (Path []) inputTree >>= return . named galleryName | 99 | mkGalleryItem (Just galleryName) (Path []) inputTree |
100 | where | 100 | where |
101 | named :: String -> GalleryItem -> GalleryItem | 101 | mkGalleryItem :: Maybe String -> Path -> InputTree -> IO GalleryItem |
102 | named name item = item { title = name } | 102 | mkGalleryItem _ parents InputFile{path, sidecar} = |
103 | |||
104 | mkGalleryItem :: Path -> InputTree -> IO GalleryItem | ||
105 | mkGalleryItem parents InputFile{path, sidecar} = | ||
106 | do | 103 | do |
107 | properties <- processItem path | 104 | properties <- processItem path |
108 | processedThumbnail <- processThumbnail path | 105 | processedThumbnail <- processThumbnail path |
@@ -110,7 +107,7 @@ buildGalleryTree processItem processThumbnail addDirTag galleryName inputTree = | |||
110 | { title = itemTitle | 107 | { title = itemTitle |
111 | , date = optMeta date "" -- TODO: check and normalise dates | 108 | , date = optMeta date "" -- TODO: check and normalise dates |
112 | , description = optMeta description "" | 109 | , description = optMeta description "" |
113 | , tags = (optMeta tags []) ++ implicitParentTag parents | 110 | , tags = (optMeta tags []) ++ implicitParentTags parents |
114 | , path = parents </ itemTitle | 111 | , path = parents </ itemTitle |
115 | , thumbnail = processedThumbnail | 112 | , thumbnail = processedThumbnail |
116 | , properties = properties } -- TODO | 113 | , properties = properties } -- TODO |
@@ -121,23 +118,23 @@ buildGalleryTree processItem processThumbnail addDirTag galleryName inputTree = | |||
121 | optMeta :: (Sidecar -> Maybe a) -> a -> a | 118 | optMeta :: (Sidecar -> Maybe a) -> a -> a |
122 | optMeta get fallback = fromMaybe fallback $ get sidecar | 119 | optMeta get fallback = fromMaybe fallback $ get sidecar |
123 | 120 | ||
124 | mkGalleryItem parents InputDir{path, dirThumbnailPath, items} = | 121 | mkGalleryItem rootTitle parents InputDir{path, dirThumbnailPath, items} = |
125 | do | 122 | do |
126 | processedThumbnail <- maybeThumbnail dirThumbnailPath | 123 | processedThumbnail <- maybeThumbnail dirThumbnailPath |
127 | processedItems <- parallel $ map (mkGalleryItem itemPath) items | 124 | processedItems <- parallel $ map (mkGalleryItem Nothing itemPath) items |
128 | return GalleryItem | 125 | return GalleryItem |
129 | { title = itemTitle | 126 | { title = itemTitle |
130 | -- TODO: consider using the most recent item's date? what if empty? | 127 | -- TODO: consider using the most recent item's date? what if empty? |
131 | , date = "" | 128 | , date = "" |
132 | -- TODO: consider allowing metadata sidecars for directories too | 129 | -- TODO: consider allowing metadata sidecars for directories too |
133 | , description = "" | 130 | , description = "" |
134 | , tags = (aggregateChildTags processedItems) ++ implicitParentTag parents | 131 | , tags = (aggregateChildTags processedItems) ++ implicitParentTags parents |
135 | , path = itemPath | 132 | , path = itemPath |
136 | , thumbnail = processedThumbnail | 133 | , thumbnail = processedThumbnail |
137 | , properties = Directory processedItems } | 134 | , properties = Directory processedItems } |
138 | where | 135 | where |
139 | itemTitle :: String | 136 | itemTitle :: String |
140 | itemTitle = fromMaybe "" $ fileName path | 137 | itemTitle = flip fromMaybe rootTitle (fromMaybe "" $ fileName path) |
141 | 138 | ||
142 | itemPath :: Path | 139 | itemPath :: Path |
143 | itemPath = parents </ itemTitle | 140 | itemPath = parents </ itemTitle |
@@ -152,10 +149,8 @@ buildGalleryTree processItem processThumbnail addDirTag galleryName inputTree = | |||
152 | unique :: Ord a => [a] -> [a] | 149 | unique :: Ord a => [a] -> [a] |
153 | unique = Set.toList . Set.fromList | 150 | unique = Set.toList . Set.fromList |
154 | 151 | ||
155 | implicitParentTag :: Path -> [Tag] | 152 | implicitParentTags :: Path -> [Tag] |
156 | implicitParentTag parents | 153 | implicitParentTags (Path elements) = take tagsFromDirectories elements |
157 | | addDirTag = maybeToList $ fileName parents | ||
158 | | otherwise = [] | ||
159 | 154 | ||
160 | 155 | ||
161 | flattenGalleryTree :: GalleryItem -> [GalleryItem] | 156 | flattenGalleryTree :: GalleryItem -> [GalleryItem] |