diff --git a/gen-go-code.py b/gen-go-code.py index 711afcb07..0678275d7 100755 --- a/gen-go-code.py +++ b/gen-go-code.py @@ -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() diff --git a/tools/utils/mimetypes.go b/tools/utils/mimetypes.go index a70616c5c..a5e7db410 100644 --- a/tools/utils/mimetypes.go +++ b/tools/utils/mimetypes.go @@ -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 {