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