mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-12 00:34:13 +01:00
135 lines
2.9 KiB
Go
135 lines
2.9 KiB
Go
package fs
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// Common file extensions used throughout PhotoPrism.
|
|
const (
|
|
ExtNone = ""
|
|
ExtLocal = ".local"
|
|
ExtPDF = ".pdf"
|
|
ExtJpeg = ".jpg"
|
|
ExtPng = ".png"
|
|
ExtDng = ".dng"
|
|
ExtThm = ".thm"
|
|
ExtH264 = ".h264"
|
|
ExtAvc = ".avc"
|
|
ExtAvc1 = ".avc1"
|
|
ExtDva = ".dva"
|
|
ExtDva1 = ".dva1"
|
|
ExtAvc2 = ".avc2"
|
|
ExtAvc3 = ".avc3"
|
|
ExtDvav = ".dvav"
|
|
ExtAvc10 = ".avc10"
|
|
ExtH265 = ".h265"
|
|
ExtHvc = ".hvc"
|
|
ExtHvc1 = ".hvc1"
|
|
ExtDvh = ".dvh"
|
|
ExtDvh1 = ".dvh1"
|
|
ExtHvc2 = ".hvc2"
|
|
ExtHvc3 = ".hvc3"
|
|
ExtHvc10 = ".hvc10"
|
|
ExtHevc = ".hevc"
|
|
ExtHevc10 = ".hevc10"
|
|
ExtHev = ".hev"
|
|
ExtDvhe = ".dvhe"
|
|
ExtHev1 = ".hev1"
|
|
ExtHev2 = ".hev2"
|
|
ExtHev3 = ".hev3"
|
|
ExtHev10 = ".hev10"
|
|
ExtH266 = ".h266"
|
|
ExtVvc = ".vvc"
|
|
ExtVvc1 = ".vvc1"
|
|
ExtEvc = ".evc"
|
|
ExtEvc1 = ".evc1"
|
|
ExtMp4 = ".mp4"
|
|
ExtMov = ".mov"
|
|
ExtQT = ".qt"
|
|
ExtYml = ".yml"
|
|
ExtYaml = ".yaml"
|
|
ExtTml = ".tml"
|
|
ExtToml = ".toml"
|
|
ExtJson = ".json"
|
|
ExtGeoJson = ".geojson"
|
|
ExtXml = ".xml"
|
|
ExtXMP = ".xmp"
|
|
ExtHTM = ".htm"
|
|
ExtHTML = ".html"
|
|
ExtXHTML = ".xhtml"
|
|
ExtTxt = ".txt"
|
|
ExtMd = ".md"
|
|
ExtMarkdown = ".markdown"
|
|
ExtPb = ".pb"
|
|
ExtProto = ".proto"
|
|
ExtZip = ".zip"
|
|
)
|
|
|
|
// Ext returns all extension of a file name including the dots.
|
|
func Ext(name string) string {
|
|
if name == "" {
|
|
return ""
|
|
}
|
|
|
|
ext := filepath.Ext(name)
|
|
name = StripExt(name)
|
|
|
|
if Extensions.Known(name) {
|
|
ext = filepath.Ext(name) + ext
|
|
}
|
|
|
|
return ext
|
|
}
|
|
|
|
// ArchiveExt returns the normalized archive file extension or an empty string if it is not an archive.
|
|
func ArchiveExt(name string) string {
|
|
switch strings.ToLower(Ext(name)) {
|
|
case ExtZip:
|
|
return ExtZip
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// NormalizedExt returns the file extension without dot and in lowercase.
|
|
func NormalizedExt(fileName string) string {
|
|
if dot := strings.LastIndex(fileName, "."); dot != -1 && len(fileName[dot+1:]) >= 1 {
|
|
return strings.ToLower(fileName[dot+1:])
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// LowerExt returns the file name extension with dot in lower case.
|
|
func LowerExt(fileName string) string {
|
|
if fileName == "" {
|
|
return ""
|
|
}
|
|
|
|
return strings.ToLower(filepath.Ext(fileName))
|
|
}
|
|
|
|
// TrimExt removes unwanted characters from file extension strings, and makes it lowercase for comparison.
|
|
func TrimExt(ext string) string {
|
|
return strings.ToLower(strings.Trim(ext, " .,;:“”'`\""))
|
|
}
|
|
|
|
// StripExt removes the file type extension from a file name (if any).
|
|
func StripExt(name string) string {
|
|
if end := strings.LastIndex(name, "."); end != -1 {
|
|
name = name[:end]
|
|
}
|
|
|
|
return name
|
|
}
|
|
|
|
// StripKnownExt removes all known file type extension from a file name (if any).
|
|
func StripKnownExt(name string) string {
|
|
for Extensions.Known(name) {
|
|
name = StripExt(name)
|
|
}
|
|
|
|
return name
|
|
}
|