1---------------------------------------------------------------- 2-- 3-- smew.hs 4-- 5 6module Main where 7 8import Data.List 9import Msg 10import Param 11import Search 12import System.Environment 13import Util 14 15-- ./smew '<20100105.154842.110627375.kazu@iij.ad.jp>' ~/Mail/id.db #imap/kazu@localhost#imap/work.mew-dist 16 17---------------------------------------------------------------- 18 19helpMessage :: String 20helpMessage = "[-p|-c] id [db [dir]]" 21 22options :: [String] 23options = ["-p","-c"] 24 25---------------------------------------------------------------- 26 27parseOpts :: [String] -> Maybe (Search [Msg]) 28parseOpts opts 29 | opts == [] = Just searchFamily 30 | unknown = Nothing 31 | "-p" `elem` opts = Just searchMe -- to find a parent, specify pid 32 | "-c" `elem` opts = Just searchChild 33 | otherwise = Nothing 34 where 35 unknown = (opts `union` options) \\ options /= [] 36 37parseArgs :: [String] -> Maybe (ID,FilePath,FilePath) 38parseArgs [] = Nothing 39parseArgs [mid] = Just (mid, defaultDB, "") 40parseArgs [mid,db] = Just (mid, db, "") 41parseArgs [mid,db,dir] = Just (mid, db, dir) 42parseArgs _ = Nothing 43 44---------------------------------------------------------------- 45 46main :: IO () 47main = do 48 (args,opts) <- splitArgOpt <$> getArgs 49 let mtri = parseArgs args 50 mcmd = parseOpts opts 51 exec mcmd mtri 52 where 53 exec (Just cmd) (Just (mid,db,dir)) = do 54 db' <- normalizePath db 55 dir' <- normalizePath dir 56 withDB db' (cmd mid dir') >>= printResults 57 exec _ _ = help helpMessage 58 printResults = mapM_ (putStrLn . path) 59