@@ -6,6 +6,7 @@ import Control.Monad.Except (ExceptT, liftIO, throwError)
6
6
import Control.Monad.Trans.Class (lift )
7
7
import Control.Monad.Trans.Except (except )
8
8
import Data.ByteString.Lazy (ByteString )
9
+ import qualified Data.Map as Map
9
10
import Data.Time (getCurrentTime )
10
11
11
12
import Data.Aeson (Value (Array ), eitherDecode , object , toJSON , (.=) )
@@ -14,17 +15,16 @@ import qualified Data.Vector as V
14
15
15
16
import Distribution.Server.Features.Browse.ApplyFilter (applyFilter )
16
17
import Distribution.Server.Features.Browse.Options (BrowseOptions (.. ), IsSearch (.. ))
17
- import Distribution.Server.Features.Core (CoreFeature (CoreFeature ), queryGetPackageIndex , coreResource )
18
+ import Distribution.Server.Features.Core (CoreFeature (CoreFeature ), coreResource )
18
19
import Distribution.Server.Features.Distro (DistroFeature )
19
- import Distribution.Server.Features.PackageList (ListFeature (ListFeature ), makeItemList )
20
+ import Distribution.Server.Features.PackageList (ListFeature (ListFeature ), getAllLists , makeItemList )
20
21
import Distribution.Server.Features.Search (SearchFeature (SearchFeature ), searchPackages )
21
22
import Distribution.Server.Features.Tags (TagsFeature (TagsFeature ), tagsResource )
22
23
import Distribution.Server.Features.Users (UserFeature (UserFeature ), userResource )
23
24
import Distribution.Server.Framework.Error (ErrorResponse (ErrorResponse ))
24
25
import Distribution.Server.Framework.Feature (HackageFeature (.. ), emptyHackageFeature )
25
26
import Distribution.Server.Framework.Resource (Resource (.. ), resourceAt )
26
27
import Distribution.Server.Framework.ServerEnv (ServerEnv (.. ))
27
- import qualified Distribution.Server.Pages.Index as Pages
28
28
29
29
import Happstack.Server.Monads (ServerPartT )
30
30
import Happstack.Server.Response (ToMessage (toResponse ))
@@ -92,14 +92,18 @@ paginate PaginationConfig{totalNumberOfElements, pageNumber} = do
92
92
)
93
93
94
94
getNewPkgList :: CoreFeature -> UserFeature -> TagsFeature -> ListFeature -> SearchFeature -> DistroFeature -> ServerPartT (ExceptT ErrorResponse IO ) Response
95
- getNewPkgList CoreFeature {queryGetPackageIndex, coreResource} UserFeature {userResource} TagsFeature {tagsResource} ListFeature {makeItemList} SearchFeature {searchPackages} distroFeature = do
95
+ getNewPkgList CoreFeature {coreResource} UserFeature {userResource} TagsFeature {tagsResource} ListFeature {getAllLists, makeItemList} SearchFeature {searchPackages} distroFeature = do
96
96
browseOptionsBS <- lookBS " browseOptions"
97
97
browseOptions <- lift (parseBrowseOptions browseOptionsBS)
98
- (isSearch, packageNames) <-
99
- case boSearchTerms browseOptions of
100
- [] -> (IsNotSearch ,) <$> Pages. toPackageNames <$> queryGetPackageIndex
101
- terms -> (IsSearch ,) <$> liftIO (searchPackages terms)
102
- pkgDetails <- liftIO (makeItemList packageNames)
98
+ (isSearch, pkgDetails) <-
99
+ liftIO $ case boSearchTerms browseOptions of
100
+ [] -> do
101
+ allItemsMap <- getAllLists
102
+ pure (IsNotSearch , Map. elems allItemsMap)
103
+ terms -> do
104
+ packageNames <- searchPackages terms
105
+ items <- makeItemList packageNames
106
+ pure (IsSearch , items)
103
107
now <- liftIO getCurrentTime
104
108
listOfPkgs <- liftIO $ applyFilter now isSearch coreResource userResource tagsResource distroFeature browseOptions pkgDetails
105
109
let config =
0 commit comments