Files
ddc/internal/extract/formats.go
T
2026-10-25 20:24:50 -04:00

51 lines
951 B
Go
Executable File

package extract
import "strings"
type format int
const (
formatNone format = iota
formatZip
formatTar
formatTarGzip
formatTarBzip2
)
var knownSuffixes = []struct {
suffix string
format format
}{
{".tar.gz", formatTarGzip},
{".tgz", formatTarGzip},
{".tar.bz2", formatTarBzip2},
{".tbz2", formatTarBzip2},
{".tbz", formatTarBzip2},
{".tar", formatTar},
{".zip", formatZip},
}
func detect(name string) (format, string) {
lowerName := strings.ToLower(name)
for _, known := range knownSuffixes {
if strings.HasSuffix(lowerName, known.suffix) {
return known.format, known.suffix
}
}
return formatNone, ""
}
func IsArchive(name string) bool {
archiveFormat, _ := detect(name)
return archiveFormat != formatNone
}
func DirectoryName(archiveName string) string {
_, suffix := detect(archiveName)
base := strings.Trim(archiveName[:len(archiveName)-len(suffix)], ". ")
if base == "" {
return "extracted"
}
return base
}