X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Rakka.git;a=blobdiff_plain;f=Rakka%2FStorage%2FImpl.hs;h=442c412fb4966f906598155227c115dec48e75e2;hp=c9c2de2858320725b75c30396e54e179bcc6b3da;hb=4abf7df08bf0a614ea8179e8d1d69a17aac4f197;hpb=2ff55c9709fde69968ef97f61b8f395e58b3ec8c diff --git a/Rakka/Storage/Impl.hs b/Rakka/Storage/Impl.hs index c9c2de2..442c412 100644 --- a/Rakka/Storage/Impl.hs +++ b/Rakka/Storage/Impl.hs @@ -16,6 +16,7 @@ import Control.Monad import Data.Maybe import Data.Set (Set) import qualified Data.Set as S +import Data.Time import Network.HTTP.Lucu import Network.HTTP.Lucu.Utils import Network.URI @@ -25,6 +26,7 @@ import Rakka.Page import Rakka.Storage.DefaultPage import Rakka.Storage.Repos import Rakka.Storage.Types +import Rakka.W3CDateTime import Subversion.Types import Subversion.FileSystem import Subversion.Repository @@ -158,6 +160,7 @@ openIndex indexDir revFile $ removeFile revFile Right index <- openDatabase indexDir (Writer [Create []]) + addAttrIndex index "@mdate" SeqIndex addAttrIndex index "@type" StrIndex addAttrIndex index "@uri" SeqIndex addAttrIndex index "rakka:revision" SeqIndex @@ -206,8 +209,16 @@ searchIndex index cond fromId :: [String] -> DocumentID -> IO HitPage fromId words docId = do uri <- getDocURI index docId - rev <- getDocAttr index docId "rakka:revision" - >>= return . read . fromJust + rev <- unsafeInterleaveIO $ + getDocAttr index docId "rakka:revision" + >>= + return . read . fromJust + lastMod <- unsafeInterleaveIO $ + getDocAttr index docId "@mdate" + >>= + return . zonedTimeToUTC . fromJust . parseW3CDateTime . fromJust + summary <- unsafeInterleaveIO $ + getDocAttr index docId "rakka:summary" snippet <- unsafeInterleaveIO $ do doc <- getDocument index docId [NoAttributes, NoKeywords] sn <- makeSnippet doc words 300 80 80 @@ -215,6 +226,8 @@ searchIndex index cond return HitPage { hpPageName = decodePageName $ uriPath uri , hpPageRev = rev + , hpLastMod = lastMod + , hpSummary = summary , hpSnippet = snippet }