diff options
-rw-r--r-- | compiler/src/Processors.hs | 28 | ||||
-rw-r--r-- | compiler/src/Resource.hs | 4 | ||||
-rw-r--r-- | viewer/src/@types/gallery.d.ts | 10 |
3 files changed, 29 insertions, 13 deletions
diff --git a/compiler/src/Processors.hs b/compiler/src/Processors.hs index b1b688a..02db325 100644 --- a/compiler/src/Processors.hs +++ b/compiler/src/Processors.hs | |||
@@ -138,6 +138,17 @@ getImageResolution fsPath = | |||
138 | (Just w, Just h) -> return $ Resolution w h | 138 | (Just w, Just h) -> return $ Resolution w h |
139 | _ -> throwIO $ ProcessingException fsPath "Unable to read image resolution." | 139 | _ -> throwIO $ ProcessingException fsPath "Unable to read image resolution." |
140 | 140 | ||
141 | getPictureProps :: ItemDescriber | ||
142 | getPictureProps fsPath resource = | ||
143 | getImageResolution fsPath | ||
144 | >>= return . Picture resource | ||
145 | |||
146 | |||
147 | type ItemDescriber = | ||
148 | FilePath | ||
149 | -> Resource | ||
150 | -> IO GalleryItemProps | ||
151 | |||
141 | 152 | ||
142 | type ItemFileProcessor = | 153 | type ItemFileProcessor = |
143 | FileName -- ^ Input base path | 154 | FileName -- ^ Input base path |
@@ -147,19 +158,20 @@ type ItemFileProcessor = | |||
147 | 158 | ||
148 | itemFileProcessor :: Maybe Resolution -> Cache -> ItemFileProcessor | 159 | itemFileProcessor :: Maybe Resolution -> Cache -> ItemFileProcessor |
149 | itemFileProcessor maxResolution cached inputBase outputBase resClass inputRes = | 160 | itemFileProcessor maxResolution cached inputBase outputBase resClass inputRes = |
150 | cached processor inPath outPath | 161 | cached processor inPath outPath |
151 | >> resourceAt outPath relOutPath | 162 | >> resourceAt outPath relOutPath |
152 | >>= return . props | 163 | >>= descriptor outPath |
153 | where | 164 | where |
154 | relOutPath = resClass /> inputRes | 165 | relOutPath = resClass /> inputRes |
155 | inPath = localPath $ inputBase /> inputRes | 166 | inPath = localPath $ inputBase /> inputRes |
156 | outPath = localPath $ outputBase /> relOutPath | 167 | outPath = localPath $ outputBase /> relOutPath |
157 | (processor, props) = processorFor maxResolution $ formatFromPath inputRes | 168 | (processor, descriptor) = processorFor (formatFromPath inputRes) maxResolution |
158 | 169 | ||
159 | processorFor :: Maybe Resolution -> Format -> (FileProcessor, Resource -> GalleryItemProps) | 170 | processorFor :: Format -> Maybe Resolution -> (FileProcessor, ItemDescriber) |
160 | processorFor (Just maxRes) PictureFormat = (resizePictureUpTo maxRes, Picture) | 171 | processorFor PictureFormat (Just maxRes) = (resizePictureUpTo maxRes, getPictureProps) |
161 | processorFor Nothing PictureFormat = (copyFileProcessor, Picture) | 172 | processorFor PictureFormat Nothing = (copyFileProcessor, getPictureProps) |
162 | processorFor _ Unknown = (copyFileProcessor, Other) -- TODO: handle video reencoding and others? | 173 | -- TODO: handle video reencoding and others? |
174 | processorFor Unknown _ = (copyFileProcessor, const $ return . Other) | ||
163 | 175 | ||
164 | 176 | ||
165 | type ThumbnailFileProcessor = | 177 | type ThumbnailFileProcessor = |
diff --git a/compiler/src/Resource.hs b/compiler/src/Resource.hs index b2a6bbf..e134468 100644 --- a/compiler/src/Resource.hs +++ b/compiler/src/Resource.hs | |||
@@ -72,7 +72,9 @@ instance ToJSON Resource where | |||
72 | 72 | ||
73 | data GalleryItemProps = | 73 | data GalleryItemProps = |
74 | Directory { items :: [GalleryItem] } | 74 | Directory { items :: [GalleryItem] } |
75 | | Picture { resource :: Resource } | 75 | | Picture |
76 | { resource :: Resource | ||
77 | , resolution :: Resolution } | ||
76 | | Other { resource :: Resource } | 78 | | Other { resource :: Resource } |
77 | deriving (Generic, Show) | 79 | deriving (Generic, Show) |
78 | 80 | ||
diff --git a/viewer/src/@types/gallery.d.ts b/viewer/src/@types/gallery.d.ts index de1c0dd..956ab6b 100644 --- a/viewer/src/@types/gallery.d.ts +++ b/viewer/src/@types/gallery.d.ts | |||
@@ -49,12 +49,17 @@ declare namespace Gallery { | |||
49 | thumbnail?: Thumbnail | 49 | thumbnail?: Thumbnail |
50 | properties: OtherProperties | PictureProperties | DirectoryProperties, | 50 | properties: OtherProperties | PictureProperties | DirectoryProperties, |
51 | } | 51 | } |
52 | interface Resolution { | ||
53 | width: number, | ||
54 | height: number, | ||
55 | } | ||
52 | interface OtherProperties { | 56 | interface OtherProperties { |
53 | type: "other", | 57 | type: "other", |
54 | } | 58 | } |
55 | interface PictureProperties { | 59 | interface PictureProperties { |
56 | type: "picture", | 60 | type: "picture", |
57 | resource: string, | 61 | resource: string, |
62 | resolution: Resolution | ||
58 | } | 63 | } |
59 | interface DirectoryProperties { | 64 | interface DirectoryProperties { |
60 | type: "directory", | 65 | type: "directory", |
@@ -62,10 +67,7 @@ declare namespace Gallery { | |||
62 | } | 67 | } |
63 | interface Thumbnail { | 68 | interface Thumbnail { |
64 | resource: string, | 69 | resource: string, |
65 | resolution: { | 70 | resolution: Resolution |
66 | width: number, | ||
67 | height: number, | ||
68 | } | ||
69 | } | 71 | } |
70 | type RawTag = string; | 72 | type RawTag = string; |
71 | type ItemType = "other" | "picture" | "directory"; | 73 | type ItemType = "other" | "picture" | "directory"; |