From 61595dec8bfd7d74e7cd2f3500eec86c08eff436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Mon, 27 May 2019 21:47:51 +0200 Subject: Finalize messsage thread listing --- src/Message.hs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Message.hs b/src/Message.hs index 8eaf7f1..0b633ae 100644 --- a/src/Message.hs +++ b/src/Message.hs @@ -6,6 +6,7 @@ module Message ( import Data.List import Data.Ord +import qualified Data.Set as S import Data.Text (Text) import Data.Time.LocalTime @@ -70,8 +71,9 @@ createDirectMessage self thread msg = do return (smsg, sthread) threadToList :: DirectMessageThread -> [DirectMessage] -threadToList thread = helper $ msgHead thread - where helper msgs | msg : msgs' <- sortBy (comparing cmpView) msgs = - fromStored msg : helper (dropWhile (== msg) msgs') - | otherwise = [] +threadToList thread = helper S.empty $ msgHead thread + where helper seen msgs + | msg : msgs' <- filter (`S.notMember` seen) $ reverse $ sortBy (comparing cmpView) msgs = + fromStored msg : helper (S.insert msg seen) (msgs' ++ msgPrev (fromStored msg)) + | otherwise = [] cmpView msg = (zonedTimeToUTC $ msgTime $ fromStored msg, storedRef msg) -- cgit v1.2.3