From: Jeff Halter Date: Wed, 25 May 2022 22:03:54 +0000 (-0700) Subject: Add more file extension -> type/creator code mappings X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/commitdiff_plain/2728d12b6169a978aa3dc2e35390923d2eecd295?ds=inline Add more file extension -> type/creator code mappings --- diff --git a/hotline/file_types.go b/hotline/file_types.go new file mode 100644 index 0000000..90ff57f --- /dev/null +++ b/hotline/file_types.go @@ -0,0 +1,58 @@ +package hotline + +type fileType struct { + TypeCode string + CreatorCode string +} + +var defaultFileType = fileType{ + TypeCode: "TEXT", + CreatorCode: "TTXT", +} + +var fileTypes = map[string]fileType{ + "sit": { + TypeCode: "SIT!", + CreatorCode: "SIT!", + }, + "pdf": { + TypeCode: "PDF ", + CreatorCode: "CARO", + }, + "gif": { + TypeCode: "GIFf", + CreatorCode: "ogle", + }, + "txt": { + TypeCode: "TEXT", + CreatorCode: "ttxt", + }, + "zip": { + TypeCode: "ZIP ", + CreatorCode: "SITx", + }, + "tgz": { + TypeCode: "Gzip ", + CreatorCode: "SITx", + }, + "hqx": { + TypeCode: "TEXT ", + CreatorCode: "SITx", + }, + "jpg": { + TypeCode: "JPEG ", + CreatorCode: "ogle", + }, + "img": { + TypeCode: "rohd ", + CreatorCode: "ddsk", + }, + "sea": { + TypeCode: "APPL ", + CreatorCode: "aust", + }, + "mov": { + TypeCode: "MooV ", + CreatorCode: "TVOD", + }, +} diff --git a/hotline/files.go b/hotline/files.go index 0c23334..19375e9 100644 --- a/hotline/files.go +++ b/hotline/files.go @@ -8,39 +8,21 @@ import ( "strings" ) -const defaultCreator = "TTXT" -const defaultType = "TEXT" +func downcaseFileExtension(filename string) string { + splitStr := strings.Split(filename, ".") + ext := strings.ToLower( + splitStr[len(splitStr)-1], + ) -var fileCreatorCodes = map[string]string{ - "sit": "SIT!", - "pdf": "CARO", + return ext } -var fileTypeCodes = map[string]string{ - "sit": "SIT!", - "jpg": "JPEG", - "pdf": "PDF ", -} - -func fileTypeFromFilename(fn string) string { - ext := strings.Split(fn, ".") - code := fileTypeCodes[ext[len(ext)-1]] - - if code == "" { - code = defaultType - } - - return code -} - -func fileCreatorFromFilename(fn string) string { - ext := strings.Split(fn, ".") - code := fileCreatorCodes[ext[len(ext)-1]] - if code == "" { - code = defaultCreator +func fileTypeFromFilename(fn string) fileType { + ft, ok := fileTypes[downcaseFileExtension(fn)] + if ok { + return ft } - - return code + return defaultFileType } func getFileNameList(filePath string) (fields []Field, err error) { @@ -53,10 +35,9 @@ func getFileNameList(filePath string) (fields []Field, err error) { var fileType []byte var fnwi FileNameWithInfo fileCreator := make([]byte, 4) - //fileSize := make([]byte, 4) if !file.IsDir() { - fileType = []byte(fileTypeFromFilename(file.Name())) - fileCreator = []byte(fileCreatorFromFilename(file.Name())) + fileType = []byte(fileTypeFromFilename(file.Name()).TypeCode) + fileCreator = []byte(fileTypeFromFilename(file.Name()).CreatorCode) binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(file.Size())) copy(fnwi.Type[:], fileType[:]) diff --git a/hotline/flattened_file_object.go b/hotline/flattened_file_object.go index ee8a69b..bd281e0 100644 --- a/hotline/flattened_file_object.go +++ b/hotline/flattened_file_object.go @@ -58,8 +58,8 @@ type FlatFileInformationFork struct { func NewFlatFileInformationFork(fileName string) FlatFileInformationFork { return FlatFileInformationFork{ Platform: []byte("AMAC"), // TODO: Remove hardcode to support "AWIN" Platform (maybe?) - TypeSignature: []byte(fileTypeFromFilename(fileName)), // TODO: Don't infer types from filename - CreatorSignature: []byte(fileCreatorFromFilename(fileName)), // TODO: Don't infer types from filename + TypeSignature: []byte(fileTypeFromFilename(fileName).TypeCode), // TODO: Don't infer types from filename + CreatorSignature: []byte(fileTypeFromFilename(fileName).CreatorCode), // TODO: Don't infer types from filename Flags: []byte{0, 0, 0, 0}, // TODO: What is this? PlatformFlags: []byte{0, 0, 1, 0}, // TODO: What is this? RSVD: make([]byte, 32), // Unimplemented in Hotline Protocol diff --git a/hotline/transaction_handlers_test.go b/hotline/transaction_handlers_test.go index f0a3ee7..f8d3b2e 100644 --- a/hotline/transaction_handlers_test.go +++ b/hotline/transaction_handlers_test.go @@ -490,7 +490,7 @@ func TestHandleGetFileInfo(t *testing.T) { Fields: []Field{ NewField(fieldFileName, []byte("testfile.txt")), NewField(fieldFileTypeString, []byte("TEXT")), - NewField(fieldFileCreatorString, []byte("TTXT")), + NewField(fieldFileCreatorString, []byte("ttxt")), NewField(fieldFileComment, []byte("TODO")), NewField(fieldFileType, []byte("TEXT")), NewField(fieldFileCreateDate, []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}),