From f9e1191842c2ceac3c9959c1736fe066ca2419ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 30 May 2026 14:38:52 +0200 Subject: Direct message history using graphs --- src/Erebos/DirectMessage.hs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/Erebos/DirectMessage.hs') diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs index 099ed5c..d9de7c7 100644 --- a/src/Erebos/DirectMessage.hs +++ b/src/Erebos/DirectMessage.hs @@ -42,6 +42,7 @@ import Erebos.Object import Erebos.Service import Erebos.State import Erebos.Storable +import Erebos.Storage.Graph import Erebos.Storage.Head import Erebos.Storage.Merge @@ -334,12 +335,10 @@ dmThreadToListSinceUnread :: DirectMessageThread -> DirectMessageThread -> [ ( D dmThreadToListSinceUnread since thread = threadToListHelper (msgSeen thread) (S.fromAscList $ msgHead since) (msgHead thread) threadToListHelper :: [ Stored DirectMessage ] -> Set (Stored DirectMessage) -> [ Stored DirectMessage ] -> [ ( DirectMessage, Bool ) ] -threadToListHelper seen used msgs - | msg : msgs' <- filter (`S.notMember` used) $ reverse $ sortBy (comparing cmpView) msgs = - ( fromStored msg, not $ any (msg `precedesOrEquals`) seen ) : threadToListHelper seen (S.insert msg used) (msgs' ++ msgPrev (fromStored msg)) - | otherwise = [] +threadToListHelper seen used msgs = map (\msg -> ( fromStored msg, isNew msg )) $ graphToList cmp $ graphRemoveTips (S.toList used) $ graphFromTips msgs where - cmpView msg = (zonedTimeToUTC $ msgTime $ fromStored msg, msg) + cmp = comparing $ zonedTimeToUTC . msgTime . fromStored + isNew msg = not $ any (msg `precedesOrEquals`) seen dmThreadView :: [ Stored MessageState ] -> [ DirectMessageThread ] dmThreadView = helper [] -- cgit v1.2.3