kitten: When guessing MIME types use a builtin list as a fallback, generated from the MIME type definitions available on the build system

This commit is contained in:
Kovid Goyal 2023-01-21 17:34:28 +05:30
parent 16f767de7e
commit b1934ce267
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 22 additions and 1 deletions

View File

@ -562,6 +562,17 @@ def generate_readline_actions() -> str:
''')
def generate_mimetypes() -> str:
import mimetypes
if not mimetypes.inited:
mimetypes.init()
ans = ['package utils', 'import "sync"', 'var only_once sync.Once', 'var builtin_types_map map[string]string', 'func set_builtins() {', 'builtin_types_map = map[string]string{',]
for k, v in mimetypes.types_map.items():
ans.append(f' "{serialize_as_go_string(k)}": "{serialize_as_go_string(v)}",')
ans.append('}}')
return '\n'.join(ans)
def main() -> None:
with replace_if_needed('constants_generated.go') as f:
f.write(generate_constants())
@ -571,6 +582,8 @@ def main() -> None:
f.write(generate_readline_actions())
with replace_if_needed('tools/tui/spinners_generated.go') as f:
f.write(generate_spinners())
with replace_if_needed('tools/utils/mimetypes_generated.go') as f:
f.write(generate_mimetypes())
update_completion()
update_at_commands()
kitten_clis()

View File

@ -6,6 +6,7 @@ import (
"fmt"
"mime"
"path/filepath"
"strings"
)
var _ = fmt.Print
@ -14,7 +15,14 @@ func GuessMimeType(filename string) string {
ext := filepath.Ext(filename)
mime_with_parameters := mime.TypeByExtension(ext)
if mime_with_parameters == "" {
return mime_with_parameters
only_once.Do(set_builtins)
mime_with_parameters = builtin_types_map[ext]
if mime_with_parameters == "" {
mime_with_parameters = builtin_types_map[strings.ToLower(ext)]
if mime_with_parameters == "" {
return ""
}
}
}
ans, _, err := mime.ParseMediaType(mime_with_parameters)
if err != nil {