aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/src/Processors.hs28
-rw-r--r--compiler/src/Resource.hs4
-rw-r--r--viewer/src/@types/gallery.d.ts10
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
141getPictureProps :: ItemDescriber
142getPictureProps fsPath resource =
143 getImageResolution fsPath
144 >>= return . Picture resource
145
146
147type ItemDescriber =
148 FilePath
149 -> Resource
150 -> IO GalleryItemProps
151
141 152
142type ItemFileProcessor = 153type ItemFileProcessor =
143 FileName -- ^ Input base path 154 FileName -- ^ Input base path
@@ -147,19 +158,20 @@ type ItemFileProcessor =
147 158
148itemFileProcessor :: Maybe Resolution -> Cache -> ItemFileProcessor 159itemFileProcessor :: Maybe Resolution -> Cache -> ItemFileProcessor
149itemFileProcessor maxResolution cached inputBase outputBase resClass inputRes = 160itemFileProcessor 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
165type ThumbnailFileProcessor = 177type 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
73data GalleryItemProps = 73data 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";