From: Sergey Matveev Date: Sun, 3 Oct 2021 21:12:07 +0000 (+0300) Subject: Built-in MIMEs compression capability X-Git-Url: http://www.git.stargrave.org/?p=godlighty.git;a=commitdiff_plain;h=42568e5415055789d7e59b2fce2c7e14de262c74 Built-in MIMEs compression capability --- diff --git a/rc/mime.go b/rc/mime.go index 0b8d532..9aea81e 100644 --- a/rc/mime.go +++ b/rc/mime.go @@ -14,39 +14,32 @@ const MIMEDir = "mime" var ( //go:embed mime mimes embed.FS - - CompressibleMIMEBundles = map[string]struct{}{ - "mail": struct{}{}, - "playlist": struct{}{}, - "subtitle": struct{}{}, - "text": struct{}{}, - "web": struct{}{}, - "xml": struct{}{}, - } - CompressibleMIMEExts = []string{ - ".dvi", - ".eps", - ".fb2", - ".meta4", - ".metalink", - ".ps", - } ) -func parseMIME(p string) map[string]string { +type MIMEEntry struct { + ext string + mediaType string + compressible bool +} + +func parseMIME(p string) []MIMEEntry { tsv, err := mimes.ReadFile(path.Join(MIMEDir, p)) if err != nil { panic(err) } - m := make(map[string]string) + entries := make([]MIMEEntry, 0) for _, line := range strings.Split(string(tsv), "\n") { if len(line) == 0 || line[0] == '#' { continue } - cols := strings.SplitN(line, "\t", 2) - m[cols[0]] = cols[1] + cols := strings.Split(line, "\t") + entry := MIMEEntry{ext: cols[0], mediaType: cols[1]} + if len(cols) > 2 && cols[2] == "c" { + entry.compressible = true + } + entries = append(entries, entry) } - return m + return entries } func init() { @@ -56,18 +49,11 @@ func init() { } for _, entry := range entries { bundle := entry.Name() - _, allCompressible := CompressibleMIMEBundles[bundle] - for ext, mediaType := range parseMIME(bundle) { - godlighty.ContentTypes[ext] = mediaType - if allCompressible { - godlighty.CompressibleContentTypes[mediaType] = struct{}{} + for _, e := range parseMIME(bundle) { + godlighty.ContentTypes[e.ext] = e.mediaType + if e.compressible { + godlighty.CompressibleContentTypes[e.mediaType] = struct{}{} } } } - CompressibleMIMEBundles = nil - for _, ext := range CompressibleMIMEExts { - mediaType := godlighty.ContentTypes[ext] - godlighty.CompressibleContentTypes[mediaType] = struct{}{} - } - CompressibleMIMEExts = nil } diff --git a/rc/mime/doc b/rc/mime/doc index b9f8af5..367fd1e 100644 --- a/rc/mime/doc +++ b/rc/mime/doc @@ -2,9 +2,9 @@ .cbz application/vnd.comicbook+zip .chm application/vnd.ms-htmlhelp .djvu image/vnd.djvu -.dvi application/x-dvi -.eps application/postscript +.dvi application/x-dvi c +.eps application/postscript c .epub application/epub+zip -.fb2 application/x-fictionbook+xml +.fb2 application/x-fictionbook+xml c .pdf application/pdf -.ps application/postscript +.ps application/postscript c diff --git a/rc/mime/mail b/rc/mime/mail index 475382c..6c1d114 100644 --- a/rc/mime/mail +++ b/rc/mime/mail @@ -1,3 +1,3 @@ -.eml message/rfc822 -.mbox application/mbox -.mht message/rfc822 +.eml message/rfc822 c +.mbox application/mbox c +.mht message/rfc822 c diff --git a/rc/mime/playlist b/rc/mime/playlist index 45da94d..189ab56 100644 --- a/rc/mime/playlist +++ b/rc/mime/playlist @@ -1,3 +1,3 @@ -.m3u application/vnd.apple.mpegurl -.m3u8 application/vnd.apple.mpegurl -.xspf application/xspf+xml +.m3u application/vnd.apple.mpegurl c +.m3u8 application/vnd.apple.mpegurl c +.xspf application/xspf+xml c diff --git a/rc/mime/sharing b/rc/mime/sharing index 10ee818..89afc56 100644 --- a/rc/mime/sharing +++ b/rc/mime/sharing @@ -1,4 +1,4 @@ .iso application/x-iso9660-image -.meta4 application/metalink4+xml -.metalink application/metalink+xml +.meta4 application/metalink4+xml c +.metalink application/metalink+xml c .torrent application/x-bittorrent diff --git a/rc/mime/subtitle b/rc/mime/subtitle index 5f10837..3a3f6ba 100644 --- a/rc/mime/subtitle +++ b/rc/mime/subtitle @@ -1,3 +1,3 @@ -.ass text/x-ssa -.srt application/x-subrip -.ssa text/x-ssa +.ass text/x-ssa c +.srt application/x-subrip c +.ssa text/x-ssa c diff --git a/rc/mime/text b/rc/mime/text index 6990162..b7013e5 100644 --- a/rc/mime/text +++ b/rc/mime/text @@ -1,22 +1,22 @@ -.asc text/plain -.csv text/csv -.cue text/plain -.gmi text/gemini; charset=utf-8 -.icf text/calendar; charset=utf-8 -.info text/info; charset=utf-8 -.json application/json; charset=utf-8 -.ldif text/plain; charset=utf-8 -.log text/plain; charset=utf-8 -.md text/markdown; charset=utf-8 -.pod text/x-pod; charset=utf-8 -.readme text/plain; charset=utf-8 -.rec text/plain; charset=utf-8 -.sql text/plain; charset=utf-8 -.tex application/x-tex -.txt text/plain; charset=utf-8 -.url text/uri-list; charset=utf-8 -.vcf text/vcard; charset=utf-8 -.yaml text/yaml; charset=utf-8 -.zone text/dns; charset=utf-8 -ls-lR text/plain; charset=utf-8 -README text/plain; charset=utf-8 +.asc text/plain c +.csv text/csv c +.cue text/plain c +.gmi text/gemini; charset=utf-8 c +.icf text/calendar; charset=utf-8 c +.info text/info; charset=utf-8 c +.json application/json; charset=utf-8 c +.ldif text/plain; charset=utf-8 c +.log text/plain; charset=utf-8 c +.md text/markdown; charset=utf-8 c +.pod text/x-pod; charset=utf-8 c +.readme text/plain; charset=utf-8 c +.rec text/plain; charset=utf-8 c +.sql text/plain; charset=utf-8 c +.tex application/x-tex c +.txt text/plain; charset=utf-8 c +.url text/uri-list; charset=utf-8 c +.vcf text/vcard; charset=utf-8 c +.yaml text/yaml; charset=utf-8 c +.zone text/dns; charset=utf-8 c +ls-lR text/plain; charset=utf-8 c +README text/plain; charset=utf-8 c diff --git a/rc/mime/web b/rc/mime/web index 166f30e..4a9d9c5 100644 --- a/rc/mime/web +++ b/rc/mime/web @@ -1,7 +1,7 @@ -.css text/css; charset=utf-8 -.dtd application/xml-dtd -.htm text/html -.html text/html -.js application/javascript; charset=utf-8 +.css text/css; charset=utf-8 c +.dtd application/xml-dtd c +.htm text/html c +.html text/html c +.js application/javascript; charset=utf-8 c .wasm application/wasm -.xhtml application/xhtml+xml +.xhtml application/xhtml+xml c diff --git a/rc/mime/xml b/rc/mime/xml index d81783e..7cbe99d 100644 --- a/rc/mime/xml +++ b/rc/mime/xml @@ -1,7 +1,7 @@ -.atom application/atom+xml -.dbk application/docbook+xml -.opml application/xml -.rss application/rss+xml -.xbel application/xml -.xml application/xml -.xmp application/rdf+xml +.atom application/atom+xml c +.dbk application/docbook+xml c +.opml application/xml c +.rss application/rss+xml c +.xbel application/xml c +.xml application/xml c +.xmp application/rdf+xml c