]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_path.go
Implement handling of special case Dropbox and Upload folders
[rbdr/mobius] / hotline / file_path.go
index d6c05bcbcfb581d4df6d7f0dd89e2eb0670cea81..d5ddd230c2a7b84ad15ef6b50950aedd23fd655a 100644 (file)
@@ -5,6 +5,7 @@ import (
        "encoding/binary"
        "errors"
        "path"
        "encoding/binary"
        "errors"
        "path"
+       "strings"
 )
 
 const pathSeparator = "/" // File path separator TODO: make configurable to support Windows
 )
 
 const pathSeparator = "/" // File path separator TODO: make configurable to support Windows
@@ -31,7 +32,11 @@ type FilePath struct {
 }
 
 const minFilePathLen = 2
 }
 
 const minFilePathLen = 2
+
 func (fp *FilePath) UnmarshalBinary(b []byte) error {
 func (fp *FilePath) UnmarshalBinary(b []byte) error {
+       if b == nil {
+               return nil
+       }
        if len(b) < minFilePathLen {
                return errors.New("insufficient bytes")
        }
        if len(b) < minFilePathLen {
                return errors.New("insufficient bytes")
        }
@@ -50,6 +55,22 @@ func (fp *FilePath) UnmarshalBinary(b []byte) error {
        return nil
 }
 
        return nil
 }
 
+func (fp *FilePath) IsDropbox() bool {
+       if fp.Len() == 0 {
+               return false
+       }
+
+       return strings.Contains(strings.ToLower(string(fp.Items[fp.Len()-1].Name)), "drop box")
+}
+
+func (fp *FilePath) IsUploadDir() bool {
+       if fp.Len() == 0 {
+               return false
+       }
+
+       return strings.Contains(strings.ToLower(string(fp.Items[fp.Len()-1].Name)), "uploads")
+}
+
 func (fp *FilePath) Len() uint16 {
        return binary.BigEndian.Uint16(fp.ItemCount[:])
 }
 func (fp *FilePath) Len() uint16 {
        return binary.BigEndian.Uint16(fp.ItemCount[:])
 }
@@ -71,3 +92,21 @@ func ReadFilePath(filePathFieldData []byte) string {
        }
        return fp.String()
 }
        }
        return fp.String()
 }
+
+func readPath(fileRoot string, filePath, fileName []byte) (fullPath string, err error) {
+       var fp FilePath
+       if filePath != nil {
+               if err = fp.UnmarshalBinary(filePath); err != nil {
+                       return "", err
+               }
+       }
+
+       fullPath = path.Join(
+               "/",
+               fileRoot,
+               fp.String(),
+               path.Join("/", string(fileName)),
+       )
+
+       return fullPath, nil
+}