@@ -142,26 +142,20 @@ page = do
142--------------------------------------------------------------------------------
142--------------------------------------------------------------------------------
143-- | Load directory-wise metadata
143-- | Load directory-wise metadata
144loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String)
144loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String)
145−loadGlobalMetadata p fp = do
145+loadGlobalMetadata p fp = liftM M.fromList $ loadgm $ takeDirectory fp where
146− let dir = takeDirectory fp
147− liftM M.fromList $ loadgm dir
149− loadgm :: FilePath -> IO [(String, String)]
146+ loadgm :: FilePath -> IO [(String, String)]
150− loadgm dir | dir == providerDirectory p = return []
147+ loadgm dir | dir == "." = return []
151− | otherwise = do
148+ | otherwise = do
152− let mfp = combine dir "metadata"
149+ let mfp = fromFilePath $ combine dir "metadata"
153− md <- if M.member (fromFilePath mfp) (providerFiles p)
154− then loadOne mfp dir
150+ md <- if resourceExists p mfp then loadOne mfp dir else return []
156− others <- loadgm (takeDirectory dir)
151+ others <- loadgm (takeDirectory dir)
157− return $ others ++ md
152+ return $ others ++ md
158− loadOne mfp dir = do
153+ loadOne mfp dir =
159− contents <- IO.readFile $ resourceFilePath p $ fromFilePath mfp
154+ let path = resourceFilePath p mfp
160− return $ case P.parse namedMetadata mfp contents of
155+ -- TODO: It might be better to print warning and continue
161− Left err -> error (show err)
156+ in either (error.show) (findMetadata dir) . P.parse namedMetadata path <$> readFile path
162− Right mds -> findMetadata mds dir
163− findMetadata mds dir =
157+ findMetadata dir =
164− concatMap snd $ filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst) mds
158+ concatMap snd . filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst)
166namedMetadata :: Parser [(String, [(String, String)])]
160namedMetadata :: Parser [(String, [(String, String)])]
167namedMetadata = P.many namedMetadataBlock
161namedMetadata = P.many namedMetadataBlock