+
+ if rFile.IsDir() {
+ dir, err := os.ReadDir(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ var c uint32
+ for _, f := range dir {
+ if !ignoreFile(f.Name(), ignoreList) {
+ c += 1
+ }
+ }
+
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], c)
+ copy(fnwi.Type[:], "fldr")
+ copy(fnwi.Creator[:], fileCreator)
+ } else {
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(rFile.Size()))
+ copy(fnwi.Type[:], fileTypeFromFilename(rFile.Name()).TypeCode)
+ copy(fnwi.Creator[:], fileTypeFromFilename(rFile.Name()).CreatorCode)
+ }
+ } else if file.IsDir() {
+ dir, err := os.ReadDir(filepath.Join(path, file.Name()))
+ if err != nil {
+ return fields, err
+ }
+
+ var c uint32
+ for _, f := range dir {
+ if !ignoreFile(f.Name(), ignoreList) {
+ c += 1
+ }
+ }
+
+ binary.BigEndian.PutUint32(fnwi.FileSize[:], c)
+ copy(fnwi.Type[:], "fldr")
+ copy(fnwi.Creator[:], fileCreator)
+ } else {
+ // the Hotline protocol does not support file sizes > 4GiB due to the 4 byte field size, so skip them
+ if fileInfo.Size() > maxFileSize {
+ continue
+ }
+
+ hlFile, err := newFileWrapper(&OSFileStore{}, path+"/"+file.Name(), 0)
+ if err != nil {
+ return nil, err
+ }
+
+ copy(fnwi.FileSize[:], hlFile.totalSize())
+ copy(fnwi.Type[:], hlFile.ffo.FlatFileInformationFork.TypeSignature)
+ copy(fnwi.Creator[:], hlFile.ffo.FlatFileInformationFork.CreatorSignature)
+ }
+
+ strippedName := strings.ReplaceAll(file.Name(), ".incomplete", "")
+ strippedName, err = txtEncoder.String(strippedName)
+ if err != nil {
+ continue