diff --git a/internal/db/gist.go b/internal/db/gist.go index 06af1be..33f4943 100644 --- a/internal/db/gist.go +++ b/internal/db/gist.go @@ -431,7 +431,7 @@ func (gist *Gist) Files(revision string, truncate bool) ([]*git.File, error) { HumanSize: humanize.IBytes(fileCat.Size), Content: fileCat.Content, Truncated: fileCat.Truncated, - MimeType: git.DetectMimeType([]byte(shortContent)), + MimeType: git.DetectMimeType([]byte(shortContent), filepath.Ext(fileCat.Name)), }) } return files, err @@ -465,7 +465,7 @@ func (gist *Gist) File(revision string, filename string, truncate bool) (*git.Fi HumanSize: humanize.IBytes(size), Content: content, Truncated: truncated, - MimeType: git.DetectMimeType([]byte(shortContent)), + MimeType: git.DetectMimeType([]byte(shortContent), filepath.Ext(filename)), }, err } diff --git a/internal/git/mime.go b/internal/git/mime.go index 33da982..fb354e0 100644 --- a/internal/git/mime.go +++ b/internal/git/mime.go @@ -9,6 +9,7 @@ import ( type MimeType struct { ContentType string + extension string } func (mt MimeType) IsText() bool { @@ -16,7 +17,8 @@ func (mt MimeType) IsText() bool { } func (mt MimeType) IsCSV() bool { - return strings.Contains(mt.ContentType, "text/csv") + return strings.Contains(mt.ContentType, "text/csv") && + (strings.HasSuffix(mt.extension, ".csv")) } func (mt MimeType) IsImage() bool { @@ -84,6 +86,6 @@ func (mt MimeType) RenderType() string { return "Binary" } -func DetectMimeType(data []byte) MimeType { - return MimeType{mimetype.Detect(data).String()} +func DetectMimeType(data []byte, extension string) MimeType { + return MimeType{mimetype.Detect(data).String(), extension} } diff --git a/internal/render/csv.go b/internal/render/csv.go index 09c60f8..bfaeb71 100644 --- a/internal/render/csv.go +++ b/internal/render/csv.go @@ -15,8 +15,8 @@ type CSVFile struct { Rows [][]string `json:"-"` } -func (r CSVFile) getFile() *git.File { - return r.File +func (r CSVFile) InternalType() string { + return "CSVFile" } func renderCsvFile(file *git.File) (*CSVFile, error) { diff --git a/internal/render/highlight.go b/internal/render/highlight.go index 4cd5b13..cef4e78 100644 --- a/internal/render/highlight.go +++ b/internal/render/highlight.go @@ -21,8 +21,8 @@ type HighlightedFile struct { HTML string `json:"-"` } -func (r HighlightedFile) getFile() *git.File { - return r.File +func (r HighlightedFile) InternalType() string { + return "HighlightedFile" } type RenderedGist struct { diff --git a/internal/render/render.go b/internal/render/render.go index d07aca0..985ca64 100644 --- a/internal/render/render.go +++ b/internal/render/render.go @@ -9,7 +9,7 @@ import ( ) type RenderedFile interface { - getFile() *git.File + InternalType() string } type NonHighlightedFile struct { @@ -17,8 +17,8 @@ type NonHighlightedFile struct { Type string `json:"type"` } -func (r NonHighlightedFile) getFile() *git.File { - return r.File +func (r NonHighlightedFile) InternalType() string { + return "NonHighlightedFile" } func RenderFiles(files []*git.File) []RenderedFile { @@ -54,7 +54,11 @@ func processFile(file *git.File) RenderedFile { if mt.IsCSV() { rendered, err := renderCsvFile(file) if err != nil { - log.Error().Err(err).Msg("Error parsing CSV file for " + file.Filename) + rendered, err := highlightFile(file) + if err != nil { + log.Error().Err(err).Msg("Error rendering gist preview for " + file.Filename) + } + return rendered } return rendered } else if mt.IsText() && filepath.Ext(file.Filename) == ".md" { diff --git a/templates/pages/gist.html b/templates/pages/gist.html index 4849244..e92ff59 100644 --- a/templates/pages/gist.html +++ b/templates/pages/gist.html @@ -55,7 +55,7 @@