]> git.r.bdr.sh - rbdr/mobius/commitdiff
Add more file extension -> type/creator code mappings
authorJeff Halter <redacted>
Wed, 25 May 2022 22:03:54 +0000 (15:03 -0700)
committerJeff Halter <redacted>
Wed, 25 May 2022 22:10:28 +0000 (15:10 -0700)
hotline/file_types.go [new file with mode: 0644]
hotline/files.go
hotline/flattened_file_object.go
hotline/transaction_handlers_test.go

diff --git a/hotline/file_types.go b/hotline/file_types.go
new file mode 100644 (file)
index 0000000..90ff57f
--- /dev/null
@@ -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",
+       },
+}
index 0c233348c0a093af58383a590725ba76648efa71..19375e9a831a83cfea1baad80d64b78a9a30ade3 100644 (file)
@@ -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[:])
index ee8a69b2f654e389a06da35ae0d6108575190a36..bd281e070b855726952217ac2e05eebd6221b1e2 100644 (file)
@@ -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
index f0a3ee746f39bb74fe9c4fa4e3a5aecfb1594125..f8d3b2ef65b5f8fba1a17ea350730257bb3c485b 100644 (file)
@@ -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}),