about summary refs log tree commit diff
path: root/tools/fixcomments.hs
blob: dc89dbdd647f74072d4b74038760bf220ab1f72c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

fixComments :: AcidState Blog -> IO ()
fixComments acid = do
    entriesDE <- query' acid $ LatestEntries DE
    entriesEN <- query' acid $ LatestEntries EN
    filterComments entriesDE
    filterComments entriesEN
  where
    (cDate :: UTCTime) = fromJust $ parseTime defaultTimeLocale "%d.%m.%Y %T" "22.04.2012 21:57:35"
    foldOp :: [(EntryId, [UTCTime])] -> Entry -> [(EntryId, [UTCTime])]
    foldOp l e = let c = map cdate $ filter (\c1 -> cdate c1 > cDate) $ comments e
                 in if null c then l
                              else (entryId e, c) : l
    pred :: Entry -> Bool
    pred e = let f eId [] = False
                 f eId (c:r) = if (cdate c > cDate) then True
                                                    else f eId r
             in f (entryId e) (comments e)
    filterComments entries = mapM_ removeComments $ foldl foldOp [] $ filter pred entries
    removeComments :: (EntryId, [UTCTime]) -> IO ()
    removeComments (eId, comments) = mapM_ (\c -> update' acid $ DeleteComment eId c) comments