diff --git a/index.html b/index.html
index 6757ff5..4c8aced 100644
--- a/index.html
+++ b/index.html
@@ -4,6 +4,7 @@
+
Chandlr
diff --git a/src/Common b/src/Common
index 9e9d7ba..3f420d3 160000
--- a/src/Common
+++ b/src/Common
@@ -1 +1 @@
-Subproject commit 9e9d7babe6352b2fdf19d4ab43a557c71ca2e2ff
+Subproject commit 3f420d3131eb0477b522103a582732a5ba365f19
diff --git a/src/Component/CatalogGrid.hs b/src/Component/CatalogGrid.hs
index 05d5bb8..0bdac40 100644
--- a/src/Component/CatalogGrid.hs
+++ b/src/Component/CatalogGrid.hs
@@ -9,14 +9,15 @@ module Component.CatalogGrid
, update
) where
-import Data.List (intercalate)
import Data.Maybe (maybeToList)
-import Data.JSString (append)
+import Data.Text (pack, Text)
+import qualified Data.Text as T
+import Data.JSString (append, JSString)
import Miso
( View, div_ , class_ , img_ , href_ , a_
, src_ , title_ , strong_ , span_
- , p_ , br_ , id_ , Effect , noEff, width_
- , height_, text, rawHtml
+ , p_ , id_ , Effect , noEff
+ , text, rawHtml
)
import Miso.String (toMisoString, MisoString)
@@ -24,11 +25,15 @@ import Network.CatalogPostType (CatalogPost)
import qualified Network.CatalogPostType as CatalogPost
data Model = Model
- { displayItems :: [ CatalogPost ]
+ { display_items :: [ CatalogPost ]
+ , media_root :: MisoString
} deriving Eq
-initialModel :: Model
-initialModel = Model { displayItems = [] }
+initialModel :: JSString -> Model
+initialModel media_root = Model
+ { display_items = []
+ , media_root = toMisoString media_root
+ }
data Action = DisplayItems [ CatalogPost ]
@@ -42,7 +47,7 @@ update
-> Action
-> Model
-> Effect a Model
-update _ (DisplayItems xs) m = noEff (m { displayItems = xs })
+update _ (DisplayItems xs) m = noEff (m { display_items = xs })
-- update _ _ m = noEff m
view :: Interface a -> Model -> View a
@@ -53,12 +58,12 @@ view iface model =
[ class_ "threads" ]
[ div_
[ id_ "Grid" ]
- (map gridItem (displayItems model))
+ (map (gridItem model) (display_items model))
]
]
-gridItem :: CatalogPost -> View a
-gridItem post =
+gridItem :: Model -> CatalogPost -> View a
+gridItem m post =
div_
[ class_ "mix" ]
[ div_
@@ -67,7 +72,7 @@ gridItem post =
[ href_ thread_url ]
[ img_
[ class_ "thread-image"
- , src_ "/a/thumb/1111111111111.png"
+ , src_ thumb_url
, title_ ( toMisoString $ show $ CatalogPost.bump_time post )
]
]
@@ -96,9 +101,28 @@ gridItem post =
post_count_str :: MisoString
post_count_str = "R: " `append` (toMisoString $ CatalogPost.estimated_post_count post) `append` "+"
+ thumb_url :: MisoString
+ thumb_url =
+ case mthumb_path of
+ -- TODO: what about embeds!?
+ Nothing -> "/static/default_thumbnail.png"
+ Just thumb_path -> (media_root m) `append` (toMisoString thumb_path)
+
+ mthumb_path :: Maybe Text
+ mthumb_path = do
+ file_name <- CatalogPost.file_name post
+ thumb_ext <- CatalogPost.file_thumb_extension post
+
+ return $
+ "/" <> CatalogPost.site_name post
+ <> "/" <> CatalogPost.pathpart post
+ <> "/" <> (pack $ show $ CatalogPost.board_thread_id post)
+ <> "/thumbnail_" <> file_name
+ <> "." <> thumb_ext
+
thread_url :: MisoString
- thread_url = toMisoString $ intercalate "/"
+ thread_url = toMisoString $ T.intercalate "/"
[ CatalogPost.site_name post
, CatalogPost.pathpart post
- , show $ CatalogPost.board_thread_id post
+ , pack $ show $ CatalogPost.board_thread_id post
]
diff --git a/src/Component/ThreadView.hs b/src/Component/ThreadView.hs
new file mode 100644
index 0000000..ff8e52d
--- /dev/null
+++ b/src/Component/ThreadView.hs
@@ -0,0 +1,11 @@
+module Component.ThreadView
+( Model
+) where
+
+import Common.PostsType (Post)
+
+data Model = Model
+ { thread_id :: Integer
+ , thread_posts :: [ Post ]
+ , thread_loading :: Bool
+ } deriving Eq
diff --git a/src/Main.hs b/src/Main.hs
index a598e24..00c0a25 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -63,9 +63,10 @@ initialActionFromRoute model uri = either (const NoAction) id routing_result
initialModel
:: JSString
-> Int
+ -> JSString
-> Model
-initialModel pgroot client_fetch_count = Model
- { gridModel = Grid.initialModel
+initialModel pgroot client_fetch_count media_root = Model
+ { gridModel = Grid.initialModel media_root
, clientModel = Client.Model
{ Client.pgApiRoot = pgroot
, Client.fetchCount = client_fetch_count
@@ -99,7 +100,10 @@ main = do
pg_fetch_count <- getMetadata "postgrest-fetch-count" >>=
return . maybe 1000 (read . fromJSString)
- let initial_model = initialModel pg_api_root pg_fetch_count
+ media_root <- getMetadata "media-root" >>=
+ return . maybe "undefined" id
+
+ let initial_model = initialModel pg_api_root pg_fetch_count media_root
startApp App
{ model = initial_model
diff --git a/src/Network/CatalogPostType.hs b/src/Network/CatalogPostType.hs
index de90a58..a28b463 100644
--- a/src/Network/CatalogPostType.hs
+++ b/src/Network/CatalogPostType.hs
@@ -25,12 +25,13 @@ data CatalogPost = CatalogPost
, thread_id :: Int
-- , post_count :: Int
, estimated_post_count :: Int
- , site_name :: String
- , pathpart :: String
+ , site_name :: Text
+ , pathpart :: Text
-- , site_id :: Int
, file_mimetype :: Maybe Text
, file_illegal :: Maybe Bool
-- , file_resolution :: Maybe Dimension
- , file_sha256_hash :: Maybe Text
+ , file_name :: Maybe Text
, file_extension :: Maybe Text
+ , file_thumb_extension :: Maybe Text
} deriving (Show, Generic, FromJSON, ToJSON, Eq)