diff options
| -rw-r--r-- | src/Much/TreeView.hs | 3 | ||||
| -rw-r--r-- | src/Notmuch/Message.hs | 12 |
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 |
