-- notmuch-haskell: notmuch MUA Haskell binding
-- test / demo program
-- Copyright © 2010 Bart Massey
-- Licensed LGPL v3: please see the file COPYING in this
-- source distribution for licensing information.
-- This program has two modes. When invoked with no
-- arguments, it creates a new notmuch database in /tmp.
-- When given a database argument, it does a search for
-- "subject:notmuch" in the notmuch database. It will
-- upgrade the database if necessary.
import Control.Monad
import Data.Time
import IO
import System.Environment
import System.Locale
import Foreign.Notmuch
dateString :: FormatTime t => t -> String
dateString = formatTime defaultTimeLocale "%c"
main = do
argv <- getArgs
db <- if (length argv == 0)
then
(do
db <- databaseCreate "/tmp"
databaseClose db
databaseOpen "/tmp" DatabaseModeReadOnly)
else
databaseOpen (head argv) DatabaseModeReadOnly
dbPath <- databaseGetPath db
putStrLn $ "database is at " ++ dbPath
version <- databaseGetVersion db
putStrLn $ "version is " ++ show version
upgrade <- databaseNeedsUpgrade db
when upgrade $ do
let cb msg progress = putStrLn $ msg ++ show progress
putStrLn "Upgrading database"
databaseUpgrade db (Just cb)
query <- queryCreate db "subject:notmuch"
nquery <- queryCountMessages query
putStrLn $ "subject:notmuch returns " ++ show nquery ++ " results..."
threads <- queryThreads query
nthreadss <- mapM threadCountMessages threads
putStr $ show (sum nthreadss) ++ "/" ++ show (length threads) ++ ": "
print nthreadss
let thread = last threads
subject <- threadGetSubject thread
putStrLn subject
messages <- threadGetToplevelMessages thread
let message = head messages
subject' <- messageGetHeader message "Subject"
putStrLn subject'
date' <- messageGetHeader message "Date"
putStrLn date'
date <- messageGetDate message
putStrLn $ dateString date
localdate <- utcToLocalZonedTime date
putStrLn $ dateString localdate
databaseClose db
return ()