From 60c96a4b96ecfffe589c99adfdbdcc20f90c04ff Mon Sep 17 00:00:00 2001 From: Louis-Guillaume Gagnon Date: Wed, 21 Aug 2013 10:17:30 -0400 Subject: [PATCH] Add a check for file existence --- Add.hs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Add.hs b/Add.hs index 12ce191..762e432 100644 --- a/Add.hs +++ b/Add.hs @@ -7,6 +7,7 @@ import Data.Char import Data.List import Database.HDBC import Database.HDBC.Sqlite3 +import System.Directory import Util data Flag = Path String @@ -18,11 +19,16 @@ data Flag = Path String | Issue String | Date String | Pages String - deriving (Show) + deriving (Eq,Show) isFlag :: String -> Bool isFlag f = f `elem` ["-f","-p","-t","-j","-i","-d","-v","-a","-k"] +isPathFlag :: Flag -> Bool +isPathFlag f = case f of + Path _ -> True + _ -> False + add :: [String] -> IO () add [] = error $ "add: no arguments specified ('" ++ progName ++ " add help' for help)" add argv = if isHelp $ head argv @@ -30,7 +36,9 @@ add argv = if isHelp $ head argv else do case parseFlags argv of Left msg -> error $ "add: " ++ msg - Right flags -> do putStrLn (flagsToString flags) >> runSQL (buildSQL flags) + Right flags -> do checkFile flags + putStrLn (flagsToString flags) + runSQL (buildSQL flags) buildSQL :: [Flag] -> String buildSQL flags = buildSQL' ("INSERT INTO " ++ tableName ++ " (") "VALUES(" flags @@ -39,6 +47,14 @@ buildSQL flags = buildSQL' ("INSERT INTO " ++ tableName ++ " (") "VALUES(" flags where (key,val) = break (==' ') $ show f value = filter (/= '\"') (tail val) +checkFile :: [Flag] -> IO () +checkFile fs = case filter isPathFlag fs of + [] -> return () + ((Path p):_) -> do exists <- doesFileExist p + if exists + then do return () + else do error $ "File does not exists: " ++ p + isDate :: String -> Bool isDate str = and [and (map isDigit str), (size == 4) || (size == 6) || (size == 8)] where size = length str -- 2.11.4.GIT