summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Much/TreeView.hs3
-rw-r--r--src/Notmuch/Message.hs12
2 files changed, 9 insertions, 6 deletions
diff --git a/src/Much/TreeView.hs b/src/Much/TreeView.hs
index eb2263c..09eca5b 100644
--- a/src/Much/TreeView.hs
+++ b/src/Much/TreeView.hs
@@ -85,7 +85,8 @@ xconvHead m =
xconvBody :: Message -> Forest TreeView
-xconvBody m = map (xconvPart m) (messageBody m)
+xconvBody m =
+ [xconvPart m (messageBody m)]
xconvPart :: Message -> MessagePart -> Tree TreeView
diff --git a/src/Notmuch/Message.hs b/src/Notmuch/Message.hs
index 07564ca..13f3413 100644
--- a/src/Notmuch/Message.hs
+++ b/src/Notmuch/Message.hs
@@ -8,7 +8,6 @@ import Data.ByteString.Lazy.Char8 qualified as LBS8
import Data.CaseInsensitive qualified as CI
import Data.Map qualified as M
import Data.Text qualified as T
-import Data.Time.Calendar
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Data.Tree qualified as TR
@@ -88,7 +87,7 @@ data Message = Message {
messageId :: MessageID
, messageTime :: UTCTime
, messageHeaders :: MessageHeaders
- , messageBody :: [MessagePart]
+ , messageBody :: MessagePart
, messageExcluded :: Bool
, messageMatch :: Bool
, messageTags :: [T.Text]
@@ -108,14 +107,17 @@ instance FromJSON Message where
parseJSON (Object v) = Message <$> (MessageID . ("id:"<>) <$> v .: "id")
<*> (posixSecondsToUTCTime . fromInteger <$> v .: "timestamp")
<*> (M.mapKeys CI.mk <$> v .: "headers")
- <*> v .: "body"
+ <*> (one =<< v .: "body")
<*> v .: "excluded"
<*> v .: "match"
<*> v .: "tags"
<*> v .: "filename"
- parseJSON (Array _) = return $ Message (MessageID "") defTime M.empty [] True False [] ""
- where defTime = UTCTime (ModifiedJulianDay 0) 0
parseJSON x = fail $ "Error parsing message: " ++ show x
+
+
+one :: [a] -> Parser a
+one [x] = pure x
+one _ = fail "Expected exactly one element"
hasTag :: T.Text -> Message -> Bool
hasTag tag = (tag `elem`) . messageTags