diff --git a/modules/structs/repo_file.go b/modules/structs/repo_file.go index 5e8bc3c..5059a17 100644 --- a/modules/structs/repo_file.go +++ b/modules/structs/repo_file.go @@ -22,6 +22,7 @@ type BatchFileResponse struct { type ContentsResponse struct { *gitea_api.ContentsResponse + IsTextFile bool `json:"is_text_file"` LatestCommit ContentsResponseCommit `json:"latest_commit"` } diff --git a/services/repository/files/content.go b/services/repository/files/content.go index a92262f..0705b20 100644 --- a/services/repository/files/content.go +++ b/services/repository/files/content.go @@ -11,6 +11,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/git" gitea_api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/typesniffer" "code.gitea.io/gitea/modules/util" gitea_files_service "code.gitea.io/gitea/services/repository/files" hat_api "code.gitlink.org.cn/Gitlink/gitea_hat.git/modules/structs" @@ -134,6 +135,21 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref return nil, err } + blob, err := gitRepo.GetBlob(entry.ID.String()) + if err != nil { + return nil, err + } + dataRc, err := blob.DataAsync() + if err != nil { + return nil, err + } + buf := make([]byte, 1024) + n, _ := util.ReadAtMost(dataRc, buf) + buf = buf[:n] + + st := typesniffer.DetectContentType(buf) + isTextFile := st.IsText() + contentsResponse := &hat_api.ContentsResponse{ ContentsResponse: &gitea_api.ContentsResponse{ Name: entry.Name(), @@ -146,6 +162,7 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref Self: &selfURLString, }, }, + IsTextFile: isTextFile, LatestCommit: hat_api.ContentsResponseCommit{ Message: lastCommit.CommitMessage, Sha: lastCommit.ID.String(),