packages feed

FermatsLastMargin-0.1: FLM/Control.hs

module FLM.Control where

import FLM.HAppS -- hiding (Updated, Id(..))

import Data.Maybe
import FLM.State as State
import FLM.Types
import FLM.WikiPages
import System.Time
import System.Random

stateFuns = State.stateFuns

createPage = do pid <- return . abs =<< randomIO
                -- return $ gSet (Id pid) (defaultValue :: WikiPage)
                return $ setId (Id pid) (defaultValue :: WikiPage) 

-- replaces gSet (Id pid)
setId                                 :: Id -> WikiPage -> WikiPage
setId newid (WPage a _ u pname ptext) = (WPage a newid u pname ptext)

-- replaces gSet (Updated integer)
setUpdated :: Updated -> WikiPage -> WikiPage
setUpdated newupdated (WPage a id _ pname ptext)  = (WPage a id newupdated pname ptext)

addPage wikipage
    = do let pid = gFind' wikipage
         mbPage <- query $ MbGetPage pid
         if isJust mbPage
          then return Nothing
          else do TOD eTime _ <- getClockTime
                  -- let entry' = gSet (Updated eTime) $ wikipage
                  let entry' = setUpdated (Updated eTime) wikipage
                  update $ AddPage entry'
                  return $ Just pid

updatePage :: Id -> WikiPage -> IO WikiPage
updatePage pid wikipage =
    do 
    TOD eTime _ <- getClockTime
    let wikipage' = setUpdated (Updated eTime) $ setId pid wikipage
    update $ UpdatePage pid wikipage'
    mbPage <- query $ MbGetPage pid -- prove it works
    return $ fromJust mbPage

mbGetPage = query . MbGetPage
getList = query $ GetPages ()