aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaúl Benencia <rul@kalgan.cc>2013-09-01 21:10:33 -0300
committerRaúl Benencia <rul@kalgan.cc>2013-09-01 21:10:33 -0300
commit56b4aef769386e9fbe3b074698451e8b74489d61 (patch)
tree174d7176ae0de7308891a7c6ce4b45dbf8e87f54
parent917de9c6df342d032e2b05238c7ea923da2772db (diff)
Email mode working for almost all kind of test-emails
-rw-r--r--Email.hs20
-rw-r--r--Handlers.hs3
2 files changed, 20 insertions, 3 deletions
diff --git a/Email.hs b/Email.hs
index c1c524f..4d310c4 100644
--- a/Email.hs
+++ b/Email.hs
@@ -7,7 +7,7 @@
-}
module Email where
-import Codec.MIME.Type(MIMEValue(..), MIMEContent(..))
+import Codec.MIME.Type(MIMEValue(..), MIMEContent(..), showMIMEType, Type(..), MIMEType(..))
import Data.Char(toLower)
import Data.List(find)
@@ -15,7 +15,23 @@ getBody :: MIMEValue -> String
getBody msg =
case mime_val_content msg of
Single c -> c
- _ -> "Buggity Buggity Buggity!"
+ Multi mvs -> case firstTextPart mvs of
+ Just mv -> unwrapContent . mime_val_content $ mv
+ Nothing -> "Buggity Buggity Buggity!"
+ where
+ unwrapContent (Single c) = c
+
+-- hackish function for showing the email. In he future the logic of this
+-- function should be improved.
+firstTextPart [] = Nothing
+firstTextPart (mv:mvs) = case mime_val_content mv of
+ Single c -> if isText mv then Just mv else firstTextPart mvs
+ Multi mvs' -> firstTextPart mvs'
+
+ where
+ isText = \mv -> case (mimeType $ mime_val_type mv) of
+ Text text -> True
+ _ -> False
getHeaders :: MIMEValue -> [(String,String)]
getHeaders = mime_val_headers
diff --git a/Handlers.hs b/Handlers.hs
index 503358b..ccce1d0 100644
--- a/Handlers.hs
+++ b/Handlers.hs
@@ -9,6 +9,7 @@ module Handlers where
import Codec.MIME.Parse(parseMIMEMessage)
import Codec.MIME.Type(MIMEValue(..))
+import Control.Exception(evaluate)
import Control.Monad.State
import Data.List(intercalate, stripPrefix)
import System.FilePath(FilePath, takeFileName, dropTrailingPathSeparator)
@@ -33,7 +34,7 @@ changeMode :: Mode -> LazymailCurses ()
changeMode EmailMode = return ()
changeMode IndexMode = do
st <- get
- msg <- liftIO $ UTF8.readFile . selectedEmailPath . indexState $ st
+ msg <- liftIO $ UTF8.readFile (selectedEmailPath . indexState $ st)
let email = parseMIMEMessage msg
let body = getBody $ email
let el = formatBody body $ screenColumns st
nihil fit ex nihilo