M rhapsode.cabal => rhapsode.cabal +1 -1
@@ 60,7 60,7 @@ executable rhapsode
-- other-extensions:
-- Other library packages from which modules are imported.
- build-depends: base >=4.9 && <4.10,
+ build-depends: base >=4.9 && <4.10, directory,
http-client, http-client-tls, bytestring,
html-conduit, xml-conduit, text, containers,
network-uri,
M src/Main.hs => src/Main.hs +16 -1
@@ 24,6 24,7 @@ import qualified Data.List as L
import qualified Data.Map as M
import Data.Scientific (toRealFloat)
import Data.Maybe (fromJust)
+import System.Directory as Dir
import DefaultCSS
import StyleTree
@@ 49,7 50,7 @@ renderElLBS el = XML.renderLBS XML.def $ XML.Document {
retreiveStyles html manager base = do
style <- H2C.externalStylesForURL authorStyle testMedia html base loadURL
- return style
+ loadUserStyles style
where
emptyStyle :: Style.QueryableStyleSheet StyleTree
emptyStyle = Style.queryableStyleSheet
@@ 61,6 62,20 @@ retreiveStyles html manager base = do
response <- HTTP.httpLbs request manager
return $ Txt.pack $ C8.unpack $ HTTP.responseBody response
+loadUserStyles styles = do
+ dir <- Dir.getXdgDirectory Dir.XdgConfig "rhapsode"
+ exists <- Dir.doesDirectoryExist dir
+ loadDirectory dir exists
+ where
+ loadDirectory _ False = return styles
+ loadDirectory dir True = do
+ files <- Dir.listDirectory dir
+ loadFiles (H2C.cssPriorityUser styles) files
+ loadFiles style (file:files) = do
+ source <- readFile file
+ CSS.parse style (Txt.pack source) `loadFiles` files
+ loadFiles style [] = return style
+
testMedia attrs = media == Nothing || media == Just "speech"
where media = "media" `M.lookup` attrs