OpenDiablo2/d2common/d2loader/asset/types/source_types.go

49 lines
1.0 KiB
Go

package types
import (
"path/filepath"
"strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
)
// SourceType represents the type of the asset source
type SourceType int
// Asset sources
const (
AssetSourceUnknown SourceType = iota
AssetSourceFileSystem
AssetSourceMPQ
)
// Ext2SourceType returns the SourceType from the given file extension
func Ext2SourceType(ext string) SourceType {
ext = strings.ToLower(ext)
ext = strings.ReplaceAll(ext, ".", "")
lookup := map[string]SourceType{
"mpq": AssetSourceMPQ,
}
if knownType, found := lookup[ext]; found {
return knownType
}
return AssetSourceUnknown
}
// CheckSourceType attempts to determine the source type of the source
func CheckSourceType(path string) SourceType {
// on MacOS, the MPQ's from blizzard don't have file extensions
// so we just attempt to init the file as an mpq
if mpq, err := d2mpq.New(path); err == nil {
_ = mpq.Close()
return AssetSourceMPQ
}
ext := filepath.Ext(path)
return Ext2SourceType(ext)
}