summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-05-30 14:38:52 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-05-30 15:29:24 +0200
commitf9e1191842c2ceac3c9959c1736fe066ca2419ba (patch)
treebe160afe73ecf35a4951bb445c9de36213ea5e21
parent035a0114de75f3aa1e9e3d9c78ebd4092f309e95 (diff)
Direct message history using graphs
-rw-r--r--src/Erebos/DirectMessage.hs9
1 files changed, 4 insertions, 5 deletions
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 []