diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Erebos/DirectMessage.hs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs index d9de7c7..62a25a2 100644 --- a/src/Erebos/DirectMessage.hs +++ b/src/Erebos/DirectMessage.hs @@ -13,6 +13,7 @@ module Erebos.DirectMessage ( DirectMessageThread(..), dmThreadToList, dmThreadToListSince, dmThreadToListUnread, dmThreadToListSinceUnread, + dmThreadToListChange, dmThreadView, watchDirectMessageThreads, @@ -54,8 +55,8 @@ instance ConversationType DirectMessageThread DirectMessage where convReference = refDigest . storedRef . head . idDataF . msgPeer - convMessageListSince mbSince thread = ( 0, ) $ - threadToListHelper (msgSeen thread) (maybe S.empty (S.fromAscList . msgHead) mbSince) (msgHead thread) + convMessageListSince Nothing thread = ( 0, ) $ dmThreadToListUnread thread + convMessageListSince (Just since) thread = dmThreadToListChange since thread data DirectMessage = DirectMessage @@ -340,6 +341,18 @@ threadToListHelper seen used msgs = map (\msg -> ( fromStored msg, isNew msg )) cmp = comparing $ zonedTimeToUTC . msgTime . fromStored isNew msg = not $ any (msg `precedesOrEquals`) seen +dmThreadToListChange :: DirectMessageThread -> DirectMessageThread -> ( Int, [ ( DirectMessage, Bool ) ] ) +dmThreadToListChange since thread = + ( graphSize $ graphRemoveTips bottom $ graphFromTips (msgHead since) + , map (\msg -> ( fromStored msg, isNew msg )) $ graphToList cmp $ graphRemoveTips bottom $ graphFromTips (msgHead thread) + ) + where + cmp = comparing $ zonedTimeToUTC . msgTime . fromStored + isNew msg = not $ any (msg `precedesOrEquals`) (msgSeen thread) + bottom + | msgSeen since == msgSeen thread = msgHead since + | otherwise = commonAncestors (msgHead since) (msgSeen since) + dmThreadView :: [ Stored MessageState ] -> [ DirectMessageThread ] dmThreadView = helper [] where helper used ms' = case filterAncestors ms' of |