From 69d65594a5af76e41224e338e20631bebd76299d Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Thu, 14 May 2015 17:02:05 +0300 Subject: [PATCH] Snapshot list --- Handler/Snapshots.hs | 38 ++++++++++++++-------------------- Stackage/Database.hs | 12 +++++++++++ templates/all-snapshots.hamlet | 6 ++---- templates/stackage-home.hamlet | 2 +- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/Handler/Snapshots.hs b/Handler/Snapshots.hs index 18fee5d..f48ae0c 100644 --- a/Handler/Snapshots.hs +++ b/Handler/Snapshots.hs @@ -3,10 +3,10 @@ module Handler.Snapshots where import Data.Time.Clock -import qualified Database.Esqueleto as E import Formatting import Formatting.Time import Import +import Stackage.Database snapshotsPerPage :: Integral a => a snapshotsPerPage = 50 @@ -20,27 +20,14 @@ snapshotsPerPage = 50 -- inclined, or create a single monolithic file. getAllSnapshotsR :: Handler Html getAllSnapshotsR = do - error "getAllSnapshotsR" - {- now' <- liftIO getCurrentTime currentPageMay <- lookupGetParam "page" let currentPage :: Int currentPage = fromMaybe 1 (currentPageMay >>= readMay) - (totalCount, groups) <- fmap (groupUp now') $ runDB $ do - c <- count ([] :: [Filter Stackage]) - rs <- E.select $ E.from $ \(stackage `E.InnerJoin` user) -> do - E.on (stackage E.^. StackageUser E.==. user E.^. UserId) - E.orderBy [E.desc $ stackage E.^. StackageUploaded] - E.limit snapshotsPerPage - E.offset ((fromIntegral currentPage - 1) * snapshotsPerPage) - return - ( stackage E.^. StackageSlug - , stackage E.^. StackageTitle - , stackage E.^. StackageUploaded - , user E.^. UserDisplay - , user E.^. UserHandle - ) - return (c, rs) + (totalCount, snapshots) <- getSnapshots + snapshotsPerPage + ((fromIntegral currentPage - 1) * snapshotsPerPage) + let groups = groupUp now' snapshots let isFirstPage = currentPage == 1 isLastPage = currentPage * snapshotsPerPage >= totalCount @@ -49,8 +36,13 @@ getAllSnapshotsR = do setTitle "Stackage Server" let snapshotsNav = $(widgetFile "snapshots-nav") $(widgetFile "all-snapshots") - where uncrapify now' c = - let (E.Value ident, E.Value title, E.Value uploaded, E.Value display, E.Value handle') = c - in (ident,title,format (diff True) (diffUTCTime uploaded now'),display,handle') - groupUp now' (c, rs) = (c, (groupBy (on (==) (\(_,_,uploaded,_,_) -> uploaded)) . map (uncrapify now')) rs) - -} + where uncrapify now' snapshot = + ( snapshotName snapshot + , snapshotTitle snapshot + , format (diff True) + $ diffUTCTime + (UTCTime (snapshotCreated snapshot) 0) + now' + ) + groupUp now' = groupBy (on (==) (\(_,_,uploaded) -> uploaded)) + . map (uncrapify now') diff --git a/Stackage/Database.hs b/Stackage/Database.hs index bfd8509..13c5208 100644 --- a/Stackage/Database.hs +++ b/Stackage/Database.hs @@ -27,6 +27,7 @@ module Stackage.Database , getPackage , prettyName , getSnapshotsForPackage + , getSnapshots ) where import Database.Sqlite (SqliteException) @@ -588,3 +589,14 @@ getSnapshotsForPackage pname = run $ do return $ case ms of Nothing -> Nothing Just s -> Just (s, snapshotPackageVersion sp) + +getSnapshots + :: GetStackageDatabase m + => Int -- ^ limit + -> Int -- ^ offset + -> m (Int, [Snapshot]) +getSnapshots l o = run $ (,) + <$> count ([] :: [Filter Snapshot]) + <*> fmap (map entityVal) (selectList + [] + [LimitTo l, OffsetBy o, Desc SnapshotCreated]) diff --git a/templates/all-snapshots.hamlet b/templates/all-snapshots.hamlet index 84ab1f5..0207a77 100644 --- a/templates/all-snapshots.hamlet +++ b/templates/all-snapshots.hamlet @@ -3,15 +3,13 @@

Snapshots ^{snapshotsNav} $forall stackages <- groups - $forall (_, _, uploaded, _, _) <- take 1 stackages + $forall (_, _, uploaded) <- take 1 stackages

#{uploaded}