diff --git a/cmd/serve/dlna/cds.go b/cmd/serve/dlna/cds.go index bb1aae7d9..39fa09c37 100644 --- a/cmd/serve/dlna/cds.go +++ b/cmd/serve/dlna/cds.go @@ -5,6 +5,7 @@ import ( "encoding/xml" "fmt" "log" + "mime" "net/http" "net/url" "os" @@ -12,6 +13,7 @@ import ( "path/filepath" "regexp" "sort" + "strings" "github.com/anacrolix/dms/dlna" "github.com/anacrolix/dms/upnp" @@ -21,6 +23,39 @@ import ( "github.com/rclone/rclone/vfs" ) +// Add a minimal number of mime types to augment go's built in types +// for environments which don't have access to a mime.types file (eg +// Termux on android) +func init() { + for _, t := range []struct { + mimeType string + extensions string + }{ + {"audio/flac", ".flac"}, + {"audio/mpeg", ".mpga,.mpega,.mp2,.mp3,.m4a"}, + {"audio/ogg", ".oga,.ogg,.opus,.spx"}, + {"audio/x-wav", ".wav"}, + {"image/tiff", ".tiff,.tif"}, + {"video/dv", ".dif,.dv"}, + {"video/fli", ".fli"}, + {"video/mpeg", ".mpeg,.mpg,.mpe"}, + {"video/MP2T", ".ts"}, + {"video/mp4", ".mp4"}, + {"video/quicktime", ".qt,.mov"}, + {"video/ogg", ".ogv"}, + {"video/webm", ".webm"}, + {"video/x-msvideo", ".avi"}, + {"video/x-matroska", ".mpv,.mkv"}, + } { + for _, ext := range strings.Split(t.extensions, ",") { + err := mime.AddExtensionType(ext, t.mimeType) + if err != nil { + panic(err) + } + } + } +} + type contentDirectoryService struct { *server upnp.Eventing