Handles UTF8 recipe files

This commit is contained in:
2026-05-19 23:28:37 -04:00
parent baa3c2434f
commit 166a2e7800
+6 -2
View File
@@ -9,8 +9,11 @@ module Roux.RecipeIndex (
) where ) where
import Data.Aeson (ToJSON (..), camelTo2, defaultOptions, fieldLabelModifier, genericToJSON) import Data.Aeson (ToJSON (..), camelTo2, defaultOptions, fieldLabelModifier, genericToJSON)
import qualified Data.ByteString as BS
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Encoding.Error as T
import GHC.Generics (Generic) import GHC.Generics (Generic)
import System.Directory (listDirectory) import System.Directory (listDirectory)
import System.FilePath (takeBaseName, takeExtension, (</>)) import System.FilePath (takeBaseName, takeExtension, (</>))
@@ -39,8 +42,9 @@ scanRecipes dir = do
-- | Load and parse a single recipe file. -- | Load and parse a single recipe file.
loadRecipe :: FilePath -> FilePath -> IO RecipeInfo loadRecipe :: FilePath -> FilePath -> IO RecipeInfo
loadRecipe dir filename = do loadRecipe dir filename = do
content <- readFile (dir </> filename) bs <- BS.readFile (dir </> filename)
let parsed = parseCookFile (T.pack content) let content = T.decodeUtf8With T.lenientDecode bs
parsed = parseCookFile content
title = case parsed of title = case parsed of
Right r -> extractTitle r filename Right r -> extractTitle r filename
Left _err -> T.pack (takeBaseName filename) Left _err -> T.pack (takeBaseName filename)