From 35347e4cfbd9070d1065b1ff9600013d648c5e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 7 Dec 2019 22:35:55 +0100 Subject: Mergeable stored list --- src/Message.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/Message.hs') diff --git a/src/Message.hs b/src/Message.hs index 61d882c..21f398c 100644 --- a/src/Message.hs +++ b/src/Message.hs @@ -12,6 +12,7 @@ import Data.Time.LocalTime import Identity import Storage +import Storage.Merge data DirectMessage = DirectMessage { msgFrom :: ComposedIdentity @@ -29,13 +30,13 @@ data DirectMessageThread = DirectMessageThread instance Storable DirectMessage where store' msg = storeRec $ do mapM_ (storeRef "from") $ idDataF $ msgFrom msg - mapM_ (storeRef "prev") $ msgPrev msg + mapM_ (storeRef "PREV") $ msgPrev msg storeDate "time" $ msgTime msg storeText "text" $ msgText msg load' = loadRec $ DirectMessage <$> loadIdentity "from" - <*> loadRefs "prev" + <*> loadRefs "PREV" <*> loadDate "time" <*> loadText "text" @@ -50,6 +51,13 @@ instance Storable DirectMessageThread where <*> loadRefs "head" <*> loadRefs "seen" +instance Mergeable DirectMessageThread where + mergeSorted ts = DirectMessageThread + { msgPeer = msgPeer $ fromStored $ head ts -- TODO: merge identity + , msgHead = filterAncestors $ msgHead . fromStored =<< ts + , msgSeen = filterAncestors $ msgSeen . fromStored =<< ts + } + emptyDirectThread :: ComposedIdentity -> DirectMessageThread emptyDirectThread peer = DirectMessageThread peer [] [] -- cgit v1.2.3