76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"path/filepath"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func (c *Config) IsAllowedFile(filename string) bool {
|
|
ext := strings.ToLower(filepath.Ext(filename))
|
|
if ext == "" {
|
|
return false
|
|
}
|
|
// Remove the leading dot
|
|
ext = ext[1:]
|
|
|
|
for _, allowed := range c.AllowedExt {
|
|
if ext == allowed {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func getDefaultExtensions() []string {
|
|
videoExts := strings.Split("webm,m4v,3gp,nsv,ty,strm,rm,rmvb,m3u,ifo,mov,qt,divx,xvid,bivx,nrg,pva,wmv,asf,asx,ogm,ogv,m2v,avi,bin,dat,dvr-ms,mpg,mpeg,mp4,avc,vp3,svq3,nuv,viv,dv,fli,flv,wpl,vob,mkv,mk3d,ts,wtv,m2ts", ",")
|
|
musicExts := strings.Split("MP3,WAV,FLAC,OGG,WMA,AIFF,ALAC,M4A,APE,AC3,DTS,M4P,MID,MIDI,MKA,MP2,MPA,RA,VOC,WV,AMR", ",")
|
|
|
|
// Combine both slices
|
|
allExts := append(videoExts, musicExts...)
|
|
|
|
// Convert to lowercase
|
|
for i, ext := range allExts {
|
|
allExts[i] = strings.ToLower(ext)
|
|
}
|
|
|
|
// Remove duplicates
|
|
seen := make(map[string]struct{})
|
|
var unique []string
|
|
|
|
for _, ext := range allExts {
|
|
if _, ok := seen[ext]; !ok {
|
|
seen[ext] = struct{}{}
|
|
unique = append(unique, ext)
|
|
}
|
|
}
|
|
|
|
sort.Strings(unique)
|
|
return unique
|
|
}
|
|
|
|
func ParseSize(sizeStr string) (int64, error) {
|
|
sizeStr = strings.ToUpper(strings.TrimSpace(sizeStr))
|
|
|
|
// Absolute size-based cache
|
|
multiplier := 1.0
|
|
if strings.HasSuffix(sizeStr, "GB") {
|
|
multiplier = 1024 * 1024 * 1024
|
|
sizeStr = strings.TrimSuffix(sizeStr, "GB")
|
|
} else if strings.HasSuffix(sizeStr, "MB") {
|
|
multiplier = 1024 * 1024
|
|
sizeStr = strings.TrimSuffix(sizeStr, "MB")
|
|
} else if strings.HasSuffix(sizeStr, "KB") {
|
|
multiplier = 1024
|
|
sizeStr = strings.TrimSuffix(sizeStr, "KB")
|
|
}
|
|
|
|
size, err := strconv.ParseFloat(sizeStr, 64)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return int64(size * multiplier), nil
|
|
}
|