module Parse where import Types import Config import Storage import Data.Classify.Rank import Data.Classify.Parser import Data.Classify.Printer import Data.Classify.DataTypes import Control.Monad import qualified Data.Map as M import Data.Map (Map) parse :: Config -> String -> [String] -> IO [String] parse cfg format eps = do series <- listAllSeries forM eps $ \ep -> case getElement (M.fromList [ (trunc name, name) | name <- series ]) ep of Nothing -> return ep Just elt -> do titles <- getTitles cfg (name elt) case lookup (versionToIndex (version elt)) titles of Nothing -> return $ ppElement format elt Just txt -> return $ ppElement format elt{title = txt} versionToIndex (Version season episode) = EpIdx season episode versionToIndex (DateVersion y m d) = DateIdx y m d getElement :: Map String String -> String -> Maybe Element getElement set str = let elts = run (parseElement set) str in if null elts then Nothing else Just (selectBest elts)