2017-10-26 23:10:54 -07:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2017-10-26 23:10:54 -07:00
package repo
import (
2021-04-05 17:30:52 +02:00
"net/http"
2017-10-26 23:10:54 -07:00
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
2019-12-23 20:31:16 +08:00
code_indexer "code.gitea.io/gitea/modules/indexer/code"
2017-10-26 23:10:54 -07:00
"code.gitea.io/gitea/modules/setting"
)
const tplSearch base . TplName = "repo/search"
// Search render repository search page
func Search ( ctx * context . Context ) {
if ! setting . Indexer . RepoIndexerEnabled {
2022-03-23 05:54:07 +01:00
ctx . Redirect ( ctx . Repo . RepoLink )
2017-10-26 23:10:54 -07:00
return
}
2022-10-11 02:12:03 +03:00
2021-08-11 17:08:52 +02:00
language := ctx . FormTrim ( "l" )
keyword := ctx . FormTrim ( "q" )
2022-10-11 02:12:03 +03:00
queryType := ctx . FormTrim ( "t" )
isMatch := queryType == "match"
ctx . Data [ "Keyword" ] = keyword
ctx . Data [ "Language" ] = language
ctx . Data [ "queryType" ] = queryType
ctx . Data [ "PageIsViewCode" ] = true
if keyword == "" {
ctx . HTML ( http . StatusOK , tplSearch )
return
}
2021-07-29 09:42:15 +08:00
page := ctx . FormInt ( "page" )
2017-10-26 23:10:54 -07:00
if page <= 0 {
page = 1
}
2021-01-27 18:00:35 +08:00
2022-01-27 10:30:51 +02:00
total , searchResults , searchResultLanguages , err := code_indexer . PerformSearch ( ctx , [ ] int64 { ctx . Repo . Repository . ID } ,
2021-01-27 18:00:35 +08:00
language , keyword , page , setting . UI . RepoSearchPagingNum , isMatch )
2017-10-26 23:10:54 -07:00
if err != nil {
2022-01-27 10:30:51 +02:00
if code_indexer . IsAvailable ( ) {
ctx . ServerError ( "SearchResults" , err )
return
}
ctx . Data [ "CodeIndexerUnavailable" ] = true
} else {
ctx . Data [ "CodeIndexerUnavailable" ] = ! code_indexer . IsAvailable ( )
2017-10-26 23:10:54 -07:00
}
2022-10-11 02:12:03 +03:00
2023-02-11 14:34:11 +08:00
ctx . Data [ "SourcePath" ] = ctx . Repo . Repository . Link ( )
2017-10-26 23:10:54 -07:00
ctx . Data [ "SearchResults" ] = searchResults
2020-02-20 21:53:55 +02:00
ctx . Data [ "SearchResultLanguages" ] = searchResultLanguages
2019-04-20 06:15:19 +02:00
pager := context . NewPagination ( total , setting . UI . RepoSearchPagingNum , page , 5 )
pager . SetDefaultParams ( ctx )
2020-02-20 21:53:55 +02:00
pager . AddParam ( ctx , "l" , "Language" )
2019-04-20 06:15:19 +02:00
ctx . Data [ "Page" ] = pager
2021-04-05 17:30:52 +02:00
ctx . HTML ( http . StatusOK , tplSearch )
2017-10-26 23:10:54 -07:00
}